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