303 lines
9.9 KiB
C#
303 lines
9.9 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// Interaction logic for MainWindow.xaml
|
||
/// </summary>
|
||
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<PlayerRole> 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<Player> 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;
|
||
}
|
||
}
|
||
} |