Skip to content

Commit

Permalink
Quick match
Browse files Browse the repository at this point in the history
  • Loading branch information
devo1929 committed Sep 26, 2022
1 parent 602b83b commit f315732
Show file tree
Hide file tree
Showing 52 changed files with 2,362 additions and 140 deletions.
2 changes: 2 additions & 0 deletions ClientCore/ClientConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,8 @@ public string GetThemePath(string themeName)

public string MPMapsIniPath => SafePath.CombineFilePath(clientDefinitionsIni.GetStringValue(SETTINGS, "MPMapsPath", SafePath.CombineFilePath("INI", "MPMaps.ini")));

public string QuickMatchPath => clientDefinitionsIni.GetStringValue(SETTINGS, "QuickMatchPath", "INI/QuickMatch.ini");

public string KeyboardINI => clientDefinitionsIni.GetStringValue(SETTINGS, "KeyboardINI", "Keyboard.ini");

public int MinimumIngameWidth => clientDefinitionsIni.GetIntValue(SETTINGS, "MinimumIngameWidth", 640);
Expand Down
11 changes: 11 additions & 0 deletions ClientCore/Exceptions/ClientException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System;

namespace ClientCore.Exceptions
{
public class ClientException : Exception
{
public ClientException(string message, Exception innerException = null) : base(message, innerException)
{
}
}
}
14 changes: 14 additions & 0 deletions ClientCore/Exceptions/ClientRequestException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Net;

