Skip to content

Commit 145f9cf

Browse files
committed
Quick match
1 parent 602b83b commit 145f9cf

Some content is hidden

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

61 files changed

+2798
-141
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/XNAClientDropDown.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ public class XNAClientDropDown : XNADropDown
99
{
1010
public ToolTip ToolTip { get; set; }
1111

12+
public bool DisabledMouseScroll { get; set; }
13+
1214
public XNAClientDropDown(WindowManager windowManager) : base(windowManager)
1315
{
1416
}
@@ -46,6 +48,16 @@ public override void OnMouseLeftDown()
4648
UpdateToolTipBlock();
4749
}
4850

51+
public override void OnMouseScrolled()
52+
{
53+
if (DisabledMouseScroll)
54+
return;
55+
56+
base.OnMouseScrolled();
57+
}
58+
59+
public void Close() => CloseDropDown();
60+
4961
protected override void CloseDropDown()
5062
{
5163
base.CloseDropDown();
@@ -60,4 +72,4 @@ protected void UpdateToolTipBlock()
6072
ToolTip.Blocked = true;
6173
}
6274
}
63-
}
75+
}

ClientGUI/XNAClientProgressBar.cs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
using System;
2+
using Microsoft.Xna.Framework;
3+
using Rampastring.Tools;
4+
using Rampastring.XNAUI;
5+
using Rampastring.XNAUI.XNAControls;
6+
7+
namespace ClientGUI;
8+
9+
public class XNAClientProgressBar : XNAProgressBar
10+
{
11+
public int Speed { get; set; } = 4;
12+
13+
public double WidthRatio { get; set; } = 0.25;
14+
15+
public bool IndeterminateMode { get; set; }
16+
17+
private int _left { get; set; }
18+
19+
public XNAClientProgressBar(WindowManager windowManager) : base(windowManager)
20+
{
21+
}
22+
23+
public override void Update(GameTime gameTime)
24+
{
25+
_left = (_left + Speed) % Width;
26+
}
27+
28+
public override void Draw(GameTime gameTime)
29+
{
30+
if (!IndeterminateMode)
31+
{
32+
base.Draw(gameTime);
33+
return;
34+
}
35+
36+
Rectangle wrect = RenderRectangle();
37+
var filledWidth = (int)(wrect.Width * WidthRatio);
38+
39+
for (int i = 0; i < BorderWidth; i++)
40+
{
41+
var rect = new Rectangle(wrect.X + i, wrect.Y + i, wrect.Width - i, wrect.Height - i);
42+
43+
Renderer.DrawRectangle(rect, BorderColor);
44+
}
45+
46+
Renderer.FillRectangle(new Rectangle(wrect.X + BorderWidth, wrect.Y + BorderWidth, wrect.Width - BorderWidth * 2, wrect.Height - BorderWidth * 2), UnfilledColor);
47+
48+
if (_left + filledWidth > wrect.Width - BorderWidth * 2)
49+
{
50+
Renderer.FillRectangle(new Rectangle(wrect.X + BorderWidth, wrect.Y + BorderWidth, (_left + filledWidth) - (wrect.Width - (BorderWidth * 2)), wrect.Height - BorderWidth * 2), FilledColor);
51+
}
52+
53+
Renderer.FillRectangle(new Rectangle(wrect.X + BorderWidth + _left, wrect.Y + BorderWidth, Math.Min(filledWidth, wrect.Width - (BorderWidth * 2) - _left), wrect.Height - BorderWidth * 2), FilledColor);
54+
}
55+
56+
public override void ParseAttributeFromINI(IniFile iniFile, string key, string value)
57+
{
58+
switch (key)
59+
{
60+
case "WidthRatio":
61+
WidthRatio = double.Parse(value);
62+
return;
63+
case "IndeterminateMode":
64+
IndeterminateMode = bool.Parse(value);
65+
return;
66+
case "Speed":
67+
Speed = int.Parse(value);
68+
return;
69+
default:
70+
base.ParseAttributeFromINI(iniFile, key, value);
71+
return;
72+
}
73+
}
74+
}

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;

ClientGUI/XNAScrollablePanel.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Rampastring.XNAUI;
2+
using Rampastring.XNAUI.XNAControls;
3+
4+
namespace ClientGUI;
5+
6+
public class XNAScrollablePanel : XNAPanel
7+
{
8+
public XNAScrollablePanel(WindowManager windowManager) : base(windowManager)
9+
{
10+
DrawMode = ControlDrawMode.UNIQUE_RENDER_TARGET;
11+
}
12+
}

DXMainClient/DXGUI/Generic/LoadingScreen.cs

Lines changed: 35 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,27 @@ 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(QuickMatchStatusOverlay));
203+
ClientGUICreator.Instance.AddControl(typeof(XNAClientTabControl));
204+
ClientGUICreator.Instance.AddControl(typeof(XNAClientProgressBar));
205+
ClientGUICreator.Instance.AddControl(typeof(XNAScrollablePanel));
206+
}
207+
186208
public override void Update(GameTime gameTime)
187209
{
188210
base.Update(gameTime);

0 commit comments

Comments
 (0)