using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using DiscordRPC;
using MafiaCommon;
namespace MafiaGame
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window
{
private static MainWindow _mainWindow;
public static MainWindow Instance => _mainWindow;
public MainWindow()
{
InitializeComponent();
_mainWindow = this;
App.Instance.GetRpcClient().SetPresence(new RichPresence()
{
State = "В главном меню"
});
}
public void HideAll()
{
MainMenu.Visibility = Visibility.Hidden;
SettingsGUI.Visibility = Visibility.Hidden;
IpInput.Visibility = Visibility.Hidden;
GameQueue.Visibility = Visibility.Hidden;
DisconnectScreen.Visibility = Visibility.Hidden;
GameVotingPassive.Visibility = Visibility.Hidden;
GameVotingActive.Visibility = Visibility.Hidden;
GameEndScreen.Visibility = Visibility.Hidden;
}
private void Exit_OnClick(object sender, RoutedEventArgs e)
{
App.Current.Shutdown(0);
}
private void Play_OnClick(object sender, RoutedEventArgs e)
{
IpInputGUIBack.IsEnabled = true;
IpInputGUIConnect.IsEnabled = true;
IpBox.IsEnabled = true;
MainMenu.Visibility = Visibility.Hidden;
IpInput.Visibility = Visibility.Visible;
App.Instance.GetRpcClient().SetPresence(new RichPresence()
{
State = "Выбирает сервер"
});
}
private void ConnectToServer_OnClick(object sender, RoutedEventArgs e)
{
String ip = IpBox.Text;
App.Instance.GetRpcClient().SetPresence(new RichPresence()
{
State = "Присоединяется к серверу"
});
IpInputGUIBack.IsEnabled = false;
IpInputGUIConnect.IsEnabled = false;
IpBox.IsEnabled = false;
Thread thread = new Thread(() =>
{
App.Instance.Connection = new ServerConnection(ip);
});
thread.Start();
}
private void Back_OnClick(object sender, RoutedEventArgs e)
{
IpInput.Visibility = Visibility.Hidden;
DisconnectScreen.Visibility = Visibility.Hidden;
MainMenu.Visibility = Visibility.Visible;
App.Instance.GetRpcClient().SetPresence(new RichPresence()
{
State = "В главном меню"
});
}
private void SettingsBack_OnClick(object sender, RoutedEventArgs e)
{
Settings.Save();
SettingsGUI.Visibility = Visibility.Hidden;
MainMenu.Visibility = Visibility.Visible;
App.Instance.GetRpcClient().SetPresence(new RichPresence()
{
State = "В главном меню"
});
}
private void Settings_OnClick(object sender, RoutedEventArgs e)
{
MainMenu.Visibility = Visibility.Hidden;
SettingsGUI.Visibility = Visibility.Visible;
NickBox.Text = Settings.Config().Nick;
}
private void NickBox_OnTextInput(object sender, TextChangedEventArgs e)
{
Settings.Config().Nick = NickBox.Text;
}
public void ShowGameQueueScreen()
{
MainMenu.Visibility = Visibility.Hidden;
IpInput.Visibility = Visibility.Hidden;
SettingsGUI.Visibility = Visibility.Hidden;
DisconnectScreen.Visibility = Visibility.Hidden;
GameQueue.Visibility = Visibility.Visible;
}
public void ShowDisconnectScreen(string reason)
{
ReasonText.Text = reason;
MainMenu.Visibility = Visibility.Hidden;
IpInput.Visibility = Visibility.Hidden;
SettingsGUI.Visibility = Visibility.Hidden;
GameQueue.Visibility = Visibility.Hidden;
DisconnectScreen.Visibility = Visibility.Visible;
}
private void GameQueue_OnKeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
GameQueueChatSend_OnClick(null, null);
}
}
private void GameQueueChatSend_OnClick(object sender, RoutedEventArgs e)
{
if (QueueChatInput.Text.Trim() != "")
{
App.Instance.Connection.SendMessage(ChatType.Queue, QueueChatInput.Text);
QueueChatInput.Clear();
}
}
public void ShowVotingPassive(string name)
{
GameQueue.Visibility = Visibility.Hidden;
GameVotingPassive.Visibility = Visibility.Visible;
GameVotingPassiveRole.Text = name;
}
public void ShowVotingActive(string name)
{
GameQueue.Visibility = Visibility.Hidden;
GameVotingActive.Visibility = Visibility.Visible;
GameVotingActiveRole.Text = name;
}
private void GameVotingActiveChatSend_OnClick(object sender, RoutedEventArgs e)
{
if (GameVotingActiveChatInput.Text.Trim() != "")
{
App.Instance.Connection.SendMessage(ChatType.Active, GameVotingActiveChatInput.Text);
GameVotingActiveChatInput.Clear();
}
}
private void GameVotingActive_OnKeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
GameVotingActiveChatSend_OnClick(null, null);
}
}
public void ShowGameEnd(bool isWon, List playerRoles)
{
if (isWon)
{
GameEndScreenWon.Text = "Ты победил!";
}
else
{
GameEndScreenWon.Text = "Ты проиграл!";
}
string text = "";
foreach (PlayerRole playerRole in playerRoles)
{
string role = "Роль";
switch (playerRole.Role)
{
case Role.Citizen:
role = "Мирный житель";
break;
case Role.Mafia:
role = "Мафия";
break;
case Role.Don:
role = "Дон";
break;
}
text += playerRole.Name + " - " + role + Environment.NewLine;
}
GameEndScreenRoles.Text = text;
GameVotingActive.Visibility = Visibility.Hidden;
GameVotingPassive.Visibility = Visibility.Hidden;
GameEndScreen.Visibility = Visibility.Visible;
}
private void GameEndScreenBack_OnClick(object sender, RoutedEventArgs e)
{
GameEndScreen.Visibility = Visibility.Hidden;
GameQueue.Visibility = Visibility.Visible;
}
private void GameQueueLeave_OnClick(object sender, RoutedEventArgs e)
{
App.Instance.Connection.Disconnect();
GameQueue.Visibility = Visibility.Hidden;
MainMenu.Visibility = Visibility.Visible;
App.Instance.GetRpcClient().SetPresence(new RichPresence()
{
State = "В главном меню"
});
}
private void GameVotingActiveSelect_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
ListBoxItem selected = (ListBoxItem)GameVotingActiveSelect.SelectedItem;
App.Instance.Connection.Vote(Convert.ToInt32(((string)selected.Content).Split(")")[0]));
}
}
}