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; GameDay.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; HideAll(); 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(); HideAll(); 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])); } private void GameDayWait_OnKeyUp(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) { GameDayChatSend_OnClick(null, null); } } private void GameDayChatSend_OnClick(object sender, RoutedEventArgs e) { if (GameDayChatInput.Text.Trim() != "") { App.Instance.Connection.SendMessage(ChatType.Day, GameDayChatInput.Text); GameDayChatInput.Clear(); } } private void GameDaySelect_OnMouseDoubleClick(object sender, MouseButtonEventArgs e) { ListBoxItem selected = (ListBoxItem)GameDaySelect.SelectedItem; App.Instance.Connection.Vote(Convert.ToInt32(((string)selected.Content).Split(")")[0])); } public void ShowDay(bool voting, Role role, List players) { GameDaySelect.IsEnabled = voting; if (role == Role.Died) { GameDayHotBar.Text = "Коли умер, жди"; } else { if (voting) { GameDayHotBar.Text = "Голосуй и молись"; foreach (Player player in players) { ListBoxItem item = new ListBoxItem(); item.Content = player.Id.ToString() + ") " + player.Name; MainWindow.Instance.GameDaySelect.Items.Add(item); } } else { GameDayHotBar.Text = "Обсуждай и думай"; } } GameDay.Visibility = Visibility.Visible; } } }