@@ -336,18 +336,16 @@ void CNeoRootInput::OnThink()
336336 }
337337}
338338
339- constexpr WidgetInfo BTNS_INFO[BTNS_TOTAL] = {
340- { " #GameUI_GameMenu_ResumeGame" , false , " ResumeGame" , true , STATE__TOTAL, FLAG_SHOWINGAME },
341- { " #GameUI_GameMenu_FindServers" , false , nullptr , true , STATE_SERVERBROWSER, FLAG_SHOWINGAME | FLAG_SHOWINMAIN },
342- { " #GameUI_GameMenu_CreateServer" , false , nullptr , true , STATE_NEWGAME, FLAG_SHOWINGAME | FLAG_SHOWINMAIN },
343- { " #GameUI_GameMenu_Disconnect" , false , " Disconnect" , true , STATE__TOTAL, FLAG_SHOWINGAME },
344- { " #GameUI_GameMenu_PlayerList" , false , nullptr , true , STATE_PLAYERLIST, FLAG_SHOWINGAME },
345- { " " , true , nullptr , true , STATE__TOTAL, FLAG_SHOWINMAIN },
346- { " #GameUI_GameMenu_Tutorial" , false , " sv_use_steam_networking 0; map " TUTORIAL_MAP_CLASSES, false , STATE__TOTAL, FLAG_SHOWINMAIN},
347- { " #GameUI_GameMenu_FiringRange" , false , " sv_use_steam_networking 0; map " TUTORIAL_MAP_SHOOTING, false , STATE__TOTAL, FLAG_SHOWINMAIN},
348- { " " , true , nullptr , true , STATE__TOTAL, FLAG_SHOWINGAME | FLAG_SHOWINMAIN },
349- { " #GameUI_GameMenu_Options" , false , nullptr , true , STATE_SETTINGS, FLAG_SHOWINGAME | FLAG_SHOWINMAIN },
350- { " #GameUI_GameMenu_Quit" , false , nullptr , true , STATE_QUIT, FLAG_SHOWINGAME | FLAG_SHOWINMAIN },
339+ constexpr const char *BTNS_LOCALIZE[MMBTN__TOTAL] = {
340+ " #GameUI_GameMenu_ResumeGame" ,
341+ " #GameUI_GameMenu_FindServers" ,
342+ " #GameUI_GameMenu_CreateServer" ,
343+ " #GameUI_GameMenu_Disconnect" ,
344+ " #GameUI_GameMenu_PlayerList" ,
345+ " #GameUI_GameMenu_Tutorial" ,
346+ " #GameUI_GameMenu_FiringRange" ,
347+ " #GameUI_GameMenu_Options" ,
348+ " #GameUI_GameMenu_Quit" ,
351349};
352350
353351CNeoRoot::CNeoRoot (VPANEL parent)
@@ -364,18 +362,19 @@ CNeoRoot::CNeoRoot(VPANEL parent)
364362 enginevgui->GetPanel (PANEL_CLIENTDLL), " resource/ClientScheme.res" , " ClientScheme" );
365363 SetScheme (neoscheme);
366364
367- for (int i = 0 ; i < BTNS_TOTAL ; ++i)
365+ for (int i = 0 ; i < MMBTN__TOTAL ; ++i)
368366 {
369- const char *label = BTNS_INFO[i].label ;
370- if (wchar_t *localizedWszStr = g_pVGuiLocalize->Find (label))
367+ const char *label = BTNS_LOCALIZE[i];
368+ wchar_t *localizedWszStr = g_pVGuiLocalize->Find (label);
369+ Assert (localizedWszStr);
370+ if (localizedWszStr)
371371 {
372- V_wcsncpy (m_wszDispBtnTexts [i], localizedWszStr, sizeof (m_wszDispBtnTexts [i]));
372+ V_wcsncpy (m_wszCachedTexts [i], localizedWszStr, sizeof (m_wszCachedTexts [i]));
373373 }
374374 else
375375 {
376- g_pVGuiLocalize->ConvertANSIToUnicode (label, m_wszDispBtnTexts [i], sizeof (m_wszDispBtnTexts [i]));
376+ g_pVGuiLocalize->ConvertANSIToUnicode (label, m_wszCachedTexts [i], sizeof (m_wszCachedTexts [i]));
377377 }
378- m_iWszDispBtnTextsSizes[i] = V_wcslen (m_wszDispBtnTexts[i]);
379378 }
380379
381380 NeoSettingsInit (&m_ns);
@@ -746,7 +745,7 @@ void CNeoRoot::MainLoopRoot(const MainLoopParam param)
746745 const int iMarginHalf = iMargin * 0.5 ;
747746 const int iTitleMarginTop = (param.tall * 0.2 );
748747 surface ()->GetTextSize (g_uiCtx.fonts [NeoUI::FONT_LOGO].hdl , L" n" , iTitleNWidth, iTitleNHeight);
749- g_uiCtx.dPanel .wide = (m_iTitleWidth) +iMargin;
748+ g_uiCtx.dPanel .wide = (m_iTitleWidth) + iMargin;
750749 g_uiCtx.dPanel .tall = param.tall ;
751750 g_uiCtx.dPanel .x = iBtnPlaceXMid - (m_iTitleWidth * 0.5 ) + (iTitleNWidth * 1.16 ) - iMarginHalf;
752751 g_uiCtx.dPanel .y = iTitleMarginTop + (2 * iTitleNHeight);
@@ -757,60 +756,60 @@ void CNeoRoot::MainLoopRoot(const MainLoopParam param)
757756 g_uiCtx.dPanel .x + g_uiCtx.dPanel .wide , param.tall );
758757
759758 NeoUI::BeginContext (&g_uiCtx, param.eMode , nullptr , " CtxRoot" );
760- NeoUI::BeginSection (NeoUI::SECTIONFLAG_DEFAULTFOCUS);
759+ NeoUI::BeginSection (NeoUI::SECTIONFLAG_DEFAULTFOCUS | NeoUI::SECTIONFLAG_PLAYBUTTONSOUNDS );
761760 {
762761 g_uiCtx.eButtonTextStyle = NeoUI::TEXTSTYLE_CENTER;
763762 const int iFlagToMatch = IsInGame () ? FLAG_SHOWINGAME : FLAG_SHOWINMAIN;
764763 bool mouseOverButton = false ;
765- for (int i = 0 ; i < BTNS_TOTAL; ++i)
764+ const bool bIsInGame = IsInGame ();
765+ if (bIsInGame && NeoUI::Button (m_wszCachedTexts[MMBTN_RESUME]).bPressed )
766766 {
767- const auto btnInfo = BTNS_INFO[i];
768- if (btnInfo.flags & iFlagToMatch)
767+ m_state = STATE_ROOT;
768+ GetGameUI ()->SendMainMenuCommand (" ResumeGame" );
769+ }
770+ if (NeoUI::Button (m_wszCachedTexts[MMBTN_FINDSERVER]).bPressed )
771+ {
772+ m_state = STATE_SERVERBROWSER;
773+ }
774+ if (NeoUI::Button (m_wszCachedTexts[MMBTN_CREATESERVER]).bPressed )
775+ {
776+ m_state = STATE_NEWGAME;
777+ }
778+ if (bIsInGame)
779+ {
780+ if (NeoUI::Button (m_wszCachedTexts[MMBTN_DISCONNECT]).bPressed )
769781 {
770- if (btnInfo.isFake )
771- {
772- NeoUI::Pad ();
773- continue ;
774- }
775- const auto retBtn = NeoUI::Button (m_wszDispBtnTexts[i]);
776- if (retBtn.bPressed || (i == MMBTN_QUIT && !IsInGame () && NeoUI::BindKeyBack ()))
777- {
778- surface ()->PlaySound (" ui/buttonclickrelease.wav" );
779- if (btnInfo.command )
780- {
781- m_state = STATE_ROOT;
782- if (btnInfo.isMainMenuCommand )
783- {
784- GetGameUI ()->SendMainMenuCommand (btnInfo.command );
785- }
786- else
787- {
788- engine->ClientCmd (btnInfo.command );
789- }
790- }
791- else if (btnInfo.nextState < STATE__TOTAL)
792- {
793- m_state = btnInfo.nextState ;
794- if (m_state == STATE_SETTINGS)
795- {
796- NeoSettingsRestore (&m_ns);
797- }
798- }
799- }
800- if (retBtn.bMouseHover )
801- {
802- mouseOverButton = true ;
803- if (i != m_iHoverBtn && param.eMode == NeoUI::MODE_MOUSEMOVED)
804- { // Sound rollover feedback
805- surface ()->PlaySound (" ui/buttonrollover.wav" );
806- m_iHoverBtn = i;
807- }
808- }
782+ m_state = STATE_ROOT;
783+ GetGameUI ()->SendMainMenuCommand (" Disconnect" );
784+ }
785+ if (NeoUI::Button (m_wszCachedTexts[MMBTN_PLAYERLIST]).bPressed )
786+ {
787+ m_state = STATE_PLAYERLIST;
809788 }
810789 }
811- if (!mouseOverButton && m_iHoverBtn < BTNS_TOTAL && param. eMode == NeoUI::MODE_MOUSEMOVED)
790+ else
812791 {
813- m_iHoverBtn = -1 ;
792+ NeoUI::Pad ();
793+ if (NeoUI::Button (m_wszCachedTexts[MMBTN_TUTORIAL]).bPressed )
794+ {
795+ m_state = STATE_ROOT;
796+ engine->ClientCmd (" sv_use_steam_networking 0; map " TUTORIAL_MAP_CLASSES);
797+ }
798+ if (NeoUI::Button (m_wszCachedTexts[MMBTN_FIRINGRANGE]).bPressed )
799+ {
800+ m_state = STATE_ROOT;
801+ engine->ClientCmd (" sv_use_steam_networking 0; map " TUTORIAL_MAP_SHOOTING);
802+ }
803+ }
804+ NeoUI::Pad ();
805+ if (NeoUI::Button (m_wszCachedTexts[MMBTN_OPTIONS]).bPressed )
806+ {
807+ m_state = STATE_SETTINGS;
808+ NeoSettingsRestore (&m_ns);
809+ }
810+ if (NeoUI::Button (m_wszCachedTexts[MMBTN_QUIT]).bPressed )
811+ {
812+ m_state = STATE_QUIT;
814813 }
815814 }
816815 NeoUI::EndSection ();
@@ -994,47 +993,23 @@ void CNeoRoot::MainLoopRoot(const MainLoopParam param)
994993 NeoUI::EndSection();
995994#endif
996995 g_uiCtx.dPanel .x = param.wide - 128 ;
997- g_uiCtx.dPanel .y = param.tall - 96 ;
996+ g_uiCtx.dPanel .y = param.tall - 96 - 48 ;
998997 g_uiCtx.dPanel .wide = 128 ;
999- g_uiCtx.dPanel .tall = 1 ;
1000- NeoUI::BeginSection ();
1001- g_uiCtx.eButtonTextStyle = NeoUI::TEXTSTYLE_CENTER;
1002- const auto musicPlayerBtn = NeoUI::Button (L" Music" );
1003- if (musicPlayerBtn.bPressed )
1004- {
1005- surface ()->PlaySound (" ui/buttonclickrelease.wav" );
1006- engine->ClientCmd (" neo_mp3" );
1007-
1008- }
1009- NeoUI::EndSection ();
1010-
1011- NeoUI::BeginSection ();
1012- g_uiCtx.dPanel .y = param.tall - 48 ;
1013- const auto creditsBtn = NeoUI::Button (L" Credits" );
1014- if (creditsBtn.bPressed )
1015- {
1016- surface ()->PlaySound (" ui/buttonclickrelease.wav" );
1017- m_state = STATE_CREDITS;
1018- }
1019- NeoUI::EndSection ();
998+ g_uiCtx.dPanel .tall = param.tall ;
1020999
1021- if (param. eMode == NeoUI::MODE_MOUSEMOVED)
1000+ NeoUI::BeginSection ( NeoUI::SECTIONFLAG_PLAYBUTTONSOUNDS);
10221001 {
1023- if (musicPlayerBtn.bMouseHover && SMBTN_MP3 != m_iHoverBtn)
1024- { // Sound rollover feedback
1025- surface ()->PlaySound (" ui/buttonrollover.wav" );
1026- m_iHoverBtn = SMBTN_MP3;
1027- }
1028- else if (creditsBtn.bMouseHover && SMBTN_CREDITS != m_iHoverBtn)
1002+ g_uiCtx.eButtonTextStyle = NeoUI::TEXTSTYLE_CENTER;
1003+ if (NeoUI::Button (L" Music" ).bPressed )
10291004 {
1030- surface ()->PlaySound (" ui/buttonrollover.wav" );
1031- m_iHoverBtn = SMBTN_CREDITS;
1005+ engine->ClientCmd (" neo_mp3" );
10321006 }
1033- else if ((!musicPlayerBtn. bMouseHover && SMBTN_MP3 == m_iHoverBtn) || (!creditsBtn. bMouseHover && SMBTN_CREDITS == m_iHoverBtn) )
1007+ if (NeoUI::Button ( L" Credits " ). bPressed )
10341008 {
1035- m_iHoverBtn = - 1 ;
1009+ m_state = STATE_CREDITS ;
10361010 }
10371011 }
1012+ NeoUI::EndSection ();
10381013
10391014 NeoUI::EndContext ();
10401015}
@@ -1067,7 +1042,7 @@ void CNeoRoot::MainLoopSettings(const MainLoopParam param)
10671042 g_uiCtx.dPanel .y = (param.tall / 2 ) - (iTallTotal / 2 );
10681043 g_uiCtx.dPanel .tall = g_uiCtx.layout .iRowTall ;
10691044 g_uiCtx.bgColor = COLOR_NEOPANELFRAMEBG;
1070- NeoUI::BeginContext (&g_uiCtx, param.eMode , g_pNeoRoot->m_wszDispBtnTexts [MMBTN_OPTIONS], " CtxOptions" );
1045+ NeoUI::BeginContext (&g_uiCtx, param.eMode , g_pNeoRoot->m_wszCachedTexts [MMBTN_OPTIONS], " CtxOptions" );
10711046 {
10721047 NeoUI::BeginSection (NeoUI::SECTIONFLAG_ROWWIDGETS | NeoUI::SECTIONFLAG_EXCLUDECONTROLLER);
10731048 {
@@ -1164,7 +1139,7 @@ void CNeoRoot::MainLoopNewGame(const MainLoopParam param)
11641139 g_uiCtx.dPanel .y = (param.tall / 2 ) - (iTallTotal / 2 );
11651140 g_uiCtx.dPanel .tall = g_uiCtx.layout .iRowTall * (g_iRowsInScreen + 1 );
11661141 g_uiCtx.bgColor = COLOR_NEOPANELFRAMEBG;
1167- NeoUI::BeginContext (&g_uiCtx, param.eMode , m_wszDispBtnTexts [MMBTN_CREATESERVER], " CtxNewGame" );
1142+ NeoUI::BeginContext (&g_uiCtx, param.eMode , m_wszCachedTexts [MMBTN_CREATESERVER], " CtxNewGame" );
11681143 {
11691144 NeoUI::BeginSection (NeoUI::SECTIONFLAG_DEFAULTFOCUS);
11701145 {
@@ -1382,7 +1357,7 @@ void CNeoRoot::MainLoopServerBrowser(const MainLoopParam param)
13821357 g_uiCtx.dPanel .y = (param.tall / 2 ) - (iTallTotal / 2 );
13831358 g_uiCtx.dPanel .tall = g_uiCtx.layout .iRowTall * 2 ;
13841359 g_uiCtx.bgColor = COLOR_NEOPANELFRAMEBG;
1385- NeoUI::BeginContext (&g_uiCtx, param.eMode , m_wszDispBtnTexts [MMBTN_FINDSERVER], " CtxServerBrowser" );
1360+ NeoUI::BeginContext (&g_uiCtx, param.eMode , m_wszCachedTexts [MMBTN_FINDSERVER], " CtxServerBrowser" );
13861361 {
13871362 bool bForceRefresh = false ;
13881363 NeoUI::BeginSection (NeoUI::SECTIONFLAG_ROWWIDGETS);
0 commit comments