Skip to content

Commit 9b16b97

Browse files
committed
Quick match
1 parent 602b83b commit 9b16b97

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+2360
-140
lines changed

ClientCore/ClientConfiguration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@ public string GetThemePath(string themeName)
252252

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

255+
public string QuickMatchPath => clientDefinitionsIni.GetStringValue(SETTINGS, "QuickMatchPath", "INI/QuickMatch.ini");
256+
255257
public string KeyboardINI => clientDefinitionsIni.GetStringValue(SETTINGS, "KeyboardINI", "Keyboard.ini");
256258

257259
public int MinimumIngameWidth => clientDefinitionsIni.GetIntValue(SETTINGS, "MinimumIngameWidth", 640);
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
3+
namespace ClientCore.Exceptions
4+
{
5+
public class ClientException : Exception
6+
{
7+
public ClientException(string message, Exception innerException = null) : base(message, innerException)
8+
{
9+
}
10+
}
11+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System.Net;
2+
3+
namespace ClientCore.Exceptions
4+
{
5+
public class ClientRequestException : ClientException
6+
{
7+
public HttpStatusCode? StatusCode { get; }
8+
9+
public ClientRequestException(string message, HttpStatusCode? statusCode = null) : base(message)
10+
{
11+
StatusCode = statusCode;
12+
}
13+
}
14+
}

ClientGUI/Parser.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
using Rampastring.XNAUI.XNAControls;
2525
using System;
2626
using System.Collections.Generic;
27+
using System.Text.RegularExpressions;
2728

2829
namespace ClientGUI
2930
{
@@ -69,6 +70,9 @@ private XNAControl GetControl(string controlName)
6970
if (controlName == primaryControl.Name)
7071
return primaryControl;
7172

73+
if (controlName == primaryControl.Parent.Name)
74+
return primaryControl.Parent;
75+
7276
var control = Find(primaryControl.Children, controlName);
7377
if (control == null)
7478
throw new KeyNotFoundException($"Control '{controlName}' not found while parsing input '{Input}'");
@@ -104,7 +108,7 @@ public void SetPrimaryControl(XNAControl primaryControl)
104108
public int GetExprValue(string input, XNAControl parsingControl)
105109
{
106110
this.parsingControl = parsingControl;
107-
Input = input;
111+
Input = Regex.Replace(input, @"\s", "");
108112
tokenPlace = 0;
109113
return GetExprValue();
110114
}
@@ -115,8 +119,6 @@ private int GetExprValue()
115119

116120
while (true)
117121
{
118-
SkipWhitespace();
119-
120122
if (IsEndOfInput())
121123
return value;
122124

ClientGUI/XNAMessageBox.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,10 @@ private static void MsgBox_OKClicked(XNAMessageBox messageBox)
262262
/// <param name="caption">The caption of the message box.</param>
263263
/// <param name="description">The description in the message box.</param>
264264
/// <returns>The XNAMessageBox instance that is created.</returns>
265-
public static XNAMessageBox ShowYesNoDialog(WindowManager windowManager, string caption, string description)
265+
public static XNAMessageBox ShowYesNoDialog(WindowManager windowManager, string caption, string description)
266+
=> ShowYesNoDialog(windowManager, caption, description, null);
267+
268+
public static XNAMessageBox ShowYesNoDialog(WindowManager windowManager, string caption, string description, Action<XNAMessageBox> yesAction)
266269
{
267270
var panel = new DarkeningPanel(windowManager);
268271
windowManager.AddAndInitializeControl(panel);
@@ -274,6 +277,8 @@ public static XNAMessageBox ShowYesNoDialog(WindowManager windowManager, string
274277

275278
panel.AddChild(msgBox);
276279
msgBox.YesClickedAction = MsgBox_YesClicked;
280+
if (yesAction != null)
281+
msgBox.YesClickedAction += yesAction;
277282
msgBox.NoClickedAction = MsgBox_NoClicked;
278283

279284
return msgBox;

DXMainClient/DXGUI/Generic/LoadingScreen.cs

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
using DTAClient.DXGUI.Multiplayer;
88
using DTAClient.DXGUI.Multiplayer.CnCNet;
99
using DTAClient.DXGUI.Multiplayer.GameLobby;
10+
using DTAClient.DXGUI.Multiplayer.QuickMatch;
1011
using DTAClient.Online;
1112
using DTAConfig;
1213
using Microsoft.Xna.Framework;
1314
using Rampastring.XNAUI;
1415
using System.Threading.Tasks;
1516
using Rampastring.Tools;
1617
using ClientUpdater;
18+
using Rampastring.XNAUI.XNAControls;
1719
using SkirmishLobby = DTAClient.DXGUI.Multiplayer.GameLobby.SkirmishLobby;
1820

1921
namespace DTAClient.DXGUI.Generic
@@ -79,26 +81,20 @@ private void LogGameClientVersion()
7981

8082
private void LoadMaps()
8183
{
82-
mapLoader = new MapLoader();
84+
mapLoader = MapLoader.GetInstance();
8385
mapLoader.LoadMaps();
8486
}
8587

8688
private void Finish()
8789
{
88-
ProgramConstants.GAME_VERSION = ClientConfiguration.Instance.ModMode ?
90+
ProgramConstants.GAME_VERSION = ClientConfiguration.Instance.ModMode ?
8991
"N/A" : Updater.GameVersion;
9092

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

95-
ClientGUICreator.Instance.AddControl(typeof(GameLobbyCheckBox));
96-
ClientGUICreator.Instance.AddControl(typeof(GameLobbyDropDown));
97-
ClientGUICreator.Instance.AddControl(typeof(MapPreviewBox));
98-
ClientGUICreator.Instance.AddControl(typeof(GameLaunchButton));
99-
ClientGUICreator.Instance.AddControl(typeof(ChatListBox));
100-
ClientGUICreator.Instance.AddControl(typeof(XNAChatTextBox));
101-
ClientGUICreator.Instance.AddControl(typeof(PlayerExtraOptionsPanel));
97+
DeclareCustomControls();
10298

10399
var gameCollection = new GameCollection();
104100
gameCollection.Initialize();
@@ -109,7 +105,7 @@ private void Finish()
109105
var cncnetManager = new CnCNetManager(WindowManager, gameCollection, cncnetUserData);
110106
var tunnelHandler = new TunnelHandler(WindowManager, cncnetManager);
111107
var privateMessageHandler = new PrivateMessageHandler(cncnetManager, cncnetUserData);
112-
108+
113109
var topBar = new TopBar(WindowManager, cncnetManager, privateMessageHandler);
114110

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

121117
var cncnetGameLobby = new CnCNetGameLobby(WindowManager,
122118
"MultiplayerGameLobby", topBar, cncnetManager, tunnelHandler, gameCollection, cncnetUserData, mapLoader, discordHandler, pmWindow);
123-
var cncnetGameLoadingLobby = new CnCNetGameLoadingLobby(WindowManager,
119+
var cncnetGameLoadingLobby = new CnCNetGameLoadingLobby(WindowManager,
124120
topBar, cncnetManager, tunnelHandler, mapLoader.GameModes, gameCollection, discordHandler);
125-
var cncnetLobby = new CnCNetLobby(WindowManager, cncnetManager,
121+
var cncnetLobby = new CnCNetLobby(WindowManager, cncnetManager,
126122
cncnetGameLobby, cncnetGameLoadingLobby, topBar, pmWindow, tunnelHandler,
127123
gameCollection, cncnetUserData, optionsWindow);
128124
var gipw = new GameInProgressWindow(WindowManager);
129125

130126
var skirmishLobby = new SkirmishLobby(WindowManager, topBar, mapLoader, discordHandler);
127+
var quickMatchWindow = new QuickMatchWindow(WindowManager);
131128

132129
topBar.SetSecondarySwitch(cncnetLobby);
133130

134-
var mainMenu = new MainMenu(WindowManager, skirmishLobby, lanLobby,
131+
var mainMenu = new MainMenu(WindowManager, skirmishLobby, quickMatchWindow, lanLobby,
135132
topBar, optionsWindow, cncnetLobby, cncnetManager, discordHandler);
136133
WindowManager.AddAndInitializeControl(mainMenu);
137134

138135
DarkeningPanel.AddAndInitializeWithControl(WindowManager, skirmishLobby);
139136

137+
DarkeningPanel.AddAndInitializeWithControl(WindowManager, quickMatchWindow);
138+
140139
DarkeningPanel.AddAndInitializeWithControl(WindowManager, cncnetGameLoadingLobby);
141140

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

153152
topBar.SetTertiarySwitch(pmWindow);
154153
topBar.SetOptionsWindow(optionsWindow);
154+
topBar.SetQuickMatchWindow(quickMatchWindow);
155155

156156
WindowManager.AddAndInitializeControl(gipw);
157157
skirmishLobby.Disable();
158+
quickMatchWindow.Disable();
158159
cncnetLobby.Disable();
159160
cncnetGameLobby.Disable();
160161
cncnetGameLoadingLobby.Disable();
@@ -183,6 +184,25 @@ private void Finish()
183184
Cursor.Visible = visibleSpriteCursor;
184185
}
185186

187+
private static void DeclareCustomControls()
188+
{
189+
ClientGUICreator.Instance.AddControl(typeof(GameLobbyCheckBox));
190+
ClientGUICreator.Instance.AddControl(typeof(GameLobbyDropDown));
191+
ClientGUICreator.Instance.AddControl(typeof(MapPreviewBox));
192+
ClientGUICreator.Instance.AddControl(typeof(GameLaunchButton));
193+
ClientGUICreator.Instance.AddControl(typeof(ChatListBox));
194+
ClientGUICreator.Instance.AddControl(typeof(XNAChatTextBox));
195+
ClientGUICreator.Instance.AddControl(typeof(XNAScrollBar));
196+
ClientGUICreator.Instance.AddControl(typeof(XNAPasswordBox));
197+
ClientGUICreator.Instance.AddControl(typeof(PlayerExtraOptionsPanel));
198+
ClientGUICreator.Instance.AddControl(typeof(QuickMatchLoginPanel));
199+
ClientGUICreator.Instance.AddControl(typeof(QuickMatchLobbyPanel));
200+
ClientGUICreator.Instance.AddControl(typeof(QuickMatchLobbyFooterPanel));
201+
ClientGUICreator.Instance.AddControl(typeof(QuickMatchMapList));
202+
ClientGUICreator.Instance.AddControl(typeof(QuickMatchStatusMessageWindow));
203+
ClientGUICreator.Instance.AddControl(typeof(XNAClientTabControl));
204+
}
205+
186206
public override void Update(GameTime gameTime)
187207
{
188208
base.Update(gameTime);

DXMainClient/DXGUI/Generic/MainMenu.cs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using DTAClient.DXGUI.Multiplayer;
66
using DTAClient.DXGUI.Multiplayer.CnCNet;
77
using DTAClient.DXGUI.Multiplayer.GameLobby;
8+
using DTAClient.DXGUI.Multiplayer.QuickMatch;
89
using DTAClient.Online;
910
using DTAConfig;
1011
using Localization;
@@ -36,12 +37,20 @@ class MainMenu : XNAWindow, ISwitchable
3637
/// <summary>
3738
/// Creates a new instance of the main menu.
3839
/// </summary>
39-
public MainMenu(WindowManager windowManager, SkirmishLobby skirmishLobby,
40-
LANLobby lanLobby, TopBar topBar, OptionsWindow optionsWindow,
40+
public MainMenu(
41+
WindowManager windowManager,
42+
SkirmishLobby skirmishLobby,
43+
QuickMatchWindow quickMatchWindow,
44+
LANLobby lanLobby,
45+
TopBar topBar,
46+
OptionsWindow optionsWindow,
4147
CnCNetLobby cncnetLobby,
42-
CnCNetManager connectionManager, DiscordHandler discordHandler) : base(windowManager)
48+
CnCNetManager connectionManager,
49+
DiscordHandler discordHandler
50+
) : base(windowManager)
4351
{
4452
this.skirmishLobby = skirmishLobby;
53+
this.quickMatchWindow = quickMatchWindow;
4554
this.lanLobby = lanLobby;
4655
this.topBar = topBar;
4756
this.connectionManager = connectionManager;
@@ -62,6 +71,8 @@ public MainMenu(WindowManager windowManager, SkirmishLobby skirmishLobby,
6271

6372
private SkirmishLobby skirmishLobby;
6473

74+
private QuickMatchWindow quickMatchWindow;
75+
6576
private LANLobby lanLobby;
6677

6778
private CnCNetManager connectionManager;
@@ -106,6 +117,7 @@ private bool UpdateInProgress
106117
private XNAClientButton btnLoadGame;
107118
private XNAClientButton btnSkirmish;
108119
private XNAClientButton btnCnCNet;
120+
private XNAClientButton btnQuickmatch;
109121
private XNAClientButton btnLan;
110122
private XNAClientButton btnOptions;
111123
private XNAClientButton btnMapEditor;
@@ -154,6 +166,11 @@ public override void Initialize()
154166
btnCnCNet.HoverSoundEffect = new EnhancedSoundEffect("MainMenu/button.wav");
155167
btnCnCNet.LeftClick += BtnCnCNet_LeftClick;
156168

169+
btnQuickmatch = new XNAClientButton(WindowManager);
170+
btnQuickmatch.Name = nameof(btnQuickmatch);
171+
btnQuickmatch.LeftClick += BtnQuickmatch_LeftClick;
172+
btnQuickmatch.Disable();
173+
157174
btnLan = new XNAClientButton(WindowManager);
158175
btnLan.Name = nameof(btnLan);
159176
btnLan.IdleTexture = AssetLoader.LoadTexture("MainMenu/lan.png");
@@ -225,6 +242,7 @@ public override void Initialize()
225242
AddChild(btnLoadGame);
226243
AddChild(btnSkirmish);
227244
AddChild(btnCnCNet);
245+
AddChild(btnQuickmatch);
228246
AddChild(btnLan);
229247
AddChild(btnOptions);
230248
AddChild(btnMapEditor);
@@ -799,6 +817,8 @@ private void BtnLan_LeftClick(object sender, EventArgs e)
799817

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

820+
private void BtnQuickmatch_LeftClick(object sender, EventArgs e) => quickMatchWindow.Enable();
821+
802822
private void BtnSkirmish_LeftClick(object sender, EventArgs e)
803823
{
804824
skirmishLobby.Open();

DXMainClient/DXGUI/Generic/TopBar.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using ClientCore;
1111
using System.Threading;
1212
using DTAClient.Domain.Multiplayer.CnCNet;
13+
using DTAClient.DXGUI.Multiplayer.QuickMatch;
1314
using DTAClient.Online.EventArguments;
1415
using DTAConfig;
1516
using Localization;
@@ -53,6 +54,7 @@ PrivateMessageHandler privateMessageHandler
5354
private ISwitchable privateMessageSwitch;
5455

5556
private OptionsWindow optionsWindow;
57+
private QuickMatchWindow quickMatchWindow;
5658

5759
private XNAClientButton btnMainButton;
5860
private XNAClientButton btnCnCNetLobby;
@@ -107,6 +109,8 @@ public void SetOptionsWindow(OptionsWindow optionsWindow)
107109
optionsWindow.EnabledChanged += OptionsWindow_EnabledChanged;
108110
}
109111

112+
public void SetQuickMatchWindow(QuickMatchWindow quickMatchWindow) => this.quickMatchWindow = quickMatchWindow;
113+
110114
private void OptionsWindow_EnabledChanged(object sender, EventArgs e)
111115
{
112116
if (!lanMode)
@@ -324,6 +328,7 @@ private void BtnMainButton_LeftClick(object sender, EventArgs e)
324328
LastSwitchType = SwitchType.PRIMARY;
325329
cncnetLobbySwitch.SwitchOff();
326330
privateMessageSwitch.SwitchOff();
331+
quickMatchWindow.Disable();
327332
primarySwitches[primarySwitches.Count - 1].SwitchOn();
328333

329334
// HACK warning
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using System;
2+
using ClientGUI;
3+
using Rampastring.XNAUI;
4+
5+
namespace DTAClient.DXGUI.Multiplayer.QuickMatch;
6+
7+
public class QuickMatchLobbyFooterPanel : INItializableWindow
8+
{
9+
private XNAClientButton btnQuickMatch;
10+
private XNAClientButton btnLogout;
11+
private XNAClientButton btnExit;
12+
13+
public EventHandler LogoutEvent;
14+
15+
public EventHandler ExitEvent;
16+
17+
public EventHandler QuickMatchEvent;
18+
19+
public QuickMatchLobbyFooterPanel(WindowManager windowManager) : base(windowManager)
20+
{
21+
}
22+
23+
public override void Initialize()
24+
{
25+
IniNameOverride = nameof(QuickMatchLobbyFooterPanel);
26+
base.Initialize();
27+
28+
btnLogout = FindChild<XNAClientButton>(nameof(btnLogout));
29+
btnLogout.LeftClick += (_, _) => LogoutEvent?.Invoke(this, null);
30+
31+
btnExit = FindChild<XNAClientButton>(nameof(btnExit));
32+
btnExit.LeftClick += (_, _) => ExitEvent?.Invoke(this, null);
33+
34+
btnQuickMatch = FindChild<XNAClientButton>(nameof(btnQuickMatch));
35+
btnQuickMatch.LeftClick += (_, _) => QuickMatchEvent?.Invoke(this, null);
36+
}
37+
}

0 commit comments

Comments
 (0)