namespace ClientCore.Exceptions
{
public class ClientRequestException : ClientException
{
public HttpStatusCode? StatusCode { get; }

public ClientRequestException(string message, HttpStatusCode? statusCode = null) : base(message)
{
StatusCode = statusCode;
}
}
}
8 changes: 5 additions & 3 deletions ClientGUI/Parser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
using Rampastring.XNAUI.XNAControls;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace ClientGUI
{
Expand Down Expand Up @@ -69,6 +70,9 @@ private XNAControl GetControl(string controlName)
if (controlName == primaryControl.Name)
return primaryControl;

if (controlName == primaryControl.Parent.Name)
return primaryControl.Parent;

var control = Find(primaryControl.Children, controlName);
if (control == null)
throw new KeyNotFoundException($"Control '{controlName}' not found while parsing input '{Input}'");
Expand Down Expand Up @@ -104,7 +108,7 @@ public void SetPrimaryControl(XNAControl primaryControl)
public int GetExprValue(string input, XNAControl parsingControl)
{
this.parsingControl = parsingControl;
Input = input;
Input = Regex.Replace(input, @"\s", "");
tokenPlace = 0;
return GetExprValue();
}
Expand All @@ -115,8 +119,6 @@ private int GetExprValue()

while (true)
{
SkipWhitespace();

if (IsEndOfInput())
return value;

Expand Down
7 changes: 6 additions & 1 deletion ClientGUI/XNAMessageBox.cs
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,10 @@ private static void MsgBox_OKClicked(XNAMessageBox messageBox)
/// <param name="caption">The caption of the message box.</param>
/// <param name="description">The description in the message box.</param>
/// <returns>The XNAMessageBox instance that is created.</returns>
public static XNAMessageBox ShowYesNoDialog(WindowManager windowManager, string caption, string description)
public static XNAMessageBox ShowYesNoDialog(WindowManager windowManager, string caption, string description)
=> ShowYesNoDialog(windowManager, caption, description, null);

public static XNAMessageBox ShowYesNoDialog(WindowManager windowManager, string caption, string description, Action<XNAMessageBox> yesAction)
{
var panel = new DarkeningPanel(windowManager);
windowManager.AddAndInitializeControl(panel);
Expand All @@ -274,6 +277,8 @@ public static XNAMessageBox ShowYesNoDialog(WindowManager windowManager, string

panel.AddChild(msgBox);
msgBox.YesClickedAction = MsgBox_YesClicked;
if (yesAction != null)
msgBox.YesClickedAction += yesAction;
msgBox.NoClickedAction = MsgBox_NoClicked;

return msgBox;
Expand Down
46 changes: 33 additions & 13 deletions DXMainClient/DXGUI/Generic/LoadingScreen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@
using DTAClient.DXGUI.Multiplayer;
using DTAClient.DXGUI.Multiplayer.CnCNet;
using DTAClient.DXGUI.Multiplayer.GameLobby;
using DTAClient.DXGUI.Multiplayer.QuickMatch;
using DTAClient.Online;
using DTAConfig;
using Microsoft.Xna.Framework;
using Rampastring.XNAUI;
using System.Threading.Tasks;
using Rampastring.Tools;
using ClientUpdater;
using Rampastring.XNAUI.XNAControls;
using SkirmishLobby = DTAClient.DXGUI.Multiplayer.GameLobby.SkirmishLobby;

namespace DTAClient.DXGUI.Generic
Expand Down Expand Up @@ -79,26 +81,20 @@ private void LogGameClientVersion()

private void LoadMaps()
{
mapLoader = new MapLoader();
mapLoader = MapLoader.GetInstance();
mapLoader.LoadMaps();
}

private void Finish()
{
ProgramConstants.GAME_VERSION = ClientConfiguration.Instance.ModMode ?
ProgramConstants.GAME_VERSION = ClientConfiguration.Instance.ModMode ?
"N/A" : Updater.GameVersion;

DiscordHandler discordHandler = null;
if (!string.IsNullOrEmpty(ClientConfiguration.Instance.DiscordAppId))
discordHandler = new DiscordHandler(WindowManager);

ClientGUICreator.Instance.AddControl(typeof(GameLobbyCheckBox));
ClientGUICreator.Instance.AddControl(typeof(GameLobbyDropDown));
ClientGUICreator.Instance.AddControl(typeof(MapPreviewBox));
ClientGUICreator.Instance.AddControl(typeof(GameLaunchButton));
ClientGUICreator.Instance.AddControl(typeof(ChatListBox));
ClientGUICreator.Instance.AddControl(typeof(XNAChatTextBox));
ClientGUICreator.Instance.AddControl(typeof(PlayerExtraOptionsPanel));
DeclareCustomControls();

var gameCollection = new GameCollection();
gameCollection.Initialize();
Expand All @@ -109,7 +105,7 @@ private void Finish()
var cncnetManager = new CnCNetManager(WindowManager, gameCollection, cncnetUserData);
var tunnelHandler = new TunnelHandler(WindowManager, cncnetManager);
var privateMessageHandler = new PrivateMessageHandler(cncnetManager, cncnetUserData);

var topBar = new TopBar(WindowManager, cncnetManager, privateMessageHandler);

var optionsWindow = new OptionsWindow(WindowManager, gameCollection, topBar);
Expand All @@ -120,23 +116,26 @@ private void Finish()

var cncnetGameLobby = new CnCNetGameLobby(WindowManager,
"MultiplayerGameLobby", topBar, cncnetManager, tunnelHandler, gameCollection, cncnetUserData, mapLoader, discordHandler, pmWindow);
var cncnetGameLoadingLobby = new CnCNetGameLoadingLobby(WindowManager,
var cncnetGameLoadingLobby = new CnCNetGameLoadingLobby(WindowManager,
topBar, cncnetManager, tunnelHandler, mapLoader.GameModes, gameCollection, discordHandler);
var cncnetLobby = new CnCNetLobby(WindowManager, cncnetManager,
var cncnetLobby = new CnCNetLobby(WindowManager, cncnetManager,
cncnetGameLobby, cncnetGameLoadingLobby, topBar, pmWindow, tunnelHandler,
gameCollection, cncnetUserData, optionsWindow);
var gipw = new GameInProgressWindow(WindowManager);

var skirmishLobby = new SkirmishLobby(WindowManager, topBar, mapLoader, discordHandler);
var quickMatchWindow = new QuickMatchWindow(WindowManager);

topBar.SetSecondarySwitch(cncnetLobby);

var mainMenu = new MainMenu(WindowManager, skirmishLobby, lanLobby,
var mainMenu = new MainMenu(WindowManager, skirmishLobby, quickMatchWindow, lanLobby,
topBar, optionsWindow, cncnetLobby, cncnetManager, discordHandler);
WindowManager.AddAndInitializeControl(mainMenu);

DarkeningPanel.AddAndInitializeWithControl(WindowManager, skirmishLobby);

DarkeningPanel.AddAndInitializeWithControl(WindowManager, quickMatchWindow);

DarkeningPanel.AddAndInitializeWithControl(WindowManager, cncnetGameLoadingLobby);

DarkeningPanel.AddAndInitializeWithControl(WindowManager, cncnetGameLobby);
Expand All @@ -152,9 +151,11 @@ private void Finish()

topBar.SetTertiarySwitch(pmWindow);
topBar.SetOptionsWindow(optionsWindow);
topBar.SetQuickMatchWindow(quickMatchWindow);

WindowManager.AddAndInitializeControl(gipw);
skirmishLobby.Disable();
quickMatchWindow.Disable();
cncnetLobby.Disable();
cncnetGameLobby.Disable();
cncnetGameLoadingLobby.Disable();
Expand Down Expand Up @@ -183,6 +184,25 @@ private void Finish()
Cursor.Visible = visibleSpriteCursor;
}

private static void DeclareCustomControls()
{
ClientGUICreator.Instance.AddControl(typeof(GameLobbyCheckBox));
ClientGUICreator.Instance.AddControl(typeof(GameLobbyDropDown));
ClientGUICreator.Instance.AddControl(typeof(MapPreviewBox));
ClientGUICreator.Instance.AddControl(typeof(GameLaunchButton));
ClientGUICreator.Instance.AddControl(typeof(ChatListBox));
ClientGUICreator.Instance.AddControl(typeof(XNAChatTextBox));
ClientGUICreator.Instance.AddControl(typeof(XNAScrollBar));
ClientGUICreator.Instance.AddControl(typeof(XNAPasswordBox));
ClientGUICreator.Instance.AddControl(typeof(PlayerExtraOptionsPanel));
ClientGUICreator.Instance.AddControl(typeof(QuickMatchLoginPanel));
ClientGUICreator.Instance.AddControl(typeof(QuickMatchLobbyPanel));
ClientGUICreator.Instance.AddControl(typeof(QuickMatchLobbyFooterPanel));
ClientGUICreator.Instance.AddControl(typeof(QuickMatchMapList));
ClientGUICreator.Instance.AddControl(typeof(QuickMatchStatusMessageWindow));
ClientGUICreator.Instance.AddControl(typeof(XNAClientTabControl));
}

public override void Update(GameTime gameTime)
{
base.Update(gameTime);
Expand Down
26 changes: 23 additions & 3 deletions DXMainClient/DXGUI/Generic/MainMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using DTAClient.DXGUI.Multiplayer;
using DTAClient.DXGUI.Multiplayer.CnCNet;
using DTAClient.DXGUI.Multiplayer.GameLobby;
using DTAClient.DXGUI.Multiplayer.QuickMatch;
using DTAClient.Online;
using DTAConfig;
using Localization;
Expand Down Expand Up @@ -36,12 +37,20 @@ class MainMenu : XNAWindow, ISwitchable
/// <summary>
/// Creates a new instance of the main menu.
/// </summary>
public MainMenu(WindowManager windowManager, SkirmishLobby skirmishLobby,
LANLobby lanLobby, TopBar topBar, OptionsWindow optionsWindow,
public MainMenu(
WindowManager windowManager,
SkirmishLobby skirmishLobby,
QuickMatchWindow quickMatchWindow,
LANLobby lanLobby,
TopBar topBar,
OptionsWindow optionsWindow,
CnCNetLobby cncnetLobby,
CnCNetManager connectionManager, DiscordHandler discordHandler) : base(windowManager)
CnCNetManager connectionManager,
DiscordHandler discordHandler
) : base(windowManager)
{
this.skirmishLobby = skirmishLobby;
this.quickMatchWindow = quickMatchWindow;
this.lanLobby = lanLobby;
this.topBar = topBar;
this.connectionManager = connectionManager;
Expand All @@ -62,6 +71,8 @@ public MainMenu(WindowManager windowManager, SkirmishLobby skirmishLobby,

private SkirmishLobby skirmishLobby;

private QuickMatchWindow quickMatchWindow;

private LANLobby lanLobby;

private CnCNetManager connectionManager;
Expand Down Expand Up @@ -106,6 +117,7 @@ private bool UpdateInProgress
private XNAClientButton btnLoadGame;
private XNAClientButton btnSkirmish;
private XNAClientButton btnCnCNet;
private XNAClientButton btnQuickmatch;
private XNAClientButton btnLan;
private XNAClientButton btnOptions;
private XNAClientButton btnMapEditor;
Expand Down Expand Up @@ -154,6 +166,11 @@ public override void Initialize()
btnCnCNet.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
btnCnCNet.LeftClick += BtnCnCNet_LeftClick;

btnQuickmatch = new XNAClientButton(WindowManager);
btnQuickmatch.Name = nameof(btnQuickmatch);
btnQuickmatch.LeftClick += BtnQuickmatch_LeftClick;
btnQuickmatch.Disable();

btnLan = new XNAClientButton(WindowManager);
btnLan.Name = nameof(btnLan);
btnLan.IdleTexture = AssetLoader.LoadTexture("MainMenu/lan.png");
Expand Down Expand Up @@ -225,6 +242,7 @@ public override void Initialize()
AddChild(btnLoadGame);
AddChild(btnSkirmish);
AddChild(btnCnCNet);
AddChild(btnQuickmatch);
AddChild(btnLan);
AddChild(btnOptions);
AddChild(btnMapEditor);
Expand Down Expand Up @@ -799,6 +817,8 @@ private void BtnLan_LeftClick(object sender, EventArgs e)

private void BtnCnCNet_LeftClick(object sender, EventArgs e) => topBar.SwitchToSecondary();

private void BtnQuickmatch_LeftClick(object sender, EventArgs e) => quickMatchWindow.Enable();

private void BtnSkirmish_LeftClick(object sender, EventArgs e)
{
skirmishLobby.Open();
Expand Down
5 changes: 5 additions & 0 deletions DXMainClient/DXGUI/Generic/TopBar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using ClientCore;
using System.Threading;
using DTAClient.Domain.Multiplayer.CnCNet;
using DTAClient.DXGUI.Multiplayer.QuickMatch;
using DTAClient.Online.EventArguments;
using DTAConfig;
using Localization;
Expand Down Expand Up @@ -53,6 +54,7 @@ PrivateMessageHandler privateMessageHandler
private ISwitchable privateMessageSwitch;

private OptionsWindow optionsWindow;
private QuickMatchWindow quickMatchWindow;

private XNAClientButton btnMainButton;
private XNAClientButton btnCnCNetLobby;
Expand Down Expand Up @@ -107,6 +109,8 @@ public void SetOptionsWindow(OptionsWindow optionsWindow)
optionsWindow.EnabledChanged += OptionsWindow_EnabledChanged;
}

public void SetQuickMatchWindow(QuickMatchWindow quickMatchWindow) => this.quickMatchWindow = quickMatchWindow;

private void OptionsWindow_EnabledChanged(object sender, EventArgs e)
{
if (!lanMode)
Expand Down Expand Up @@ -324,6 +328,7 @@ private void BtnMainButton_LeftClick(object sender, EventArgs e)
LastSwitchType = SwitchType.PRIMARY;
cncnetLobbySwitch.SwitchOff();
privateMessageSwitch.SwitchOff();
quickMatchWindow.Disable();
primarySwitches[primarySwitches.Count - 1].SwitchOn();

// HACK warning
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using System;
using ClientGUI;
using Rampastring.XNAUI;

namespace DTAClient.DXGUI.Multiplayer.QuickMatch;

public class QuickMatchLobbyFooterPanel : INItializableWindow
{
private XNAClientButton btnQuickMatch;
private XNAClientButton btnLogout;
private XNAClientButton btnExit;

public EventHandler LogoutEvent;

public EventHandler ExitEvent;

public EventHandler QuickMatchEvent;

public QuickMatchLobbyFooterPanel(WindowManager windowManager) : base(windowManager)
{
}

public override void Initialize()
{
IniNameOverride = nameof(QuickMatchLobbyFooterPanel);
base.Initialize();

btnLogout = FindChild<XNAClientButton>(nameof(btnLogout));
btnLogout.LeftClick += (_, _) => LogoutEvent?.Invoke(this, null);

btnExit = FindChild<XNAClientButton>(nameof(btnExit));
btnExit.LeftClick += (_, _) => ExitEvent?.Invoke(this, null);

btnQuickMatch = FindChild<XNAClientButton>(nameof(btnQuickMatch));
btnQuickMatch.LeftClick += (_, _) => QuickMatchEvent?.Invoke(this, null);
}
}
Loading

0 comments on commit f315732

Please sign in to comment.