1+ using Intersect . Client . Core ;
2+ using Intersect . Client . Framework . File_Management ;
3+ using Intersect . Client . Framework . Gwen ;
4+ using Intersect . Client . Framework . Gwen . Control ;
5+ using Intersect . Client . Framework . Gwen . Control . EventArguments ;
6+ using Intersect . Client . General ;
7+ using Intersect . Client . Interface . Shared ;
8+ using Intersect . Client . Localization ;
9+ using Intersect . Utilities ;
10+
11+ namespace Intersect . Client . Interface . Game ;
12+
13+ public sealed partial class SimplifiedEscapeMenu : Framework . Gwen . Control . Menu
14+ {
15+ private readonly SettingsWindow _settingsWindow ;
16+ private readonly MenuItem _settings ;
17+ private readonly MenuItem _character ;
18+ private readonly MenuItem _logout ;
19+ private readonly MenuItem _exit ;
20+
21+ public SimplifiedEscapeMenu ( Canvas gameCanvas ) : base ( gameCanvas , nameof ( SimplifiedEscapeMenu ) )
22+ {
23+ IsHidden = true ;
24+ IconMarginDisabled = true ;
25+ _settingsWindow = new SettingsWindow ( gameCanvas , null , null ) ;
26+
27+ Children . Clear ( ) ;
28+
29+ _settings = AddItem ( Strings . EscapeMenu . Settings ) ;
30+ _character = AddItem ( Strings . EscapeMenu . CharacterSelect ) ;
31+ _logout = AddItem ( Strings . EscapeMenu . Logout ) ;
32+ _exit = AddItem ( Strings . EscapeMenu . ExitToDesktop ) ;
33+
34+ _settings . Clicked += OpenSettingsWindow ;
35+ _character . Clicked += LogoutToCharacterSelectSelectClicked ;
36+ _logout . Clicked += LogoutToMainToMainMenuClicked ;
37+ _exit . Clicked += ExitToDesktopToDesktopClicked ;
38+
39+ LoadJsonUi ( GameContentManager . UI . InGame , Graphics . Renderer ? . GetResolutionString ( ) ) ;
40+ }
41+
42+ public void ToggleHidden ( Button ? target )
43+ {
44+ if ( ! _settingsWindow . IsHidden || target == null )
45+ {
46+ return ;
47+ }
48+
49+ if ( this . IsHidden )
50+ {
51+ // Position the context menu within the game canvas if near borders.
52+ var menuPosX = target . LocalPosToCanvas ( new Point ( 0 , 0 ) ) . X ;
53+ var menuPosY = target . LocalPosToCanvas ( new Point ( 0 , 0 ) ) . Y ;
54+ var newX = menuPosX ;
55+ var newY = menuPosY + target . Height + 6 ;
56+
57+ if ( newX + Width >= Canvas ? . Width )
58+ {
59+ newX = menuPosX - Width + target . Width ;
60+ }
61+
62+ if ( newY + Height >= Canvas ? . Height )
63+ {
64+ newY = menuPosY - Height - 6 ;
65+ }
66+
67+ SizeToChildren ( ) ;
68+ Open ( Pos . None ) ;
69+ SetPosition ( newX , newY ) ;
70+ }
71+ else
72+ {
73+ Close ( ) ;
74+ }
75+ }
76+
77+ private void LogoutToCharacterSelectSelectClicked ( Base sender , ClickedEventArgs arguments )
78+ {
79+ if ( Globals . Me ? . CombatTimer > Timing . Global . Milliseconds )
80+ {
81+ _ = new InputBox (
82+ title : Strings . Combat . WarningTitle ,
83+ prompt : Strings . Combat . WarningCharacterSelect ,
84+ inputType : InputBox . InputType . YesNo ,
85+ onSuccess : LogoutToCharacterSelect
86+ ) ;
87+ }
88+ else
89+ {
90+ LogoutToCharacterSelect ( null , null ) ;
91+ }
92+ }
93+
94+ private void LogoutToMainToMainMenuClicked ( Base sender , ClickedEventArgs arguments )
95+ {
96+ if ( Globals . Me ? . CombatTimer > Timing . Global . Milliseconds )
97+ {
98+ _ = new InputBox (
99+ title : Strings . Combat . WarningTitle ,
100+ prompt : Strings . Combat . WarningLogout ,
101+ inputType : InputBox . InputType . YesNo ,
102+ onSuccess : LogoutToMainMenu
103+ ) ;
104+ }
105+ else
106+ {
107+ LogoutToMainMenu ( null , null ) ;
108+ }
109+ }
110+
111+ private void ExitToDesktopToDesktopClicked ( Base sender , ClickedEventArgs arguments )
112+ {
113+ if ( Globals . Me ? . CombatTimer > Timing . Global . Milliseconds )
114+ {
115+ _ = new InputBox (
116+ title : Strings . Combat . WarningTitle ,
117+ prompt : Strings . Combat . WarningExitDesktop ,
118+ inputType : InputBox . InputType . YesNo ,
119+ onSuccess : ExitToDesktop
120+ ) ;
121+ }
122+ else
123+ {
124+ ExitToDesktop ( null , null ) ;
125+ }
126+ }
127+
128+ private void OpenSettingsWindow ( object ? sender , EventArgs ? e )
129+ {
130+ if ( ! _settingsWindow . IsHidden )
131+ {
132+ return ;
133+ }
134+
135+ _settingsWindow . Show ( ) ;
136+ }
137+
138+ private static void LogoutToCharacterSelect ( object ? sender , EventArgs ? e )
139+ {
140+ if ( Globals . Me != null )
141+ {
142+ Globals . Me . CombatTimer = 0 ;
143+ }
144+
145+ Main . Logout ( true ) ;
146+ }
147+
148+ private static void LogoutToMainMenu ( object ? sender , EventArgs ? e )
149+ {
150+ if ( Globals . Me != null )
151+ {
152+ Globals . Me . CombatTimer = 0 ;
153+ }
154+
155+ Main . Logout ( false ) ;
156+ }
157+
158+ private static void ExitToDesktop ( object ? sender , EventArgs ? e )
159+ {
160+ if ( Globals . Me != null )
161+ {
162+ Globals . Me . CombatTimer = 0 ;
163+ }
164+
165+ Globals . IsRunning = false ;
166+ }
167+ }
0 commit comments