Skip to content

Commit ee49fe4

Browse files
committed
Merge branch 'Escape-Menu-to-window' of https://github.com/DerekGooding/Intersect-Engine into Escape-Menu-to-window
2 parents bb3ac13 + a80bed9 commit ee49fe4

File tree

3 files changed

+262
-2
lines changed

3 files changed

+262
-2
lines changed

Intersect.Client.Core/Interface/Game/GameInterface.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using Intersect.Client.Interface.Game.Inventory;
1111
using Intersect.Client.Interface.Game.Shop;
1212
using Intersect.Client.Interface.Game.Trades;
13+
using Intersect.Client.Interface.Menu;
1314
using Intersect.Client.Interface.Shared;
1415
using Intersect.Client.Networking;
1516
using Intersect.Core;
@@ -105,7 +106,7 @@ private SettingsWindow GetOrCreateSettingsWindow()
105106
public GameInterface(Canvas canvas) : base(canvas)
106107
{
107108
GameCanvas = canvas;
108-
EscapeMenu = new EscapeMenu(GameCanvas, GetOrCreateSettingsWindow) {IsHidden = true};
109+
EscapeMenu = new EscapeMenuWindow(GameCanvas, GetOrCreateSettingsWindow) {IsHidden = true};
109110
SimplifiedEscapeMenu = new SimplifiedEscapeMenu(GameCanvas, GetOrCreateSettingsWindow) {IsHidden = true};
110111
TargetContextMenu = new TargetContextMenu(GameCanvas) {IsHidden = true};
111112
AnnouncementWindow = new AnnouncementWindow(GameCanvas) { IsHidden = true };
@@ -115,7 +116,7 @@ public GameInterface(Canvas canvas) : base(canvas)
115116

116117
public Canvas GameCanvas { get; }
117118

118-
public EscapeMenu EscapeMenu { get; }
119+
public EscapeMenuWindow EscapeMenu { get; }
119120

120121
public SimplifiedEscapeMenu SimplifiedEscapeMenu { get; }
121122

Intersect.Client.Core/Interface/Menu/EscapeMenuWindow.Designer.cs

Lines changed: 48 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
using Intersect.Client.Core;
2+
using Intersect.Client.Framework.Gwen;
3+
using Intersect.Client.Framework.Gwen.Control;
4+
using Intersect.Client.Framework.Gwen.Control.EventArguments;
5+
using Intersect.Client.General;
6+
using Intersect.Client.Interface.Shared;
7+
using Intersect.Client.Localization;
8+
using Intersect.Utilities;
9+
10+
namespace Intersect.Client.Interface.Menu;
11+
12+
public partial class EscapeMenuWindow : Window
13+
{
14+
private readonly Button _settings;
15+
private readonly Button _charselect;
16+
private readonly Button _logout;
17+
private readonly Button _exitdesktop;
18+
private readonly Button _closemenu;
19+
20+
private readonly Panel _versionPanel;
21+
22+
private readonly Func<SettingsWindow> _settingsWindowProvider;
23+
24+
public EscapeMenuWindow(Canvas canvas, Func<SettingsWindow> settingsWindowProvider)
25+
: base(canvas, Strings.EscapeMenu.Title, false,
26+
$"{nameof(EscapeMenuWindow)}_{(ClientContext.IsSinglePlayer ? "singleplayer" : "online")}")
27+
{
28+
_settingsWindowProvider = settingsWindowProvider;
29+
30+
Alignment = [Alignments.Center];
31+
32+
IsResizable = false;
33+
Padding = Padding.Zero;
34+
InnerPanelPadding = new Padding(8);
35+
Titlebar.MouseInputEnabled = false;
36+
37+
_settings = new Button(this, nameof(_settings))
38+
{
39+
IsTabable = true,
40+
Text = Strings.EscapeMenu.Settings,
41+
};
42+
_settings.Clicked += (s, e) => OpenSettingsWindow(true);
43+
44+
_charselect = new Button(this, nameof(_charselect))
45+
{
46+
IsTabable = true,
47+
Text = Strings.EscapeMenu.CharacterSelect,
48+
};
49+
_charselect.Clicked += _buttonCharacterSelect_Clicked;
50+
51+
_logout = new Button(this, nameof(_logout))
52+
{
53+
IsTabable = true,
54+
Text = Strings.EscapeMenu.Logout,
55+
};
56+
_logout.Clicked += buttonLogout_Clicked;
57+
58+
_exitdesktop = new Button(this, nameof(_exitdesktop))
59+
{
60+
IsTabable = true,
61+
Text = Strings.EscapeMenu.ExitToDesktop,
62+
};
63+
_exitdesktop.Clicked += buttonQuit_Clicked;
64+
65+
_closemenu = new Button(this, nameof(_closemenu))
66+
{
67+
IsTabable = true,
68+
Text = Strings.EscapeMenu.Close,
69+
};
70+
_closemenu.Clicked += (s, e) => Hide();
71+
72+
if (!string.IsNullOrEmpty(Strings.MainMenu.SettingsTooltip))
73+
{
74+
_settings.SetToolTipText(Strings.MainMenu.SettingsTooltip);
75+
}
76+
77+
if (Options.Instance.Player.MaxCharacters <= 1)
78+
{
79+
_charselect.IsDisabled = true;
80+
}
81+
82+
_versionPanel = new VersionPanel(canvas, name: nameof(_versionPanel));
83+
}
84+
85+
public override void Invalidate()
86+
{
87+
if (IsHidden)
88+
{
89+
RemoveModal();
90+
}
91+
else
92+
{
93+
MakeModal(true);
94+
}
95+
96+
base.Invalidate();
97+
if (Interface.GameUi?.GameCanvas != null)
98+
{
99+
Interface.GameUi.GameCanvas.MouseInputEnabled = IsVisible;
100+
}
101+
}
102+
103+
/// <inheritdoc />
104+
public override void ToggleHidden()
105+
{
106+
var settingsWindow = _settingsWindowProvider();
107+
if (settingsWindow.IsVisible)
108+
{
109+
return;
110+
}
111+
112+
base.ToggleHidden();
113+
}
114+
115+
public void Update()
116+
{
117+
if (!IsHidden)
118+
{
119+
BringToFront();
120+
}
121+
122+
_charselect.IsDisabled = Globals.Me?.CombatTimer > Timing.Global.Milliseconds;
123+
}
124+
125+
public void OpenSettingsWindow(bool returnToMenu = false)
126+
{
127+
var settingsWindow = _settingsWindowProvider();
128+
settingsWindow.Show(returnToMenu ? this : null);
129+
Hide();
130+
}
131+
132+
private void _buttonCharacterSelect_Clicked(Base sender, MouseButtonState arguments)
133+
{
134+
ToggleHidden();
135+
if (Globals.Me?.CombatTimer > Timing.Global.Milliseconds)
136+
{
137+
ShowCombatWarning();
138+
}
139+
else
140+
{
141+
LogoutToCharacterSelect(null, null);
142+
}
143+
}
144+
145+
private void LogoutToCharacterSelect(object? sender, EventArgs? e)
146+
{
147+
if (Globals.Me != null)
148+
{
149+
Globals.Me.CombatTimer = 0;
150+
}
151+
152+
Main.Logout(true);
153+
}
154+
155+
private void buttonLogout_Clicked(Base sender, MouseButtonState arguments)
156+
{
157+
ToggleHidden();
158+
if (Globals.Me?.CombatTimer > Timing.Global.Milliseconds)
159+
{
160+
ShowCombatWarning();
161+
}
162+
else
163+
{
164+
LogoutToMainMenu(null, null);
165+
}
166+
}
167+
168+
private void LogoutToMainMenu(object? sender, EventArgs? e)
169+
{
170+
if (Globals.Me != null)
171+
{
172+
Globals.Me.CombatTimer = 0;
173+
}
174+
175+
Main.Logout(false);
176+
}
177+
178+
private void buttonQuit_Clicked(Base sender, MouseButtonState arguments)
179+
{
180+
ToggleHidden();
181+
if (Globals.Me?.CombatTimer > Timing.Global.Milliseconds)
182+
{
183+
ShowCombatWarning();
184+
}
185+
else
186+
{
187+
ExitToDesktop(null, null);
188+
}
189+
}
190+
191+
private void ShowCombatWarning()
192+
{
193+
AlertWindow.Open(
194+
Strings.Combat.WarningCharacterSelect,
195+
Strings.Combat.WarningTitle,
196+
AlertType.Warning,
197+
handleSubmit: LogoutToCharacterSelect,
198+
inputType: InputType.YesNo
199+
);
200+
}
201+
202+
private void ExitToDesktop(object? sender, EventArgs? e)
203+
{
204+
if (Globals.Me != null)
205+
{
206+
Globals.Me.CombatTimer = 0;
207+
}
208+
209+
Globals.IsRunning = false;
210+
}
211+
}

0 commit comments

Comments
 (0)