@@ -25,77 +25,79 @@ CMenuBaseWindow::CMenuBaseWindow(const char *name) : BaseClass()
2525 m_bHolding = false ;
2626 bInTransition = false ;
2727 szName = name;
28+ m_pStack = &uiStatic.menu ;
2829}
2930
3031void CMenuBaseWindow::Show ()
3132{
3233 Init ();
3334 VidInit ();
3435 Reload (); // take a chance to reload info for items
35- PushMenu ();
36+ PushMenu ( *m_pStack );
3637 EnableTransition ();
3738}
3839
3940void CMenuBaseWindow::Hide ()
4041{
41- PopMenu ();
42+ PopMenu ( *m_pStack );
4243 EnableTransition ();
4344}
4445
4546bool CMenuBaseWindow::IsVisible () const
4647{
4748 // slow!
48- for ( int i = uiStatic. rootPosition ; i < uiStatic. menuDepth ; i++ )
49+ for ( int i = m_pStack-> rootPosition ; i < m_pStack-> menuDepth ; i++ )
4950 {
50- if ( uiStatic. menuStack [i] == this )
51+ if ( m_pStack-> menuStack [i] == this )
5152 return true ;
5253 }
5354 return false ;
5455}
5556
56- void CMenuBaseWindow::PushMenu ()
57+ void CMenuBaseWindow::PushMenu ( windowStack_t &stack )
5758{
5859 int i;
5960 CMenuBaseItem *item;
6061
6162 // if this menu is already present, drop back to that level to avoid stacking menus by hotkeys
62- for ( i = 0 ; i < uiStatic .menuDepth ; i++ )
63+ for ( i = 0 ; i < stack .menuDepth ; i++ )
6364 {
64- if ( uiStatic .menuStack [i] == this )
65+ if ( stack .menuStack [i] == this )
6566 {
6667 if ( IsRoot () )
67- uiStatic .menuDepth = i;
68+ stack .menuDepth = i;
6869 else
6970 {
70- if ( i != uiStatic .menuDepth - 1 )
71+ if ( i != stack .menuDepth - 1 )
7172 {
7273 // swap windows
73- uiStatic .menuStack [i] = uiStatic .menuActive ;
74- uiStatic .menuStack [uiStatic .menuDepth ] = this ;
74+ stack .menuStack [i] = stack .menuActive ;
75+ stack .menuStack [stack .menuDepth ] = this ;
7576 }
7677 }
7778 break ;
7879 }
7980 }
8081
81- if ( i == uiStatic .menuDepth )
82+ if ( i == stack .menuDepth )
8283 {
83- if ( uiStatic .menuDepth >= UI_MAX_MENUDEPTH )
84+ if ( stack .menuDepth >= UI_MAX_MENUDEPTH )
8485 Host_Error ( " UI_PushMenu: menu stack overflow\n " );
85- uiStatic .menuStack [uiStatic .menuDepth ++] = this ;
86+ stack .menuStack [stack .menuDepth ++] = this ;
8687 }
8788
88- uiStatic .prevMenu = uiStatic .menuActive ;
89- if ( this ->IsRoot () && uiStatic .prevMenu && uiStatic .prevMenu ->IsRoot () )
90- uiStatic .prevMenu ->EnableTransition ();
91- uiStatic .menuActive = this ;
89+ stack .prevMenu = stack .menuActive ;
90+ if ( this ->IsRoot () && stack .prevMenu && stack .prevMenu ->IsRoot () )
91+ stack .prevMenu ->EnableTransition ();
92+ stack .menuActive = this ;
9293
93- uiStatic.firstDraw = true ;
94- uiStatic.enterSound = gpGlobals->time + 0 .15f ; // make some delay
95- uiStatic.visible = true ;
96-
97- EngFuncs::KEY_SetDest ( KEY_MENU );
94+ if ( &stack == &uiStatic.menu ) // hack!
95+ {
96+ uiStatic.firstDraw = true ;
97+ uiStatic.enterSound = gpGlobals->time + 0 .15f ; // make some delay
9898
99+ EngFuncs::KEY_SetDest ( KEY_MENU );
100+ }
99101
100102 m_iCursor = 0 ;
101103
@@ -123,38 +125,44 @@ void CMenuBaseWindow::PushMenu()
123125 #endif
124126}
125127
126- void CMenuBaseWindow::PopMenu ()
128+ void CMenuBaseWindow::PopMenu ( windowStack_t &stack )
127129{
128- EngFuncs::PlayLocalSound ( uiSoundOut );
130+ if ( &stack == &uiStatic.menu ) // hack!
131+ {
132+ EngFuncs::PlayLocalSound ( uiSoundOut );
133+ }
129134
130- uiStatic .menuDepth --;
135+ stack .menuDepth --;
131136
132- if ( uiStatic .menuDepth < 0 )
137+ if ( stack .menuDepth < 0 )
133138 Host_Error ( " UI_PopMenu: menu stack underflow\n " );
134139
135- if ( uiStatic .menuDepth )
140+ if ( stack .menuDepth )
136141 {
137- uiStatic .prevMenu = this ;
138- uiStatic .menuActive = uiStatic .menuStack [uiStatic .menuDepth -1 ];
139- if ( this ->IsRoot () && uiStatic .menuActive ->IsRoot () )
140- uiStatic .menuActive ->EnableTransition ();
142+ stack .prevMenu = this ;
143+ stack .menuActive = stack .menuStack [stack .menuDepth -1 ];
144+ if ( this ->IsRoot () && stack .menuActive ->IsRoot () )
145+ stack .menuActive ->EnableTransition ();
141146
142147 uiStatic.firstDraw = true ;
143148 }
144- else if ( CL_IsActive ( ))
149+ else if ( &stack == &uiStatic. menu ) // hack!
145150 {
146- UI_CloseMenu ();
147- }
148- else
149- {
150- // a1ba: not needed anymore?
151+ if ( CL_IsActive ( ))
152+ {
153+ UI_CloseMenu ();
154+ }
155+ else
156+ {
157+ // a1ba: not needed anymore?
151158
152- // never trying the close menu when client isn't connected
153- EngFuncs::KEY_SetDest ( KEY_MENU );
154- UI_Main_Menu ();
159+ // never trying the close menu when client isn't connected
160+ EngFuncs::KEY_SetDest ( KEY_MENU );
161+ UI_Main_Menu ();
162+ }
155163 }
156164
157- if ( uiStatic.m_fDemosPlayed && uiStatic.m_iOldMenuDepth == uiStatic .menuDepth )
165+ if ( &stack == & uiStatic.menu && uiStatic. m_fDemosPlayed && uiStatic.m_iOldMenuDepth == stack .menuDepth )
158166 {
159167 EngFuncs::ClientCmd ( FALSE , " demos\n " );
160168 uiStatic.m_fDemosPlayed = false ;
@@ -224,8 +232,6 @@ bool CMenuBaseWindow::DrawAnimation(EAnimation anim)
224232
225233 UI_DisableAlphaFactor ();
226234
227- if ( IsRoot () )
228- CMenuPicButton::DrawTitleAnim ( anim );
229235 return false ;
230236 }
231237
@@ -256,7 +262,7 @@ bool CMenuBaseWindow::KeyValueData(const char *key, const char *data)
256262
257263void CMenuBaseWindow::EnableTransition ()
258264{
259- if ( uiStatic. prevMenu )
265+ if ( m_pStack-> prevMenu )
260266 {
261267 bInTransition = true ;
262268 m_iTransitionStartTime = uiStatic.realTime ;
0 commit comments