From 8dbab45f134f988282b19c635895302d3de30fcf Mon Sep 17 00:00:00 2001 From: celisej567 Date: Sat, 19 Oct 2024 21:07:01 +0300 Subject: [PATCH] Revert "Some GamepadUI fixes" This reverts commit 091308106bbcfa8109fc7aa2e8a5983853cff34c. --- game/client/cdll_client_int.cpp | 17 +- game/gamepadui/gamepadui_base.vpc | 2 - game/gamepadui/gamepadui_basepanel.cpp | 16 +- game/gamepadui/gamepadui_button.cpp | 2 - game/gamepadui/gamepadui_button.h | 2 - game/gamepadui/gamepadui_frame.cpp | 4 +- .../gamepadui_genericconfirmation.cpp | 43 +++- game/gamepadui/gamepadui_image.h | 8 - game/gamepadui/gamepadui_interface.cpp | 20 +- game/gamepadui/gamepadui_interface.h | 11 +- game/gamepadui/gamepadui_loadingscreen.cpp | 0 game/gamepadui/gamepadui_loadingscreen.h | 0 game/gamepadui/gamepadui_mainmenu.cpp | 230 ++---------------- game/gamepadui/gamepadui_mainmenu.h | 23 +- game/gamepadui/gamepadui_options.cpp | 69 +++++- game/gamepadui/gamepadui_panel.h | 2 +- game/gamepadui/gamepadui_string.h | 9 +- game/gamepadui/igamepadui.h | 3 +- 18 files changed, 149 insertions(+), 312 deletions(-) delete mode 100644 game/gamepadui/gamepadui_loadingscreen.cpp delete mode 100644 game/gamepadui/gamepadui_loadingscreen.h diff --git a/game/client/cdll_client_int.cpp b/game/client/cdll_client_int.cpp index 9e6af354..b691ecaf 100644 --- a/game/client/cdll_client_int.cpp +++ b/game/client/cdll_client_int.cpp @@ -1334,16 +1334,6 @@ void CHLClient::HudUpdate( bool bActive ) CRTime::UpdateRealTime(); #endif -#ifdef GAMEPADUI - if (IsGamepadUI()) - { - if (!enginevgui->IsGameUIVisible()) - { - engine->ExecuteClientCmd("gamepadui_resetfade"); - } - } -#endif // GAMEPADUI - GetClientVoiceMgr()->Frame( frametime ); gHUD.UpdateHud( bActive ); @@ -1383,12 +1373,7 @@ void CHLClient::HudUpdate( bool bActive ) void CHLClient::HudReset( void ) { gHUD.VidInit(); -#ifdef GAMEPADUI - if (IsGamepadUI()) - { - engine->ExecuteClientCmd("gamepadui_resetfade"); - } -#endif // GAMEPADUI + PhysicsReset(); } diff --git a/game/gamepadui/gamepadui_base.vpc b/game/gamepadui/gamepadui_base.vpc index 3d179d9e..efbecd48 100644 --- a/game/gamepadui/gamepadui_base.vpc +++ b/game/gamepadui/gamepadui_base.vpc @@ -96,8 +96,6 @@ $Project $File "gamepadui_options.cpp" $File "gamepadui_scrollbar.cpp" $File "gamepadui_util.cpp" - $File "gamepadui_loadingscreen.cpp" - $File "gamepadui_loadingscreen.h" } $Folder "Link Libraries" diff --git a/game/gamepadui/gamepadui_basepanel.cpp b/game/gamepadui/gamepadui_basepanel.cpp index 1d270a50..3f0fb8d9 100644 --- a/game/gamepadui/gamepadui_basepanel.cpp +++ b/game/gamepadui/gamepadui_basepanel.cpp @@ -31,7 +31,7 @@ GamepadUIBasePanel::GamepadUIBasePanel( vgui::VPANEL parent ) : BaseClass( NULL, m_pSizingPanel = new GamepadUISizingPanel( this ); - m_pMainMenu = new GamepadUIMainMenu( this ); + m_pMainMenu = new GamepadUIMainMenu( this ); OnMenuStateChanged(); } @@ -82,19 +82,19 @@ void GamepadUIBasePanel::SetCurrentFrame( GamepadUIFrame *pFrame ) void GamepadUIBasePanel::OnMenuStateChanged() { - if (m_bBackgroundMusicEnabled && GamepadUI::GetInstance().IsGamepadUIVisible()) + if ( m_bBackgroundMusicEnabled && GamepadUI::GetInstance().IsGamepadUIVisible() ) { - if (!IsBackgroundMusicPlaying()) + if ( !IsBackgroundMusicPlaying() ) ActivateBackgroundEffects(); } else ReleaseBackgroundMusic(); - if (m_pCurrentFrame && m_pCurrentFrame != m_pMainMenu) - { - m_pCurrentFrame->Close(); - m_pCurrentFrame = NULL; - } + if (m_pCurrentFrame && m_pCurrentFrame != m_pMainMenu) + { + m_pCurrentFrame->Close(); + m_pCurrentFrame = NULL; + } } void GamepadUIBasePanel::ActivateBackgroundEffects() diff --git a/game/gamepadui/gamepadui_button.cpp b/game/gamepadui/gamepadui_button.cpp index a575fe29..84e88da7 100644 --- a/game/gamepadui/gamepadui_button.cpp +++ b/game/gamepadui/gamepadui_button.cpp @@ -5,8 +5,6 @@ #include "vgui/IVGui.h" #include "vgui/ISurface.h" -#include "../../public/vgui_controls/Panel.h" - // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" diff --git a/game/gamepadui/gamepadui_button.h b/game/gamepadui/gamepadui_button.h index 12dfea4c..dceb8cca 100644 --- a/game/gamepadui/gamepadui_button.h +++ b/game/gamepadui/gamepadui_button.h @@ -8,8 +8,6 @@ #include "gamepadui_string.h" #include "gamepadui_glyph.h" #include "vgui_controls/Button.h" -//#include "../../public/vgui_controls/Button.h" -//#include "../../public/vgui_controls/Button.h" namespace ButtonStates { diff --git a/game/gamepadui/gamepadui_frame.cpp b/game/gamepadui/gamepadui_frame.cpp index ac26c4bf..dc49942c 100644 --- a/game/gamepadui/gamepadui_frame.cpp +++ b/game/gamepadui/gamepadui_frame.cpp @@ -1,10 +1,8 @@ -// 🐸 -//shut up +// 🐸 #include "gamepadui_frame.h" #include "gamepadui_button.h" #include "gamepadui_interface.h" #include "gamepadui_basepanel.h" -#include "gamepadui_mainmenu.h" #include "inputsystem/iinputsystem.h" #include "vgui/ISurface.h" diff --git a/game/gamepadui/gamepadui_genericconfirmation.cpp b/game/gamepadui/gamepadui_genericconfirmation.cpp index 44d0245d..4f28c7bf 100644 --- a/game/gamepadui/gamepadui_genericconfirmation.cpp +++ b/game/gamepadui/gamepadui_genericconfirmation.cpp @@ -134,8 +134,11 @@ CON_COMMAND( gamepadui_opengenerictextdialog, "Opens a generic text dialog.\nFor return; } - // TODO: Parent to current frame - new GamepadUIGenericConfirmationPanel( GamepadUI::GetInstance().GetBasePanel(), "GenericConfirmationPanel", args.Arg(1), args.Arg(2), + vgui::Panel *pParent = GamepadUI::GetInstance().GetCurrentFrame(); + if (!pParent) + pParent = GamepadUI::GetInstance().GetBasePanel(); + + new GamepadUIGenericConfirmationPanel( pParent, "GenericConfirmationPanel", args.Arg(1), args.Arg(2), [](){}, args.Arg(3)[0] != '0', false ); } @@ -147,15 +150,35 @@ CON_COMMAND( gamepadui_opengenericconfirmdialog, "Opens a generic confirmation d return; } - // TODO: Parent to current frame - const char *pCmd = args.Arg( 4 ); - new GamepadUIGenericConfirmationPanel( GamepadUI::GetInstance().GetBasePanel(), "GenericConfirmationPanel", args.Arg(1), args.Arg(2), + vgui::Panel *pParent = GamepadUI::GetInstance().GetCurrentFrame(); + if (!pParent) + pParent = GamepadUI::GetInstance().GetBasePanel(); + + // To get the command, we just use the remaining string after the small font parameter + // This method is fairly dirty and relies a bit on guesswork, but it allows spaces and quotes to be used + // without having to worry about how the initial dialog command handles it + const char *pCmd = args.GetCommandString(); + char *pSmallFont = V_strstr( pCmd, args.Arg( 3 )[0] != '0' ? " 1 " : " 0 " ); + if (!pSmallFont) + { + // Look for quotes instead + pSmallFont = V_strstr( pCmd, args.Arg( 3 )[0] != '0' ? " \"1\" " : " \"0\" " ); + if (pSmallFont) + pCmd += (pSmallFont - pCmd) + 5; + else + { + // Give up and use the 4th argument + pCmd = args.Arg( 4 ); + } + } + else + { + pCmd += (pSmallFont - pCmd) + 3; + } + + new GamepadUIGenericConfirmationPanel( pParent, "GenericConfirmationPanel", args.Arg(1), args.Arg(2), [pCmd]() { - // Replace '' with quotes - char szCmd[512]; - V_StrSubst( pCmd, "''", "\"", szCmd, sizeof(szCmd) ); - - GamepadUI::GetInstance().GetEngineClient()->ClientCmd_Unrestricted( szCmd ); + GamepadUI::GetInstance().GetEngineClient()->ClientCmd_Unrestricted( pCmd ); }, args.Arg(3)[0] != '0', true ); } diff --git a/game/gamepadui/gamepadui_image.h b/game/gamepadui/gamepadui_image.h index ac07b4ad..eb527f51 100644 --- a/game/gamepadui/gamepadui_image.h +++ b/game/gamepadui/gamepadui_image.h @@ -35,13 +35,6 @@ public: m_nId = vgui::surface()->CreateNewTextureID(); vgui::surface()->DrawSetTextureFile( m_nId, pName, true, false ); } - - void GetImageSize(int& width, int& heigth) - { - vgui::surface()->DrawGetTextureSize(m_nId, width, heigth); - - } - void SetTGAImage( const char* pName ) { Cleanup(); @@ -71,5 +64,4 @@ private: int m_nId = -1; }; - #endif // GAMEPADUI_IMAGE_H diff --git a/game/gamepadui/gamepadui_interface.cpp b/game/gamepadui/gamepadui_interface.cpp index ca6d795e..d34309e2 100644 --- a/game/gamepadui/gamepadui_interface.cpp +++ b/game/gamepadui/gamepadui_interface.cpp @@ -82,7 +82,7 @@ void GamepadUI::Initialize( CreateInterfaceFn factory ) m_pAnimationController = new vgui::AnimationController( m_pBasePanel ); m_pAnimationController->SetProportional( false ); - //GetMainMenu()->Activate(); + GetMainMenu()->Activate(); } void GamepadUI::Shutdown() @@ -108,14 +108,6 @@ void GamepadUI::OnUpdate( float flFrametime ) { if ( m_pAnimationController ) m_pAnimationController->UpdateAnimations( GetTime() ); - - static bool tempNumDraw = true; - - if (ConVarRef("cl_gamepadui_mainmenu_draw").GetBool() && tempNumDraw) - { - GetMainMenu()->Activate(); - tempNumDraw=false; - } } void GamepadUI::OnLevelInitializePreEntity() @@ -250,6 +242,16 @@ void GamepadUI::GetSizingPanelOffset( int &nX, int &nY ) const pPanel->GetPos( nX, nY ); } +GamepadUIFrame *GamepadUI::GetCurrentFrame() const +{ + return m_pBasePanel->GetCurrentFrame(); +} + +vgui::VPANEL GamepadUI::GetCurrentFrameVPanel() const +{ + return m_pBasePanel->GetCurrentFrame()->GetVPanel(); +} + #ifdef MAPBASE void GamepadUI::BonusMapChallengeNames( char *pchFileName, char *pchMapName, char *pchChallengeName ) { diff --git a/game/gamepadui/gamepadui_interface.h b/game/gamepadui/gamepadui_interface.h index 112a2413..19f977df 100644 --- a/game/gamepadui/gamepadui_interface.h +++ b/game/gamepadui/gamepadui_interface.h @@ -35,6 +35,7 @@ class GamepadUIMainMenu; class GamepadUIBasePanel; class GamepadUISizingPanel; +class GamepadUIFrame; class GamepadUI : public IGamepadUI { @@ -79,8 +80,6 @@ public: ISource2013SteamInput *GetSteamInput() const { return m_pSteamInput; } #endif - GamepadUIMainMenu* GetMainMenu() const; - vgui::AnimationController *GetAnimationController() const { return m_pAnimationController; } float GetTime() const { return Plat_FloatTime(); } GradientHelper *GetGradientHelper() { return &m_GradientHelper; } @@ -94,6 +93,9 @@ public: void GetSizingPanelScale( float &flX, float &flY ) const; void GetSizingPanelOffset( int &nX, int &nY ) const; + GamepadUIFrame *GetCurrentFrame() const; + vgui::VPANEL GetCurrentFrameVPanel() const; + #ifdef MAPBASE void BonusMapChallengeNames( char *pchFileName, char *pchMapName, char *pchChallengeName ) OVERRIDE; void BonusMapChallengeObjectives( int &iBronze, int &iSilver, int &iGold ) OVERRIDE; @@ -131,6 +133,8 @@ private: GradientHelper m_GradientHelper; CSteamAPIContext m_SteamAPIContext; + GamepadUIMainMenu* GetMainMenu() const; + float m_flScreenXRatio = 1.0f; float m_flScreenYRatio = 1.0f; @@ -143,9 +147,6 @@ private: #endif static GamepadUI *s_pGamepadUI; - -public: - float GetTimeDelta() const; }; #endif // GAMEPADUI_INTERFACE_H diff --git a/game/gamepadui/gamepadui_loadingscreen.cpp b/game/gamepadui/gamepadui_loadingscreen.cpp deleted file mode 100644 index e69de29b..00000000 diff --git a/game/gamepadui/gamepadui_loadingscreen.h b/game/gamepadui/gamepadui_loadingscreen.h deleted file mode 100644 index e69de29b..00000000 diff --git a/game/gamepadui/gamepadui_mainmenu.cpp b/game/gamepadui/gamepadui_mainmenu.cpp index 68349064..1ad75a65 100644 --- a/game/gamepadui/gamepadui_mainmenu.cpp +++ b/game/gamepadui/gamepadui_mainmenu.cpp @@ -2,8 +2,6 @@ #include "gamepadui_basepanel.h" #include "gamepadui_mainmenu.h" -//#include "..\client\cdll_client_int.h" - #include "vgui/ISurface.h" #include "vgui/ILocalize.h" #include "vgui/IVGui.h" @@ -21,37 +19,7 @@ ConVar gamepadui_show_ez2_version( "gamepadui_show_ez2_version", "1", FCVAR_NONE ConVar gamepadui_show_old_ui_button( "gamepadui_show_old_ui_button", "1", FCVAR_NONE, "Show button explaining how to switch to the old UI (Changes may not take effect until changing level)" ); #endif -#define BUTTONS_DEVIDE_SIZE 2 - -float m_flButtonsRealOffsetX = -500; -float m_flButtonsRealAlpha = 0; -int m_flButtonsAlpha = 255; - -float m_flLogoRealOffsetX = -500; -int m_flLogoAlpha = 255; - -bool ResetFade = false; - -int LogoSizeX, LogoSizeY; - -int nMaxLogosW = 0, nTotalLogosH = 0; - -float TimeDelta = 0; -float LastTime = 0; - -float TimeDeltaLogo = 0; -float LastTimeLogo = 0; - -float curtime = 0; - -void CC_ResetFade() -{ - ResetFade = true; -} - -ConCommand gamepadui_resetfade("gamepadui_resetfade", CC_ResetFade); - -GamepadUIMainMenu::GamepadUIMainMenu( vgui::Panel* pParent ) +GamepadUIMainMenu::GamepadUIMainMenu( vgui::Panel* pParent ) : BaseClass( pParent, "MainMenu" ) { vgui::HScheme hScheme = vgui::scheme()->LoadSchemeFromFileEx( GamepadUI::GetInstance().GetSizingVPanel(), GAMEPADUI_MAINMENU_SCHEME, "SchemeMainMenu" ); @@ -62,17 +30,14 @@ GamepadUIMainMenu::GamepadUIMainMenu( vgui::Panel* pParent ) { if ( pModData->LoadFromFile( g_pFullFileSystem, "gameinfo.txt" ) ) { - m_LogoText[ 0 ].SetText(pModData->GetString( "gamepadui_title", pModData->GetString( "title" ) ) ); - m_LogoText[ 1 ].SetText(pModData->GetString( "gamepadui_title2", pModData->GetString( "title2" ) ) ); + m_LogoText[ 0 ] = pModData->GetString( "gamepadui_title", pModData->GetString( "title" ) ); + m_LogoText[ 1 ] = pModData->GetString( "gamepadui_title2", pModData->GetString( "title2" ) ); } pModData->deleteThis(); } LoadMenuButtons(); - TimeDelta = 0; - LastTime = GamepadUI::GetInstance().GetEngineClient()->Time(); - SetFooterButtons( FooterButtons::Select, FooterButtons::Select ); } @@ -80,12 +45,12 @@ void GamepadUIMainMenu::UpdateGradients() { const float flTime = GamepadUI::GetInstance().GetTime(); GamepadUI::GetInstance().GetGradientHelper()->ResetTargets( flTime ); -//#if defined(GAMEPADUI_GAME_EZ2) //enabled in city52 as well +#ifdef GAMEPADUI_GAME_EZ2 // E:Z2 reduces the gradient so that the background map can be more easily seen - GamepadUI::GetInstance().GetGradientHelper()->SetTargetGradient( GradientSide::Left, { 1.0f, GamepadUI::GetInstance().IsInBackgroundLevel() ? 0 : 0.666f }, flTime ); -//#else -// GamepadUI::GetInstance().GetGradientHelper()->SetTargetGradient( GradientSide::Left, { 1.0f, 0.666f }, flTime ); -//#endif + GamepadUI::GetInstance().GetGradientHelper()->SetTargetGradient( GradientSide::Left, { 1.0f, GamepadUI::GetInstance().IsInBackgroundLevel() ? 0.333f : 0.666f }, flTime ); +#else + GamepadUI::GetInstance().GetGradientHelper()->SetTargetGradient( GradientSide::Left, { 1.0f, 0.666f }, flTime ); +#endif // In case a controller is added mid-game SetFooterButtons( FooterButtons::Select, FooterButtons::Select ); @@ -93,8 +58,6 @@ void GamepadUIMainMenu::UpdateGradients() void GamepadUIMainMenu::LoadMenuButtons() { - - KeyValues* pDataFile = new KeyValues( "MainMenuScript" ); if ( pDataFile ) { @@ -112,8 +75,6 @@ void GamepadUIMainMenu::LoadMenuButtons() pButton->SetPriority( V_atoi( pData->GetString( "priority", "0" ) ) ); pButton->SetVisible( true ); - //pButton->SetSize(pButton->GetWide() / BUTTONS_DEVIDE_SIZE , pButton->GetTall() / BUTTONS_DEVIDE_SIZE); - const char* pFamily = pData->GetString( "family", "all" ); if ( !V_strcmp( pFamily, "ingame" ) || !V_strcmp( pFamily, "all" ) ) m_Buttons[ GamepadUIMenuStates::InGame ].AddToTail( pButton ); @@ -144,36 +105,13 @@ void GamepadUIMainMenu::ApplySchemeSettings( vgui::IScheme* pScheme ) { BaseClass::ApplySchemeSettings( pScheme ); - /*float flX, flY; - if (GamepadUI::GetInstance().GetScreenRatio(flX, flY)) - { - m_flButtonsOffsetX *= (flX * flX); - } - - int nX, nY; - GamepadUI::GetInstance().GetSizingPanelOffset(nX, nY); - if (nX > 0) - { - GamepadUI::GetInstance().GetSizingPanelScale(flX, flY); - m_flButtonsOffsetX += ((float)nX) * flX * 0.5f; - }*/ - - - - int nParentW, nParentH; GetParent()->GetSize( nParentW, nParentH ); SetBounds( 0, 0, nParentW, nParentH ); const char *pImage = pScheme->GetResourceString( "Logo.Image" ); - - Msg(pImage); - - if (pImage && *pImage) - { - m_LogoImage.SetImage(pImage); - m_LogoImage.GetImageSize(LogoSizeX, LogoSizeY); - } + if ( pImage && *pImage ) + m_LogoImage.SetImage( pImage ); m_hLogoFont = pScheme->GetFont( "Logo.Font", true ); #ifdef GAMEPADUI_GAME_EZ2 @@ -182,86 +120,19 @@ void GamepadUIMainMenu::ApplySchemeSettings( vgui::IScheme* pScheme ) ConVarRef ez2_version( "ez2_version" ); m_strEZ2Version = ez2_version.GetString(); #endif - - if (m_flButtonsStartOffsetX == 0) - m_flButtonsRealOffsetX = m_flButtonsStartOffsetX = m_flButtonsOffsetX; - else - m_flButtonsRealOffsetX = m_flButtonsStartOffsetX; - - m_flButtonsRealAlpha = 0; - - if (m_flLogoStartOffsetX == 0) - m_flLogoRealOffsetX = m_flLogoOffsetX; - else - m_flLogoRealOffsetX = m_flLogoStartOffsetX; } -int LogoID; - void GamepadUIMainMenu::LayoutMainMenu() { int nY = GetCurrentButtonOffset(); CUtlVector& currentButtons = GetCurrentButtons(); - - - //HACK if we have more than 0.7 sec of delay between frames, we possybly lagging - if (GamepadUI::GetInstance().GetTime() - LastTime <= 0.7f) - TimeDelta = GamepadUI::GetInstance().GetTime() - LastTime; - - curtime += TimeDelta; - //curtime = clamp(curtime, 0, m_flButtonsAnimTime); - - - - int i = 0; for ( GamepadUIButton *pButton : currentButtons ) { - nY += pButton->GetTall(); - pButton->SetPos( m_flButtonsRealOffsetX, GetTall() - nY ); - pButton->SetAlpha(m_flButtonsRealAlpha); - - //FIXME ive tried to make this anim seperatly for each button so they whould move next to each other, - //but the life planned other plans, so when im subtracting 0.5*i it stopping them at some distance and they dont go all the way. - float TdC; - - float func; - - - if (GetCurrentMenuState() == GamepadUIMenuStates::InGame && !GamepadUI::GetInstance().IsInBackgroundLevel()) - { - TdC = clamp(curtime, 0, m_flButtonsAnimTimeInGame); - func = clamp(pow((TdC / m_flButtonsAnimTimeInGame), - m_flButtonsAnimPowerInGame) / (pow((TdC / m_flButtonsAnimTimeInGame), - m_flButtonsAnimPowerInGame) + pow(1 - (TdC / m_flButtonsAnimTimeInGame), - m_flButtonsAnimPowerInGame)), 0, 1); - } - else - { - TdC = clamp(curtime, 0, m_flButtonsAnimTime); - func = clamp(pow((TdC / m_flButtonsAnimTime), - m_flButtonsAnimPower) / (pow((TdC / m_flButtonsAnimTime), - m_flButtonsAnimPower) + pow(1 - (TdC / m_flButtonsAnimTime), - m_flButtonsAnimPower)), 0, 1); - } - - m_flButtonsRealOffsetX = RemapVal(func, 0, 1, m_flButtonsStartOffsetX, m_flButtonsOffsetX); - m_flButtonsRealAlpha = RemapVal(func, 0, 1, 0, m_flButtonsAlpha); - - //pButton->SetPos( m_flButtonsOffsetX, GetTall() - nY ); - i++; + pButton->SetPos( m_flButtonsOffsetX, GetTall() - nY ); nY += m_flButtonSpacing; } - - - - LastTime = GamepadUI::GetInstance().GetTime(); - - - - - #ifdef GAMEPADUI_GAME_EZ2 if ( m_pSwitchToOldUIButton && m_pSwitchToOldUIButton->IsVisible() ) { @@ -275,11 +146,7 @@ void GamepadUIMainMenu::LayoutMainMenu() void GamepadUIMainMenu::PaintLogo() { -#ifdef GAMEPADUI_GAME_HL2 //a little hack to make default hl2 logo be yellow and still be able to change it later in res file - vgui::surface()->DrawSetTextColor(m_colLogoNewColor); -#else - vgui::surface()->DrawSetTextColor(m_colLogoColor); -#endif + vgui::surface()->DrawSetTextColor( m_colLogoColor ); vgui::surface()->DrawSetTextFont( m_hLogoFont ); int nMaxLogosW = 0, nTotalLogosH = 0; @@ -299,54 +166,20 @@ void GamepadUIMainMenu::PaintLogo() if ( m_LogoImage.IsValid() ) { int nY1 = nLogoY; - int nY2 = nY1 + /*nLogoH[0]*/ m_flLogoSizeY; - //int nX1 = m_flLogoOffsetX; - - int nX1 = m_flLogoRealOffsetX; - int nX2 = nX1 + /*(nLogoH[0] * 3)*/ m_flLogoSizeX; - - vgui::surface()->DrawSetColor(Color(255, 255, 255, 255)); - vgui::surface()->DrawSetTexture(m_LogoImage); - vgui::surface()->DrawTexturedRect(nX1, nY1, nX2, nY2); - vgui::surface()->DrawSetTexture(0); - - //TimeDeltaLogo = GamepadUI::GetInstance().GetTime() - LastTimeLogo; - //TimeDeltaLogo = clamp(TimeDeltaLogo, 0.2, 0.5); - - float TdC; - - //m_flLogoRealOffsetX = Lerp(m_flLogoLerp * TimeDeltaLogo, m_flLogoRealOffsetX, m_flLogoOffsetX); - float func; - - if (GetCurrentMenuState() == GamepadUIMenuStates::InGame) - { - TdC = clamp(curtime, 0, m_flLogoAnimTimeInGame); - func = clamp(pow((TdC / m_flLogoAnimTimeInGame), - m_flLogoAnimPowerInGame) / (pow((TdC / m_flLogoAnimTimeInGame), - m_flLogoAnimPowerInGame) + pow(1 - (TdC / m_flLogoAnimTimeInGame), - m_flLogoAnimPowerInGame)), 0, 1); - } - else - { - TdC = clamp(curtime, 0, m_flLogoAnimTime); - func = clamp(pow((TdC / m_flLogoAnimTime), - m_flLogoAnimPower) / (pow((TdC / m_flLogoAnimTime), - m_flLogoAnimPower) + pow(1 - (TdC / m_flLogoAnimTime), - m_flLogoAnimPower)), 0, 1); - } - - m_flLogoRealOffsetX = RemapVal(func, 0, 1, -m_flLogoSizeX, m_flLogoOffsetX); - - //LastTimeLogo = GamepadUI::GetInstance().GetTime(); - + int nY2 = nY1 + nLogoH[ 0 ]; + int nX1 = m_flLogoOffsetX; + int nX2 = nX1 + ( nLogoH[ 0 ] * 3 ); + vgui::surface()->DrawSetColor( Color( 255, 255, 255, 255 ) ); + vgui::surface()->DrawSetTexture( m_LogoImage ); + vgui::surface()->DrawTexturedRect( nX1, nY1, nX2, nY2 ); + vgui::surface()->DrawSetTexture( 0 ); } else { for ( int i = 1; i >= 0; i-- ) { vgui::surface()->DrawSetTextPos( m_flLogoOffsetX, nLogoY ); - int aboba = m_LogoText[i].Length(); - vgui::surface()->DrawPrintText( m_LogoText[ i ].String(), aboba); + vgui::surface()->DrawPrintText( m_LogoText[ i ].String(), m_LogoText[ i ].Length() ); nLogoY -= nLogoH[ i ]; } @@ -371,35 +204,13 @@ void GamepadUIMainMenu::OnThink() BaseClass::OnThink(); LayoutMainMenu(); - } void GamepadUIMainMenu::Paint() { - BaseClass::Paint(); - if (ResetFade) - { - curtime = 0; - - if (m_flButtonsStartOffsetX == 0) - m_flButtonsRealOffsetX = m_flButtonsStartOffsetX = m_flButtonsOffsetX; - else - m_flButtonsRealOffsetX = m_flButtonsStartOffsetX; - - m_flButtonsRealAlpha = 0; - - if (m_flLogoStartOffsetX == 0) - m_flLogoRealOffsetX = m_flLogoOffsetX; - else - m_flLogoRealOffsetX = m_flLogoStartOffsetX; - - ResetFade = false; - } - PaintLogo(); - } void GamepadUIMainMenu::OnCommand( char const* pCommand ) @@ -441,7 +252,6 @@ void GamepadUIMainMenu::OnMenuStateChanged() void GamepadUIMainMenu::UpdateButtonVisibility() { - for ( CUtlVector& buttons : m_Buttons ) { for ( GamepadUIButton* pButton : buttons ) diff --git a/game/gamepadui/gamepadui_mainmenu.h b/game/gamepadui/gamepadui_mainmenu.h index 54688116..6127c975 100644 --- a/game/gamepadui/gamepadui_mainmenu.h +++ b/game/gamepadui/gamepadui_mainmenu.h @@ -18,7 +18,6 @@ namespace GamepadUIMenuStates Count }; } - using GamepadUIMenuState = GamepadUIMenuStates::GamepadUIMenuState; class GamepadUIMainMenu : public GamepadUIFrame @@ -41,7 +40,6 @@ public: void PaintLogo(); void OnMenuStateChanged(); - void OnKeyCodeReleased( vgui::KeyCode code ); private: @@ -64,35 +62,16 @@ private: GamepadUIString m_LogoText[ 2 ]; GamepadUIImage m_LogoImage; - /////// Animation stuff - GAMEPADUI_PANEL_PROPERTY(float, m_flButtonsStartOffsetX, "Buttons.OffsetX.Start", "0", SchemeValueTypes::ProportionalFloat); - GAMEPADUI_PANEL_PROPERTY(float, m_flButtonsAnimTime, "Buttons.AnimTime", "1", SchemeValueTypes::Float); - GAMEPADUI_PANEL_PROPERTY(float, m_flButtonsAnimTimeInGame, "Buttons.AnimTime.InGame", "1", SchemeValueTypes::Float); - GAMEPADUI_PANEL_PROPERTY(float, m_flButtonsAnimPower, "Buttons.AnimPower", "1", SchemeValueTypes::Float); - GAMEPADUI_PANEL_PROPERTY(float, m_flButtonsAnimPowerInGame, "Buttons.AnimPower.InGame", "1", SchemeValueTypes::Float); - - GAMEPADUI_PANEL_PROPERTY(float, m_flLogoStartOffsetX, "Logo.OffsetX.Start", "0", SchemeValueTypes::ProportionalFloat); - GAMEPADUI_PANEL_PROPERTY(float, m_flLogoAnimTime, "Logo.AnimTime", "1", SchemeValueTypes::Float); - GAMEPADUI_PANEL_PROPERTY(float, m_flLogoAnimTimeInGame, "Logo.AnimTime.InGame", "1", SchemeValueTypes::Float); - GAMEPADUI_PANEL_PROPERTY(float, m_flLogoAnimPower, "Logo.AnimPower", "1", SchemeValueTypes::Float); - GAMEPADUI_PANEL_PROPERTY(float, m_flLogoAnimPowerInGame, "Logo.AnimPower.InGame", "1", SchemeValueTypes::Float); - /////// - GAMEPADUI_PANEL_PROPERTY( float, m_flButtonSpacing, "Buttons.Space", "0", SchemeValueTypes::ProportionalFloat ); - GAMEPADUI_PANEL_PROPERTY( float, m_flButtonsOffsetX, "Buttons.OffsetX", "0", SchemeValueTypes::ProportionalFloat ); - + GAMEPADUI_PANEL_PROPERTY( float, m_flButtonsOffsetX, "Buttons.OffsetX", "0", SchemeValueTypes::ProportionalFloat ); GAMEPADUI_PANEL_PROPERTY( float, m_flButtonsOffsetYMenu, "Buttons.OffsetY.MainMenu", "0", SchemeValueTypes::ProportionalFloat ); GAMEPADUI_PANEL_PROPERTY( float, m_flButtonsOffsetYInGame, "Buttons.OffsetY.InGame", "0", SchemeValueTypes::ProportionalFloat ); GAMEPADUI_PANEL_PROPERTY( float, m_flLogoOffsetX, "Logo.OffsetX", "0", SchemeValueTypes::ProportionalFloat ); - GAMEPADUI_PANEL_PROPERTY( float, m_flLogoOffsetYMenu, "Logo.OffsetY.MainMenu", "0", SchemeValueTypes::ProportionalFloat ); GAMEPADUI_PANEL_PROPERTY( float, m_flLogoOffsetYInGame, "Logo.OffsetY.InGame", "0", SchemeValueTypes::ProportionalFloat ); - GAMEPADUI_PANEL_PROPERTY(float, m_flLogoSizeX, "Logo.SizeX", "0", SchemeValueTypes::ProportionalFloat); - GAMEPADUI_PANEL_PROPERTY(float, m_flLogoSizeY, "Logo.SizeY", "0", SchemeValueTypes::ProportionalFloat); GAMEPADUI_PANEL_PROPERTY( Color, m_colLogoColor, "Logo", "255 255 255 255", SchemeValueTypes::Color ); - GAMEPADUI_PANEL_PROPERTY( Color, m_colLogoNewColor, "NewLogo", "255 134 44 255", SchemeValueTypes::Color ); vgui::HFont m_hLogoFont; diff --git a/game/gamepadui/gamepadui_options.cpp b/game/gamepadui/gamepadui_options.cpp index 27b8e392..5ff3e562 100644 --- a/game/gamepadui/gamepadui_options.cpp +++ b/game/gamepadui/gamepadui_options.cpp @@ -26,7 +26,7 @@ // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" -const int MAX_OPTIONS_TABS = 7; +const int MAX_OPTIONS_TABS = 8; #define GAMEPADUI_OPTIONS_FILE GAMEPADUI_RESOURCE_FOLDER "options.res" @@ -79,6 +79,7 @@ public: void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE; void SetOptionDescription( GamepadUIString *pStr ) { m_strOptionDescription = pStr; } + void SetOptionImage( GamepadUIImage *pImg ) { m_pOptionImage = pImg; } void SetActiveTab( int nTab ); int GetActiveTab(); @@ -124,6 +125,8 @@ private: GamepadUIString *m_strOptionDescription = NULL; vgui::HFont m_hDescFont = vgui::INVALID_FONT; + + GamepadUIImage *m_pOptionImage = NULL; GamepadUIScrollBar *m_pScrollBar; @@ -159,6 +162,15 @@ public: Assert( GamepadUIOptionsPanel::GetInstance() != NULL ); GamepadUIOptionsPanel::GetInstance()->SetOptionDescription( &m_strButtonDescription ); m_bDescriptionHide = true; + + if (m_OptionImage.IsValid()) + { + GamepadUIOptionsPanel::GetInstance()->SetOptionImage( &m_OptionImage ); + } + else + { + GamepadUIOptionsPanel::GetInstance()->SetOptionImage( NULL ); + } } } @@ -172,8 +184,26 @@ public: return m_bHorizontal; } + inline void SetOptionImage( const char *pName ) + { + if (pName == NULL) + { + m_OptionImage.Cleanup(); + return; + } + + m_OptionImage.SetImage( pName ); + } + + inline GamepadUIImage &GetOptionImage() + { + return m_OptionImage; + } + private: bool m_bHorizontal = false; + + GamepadUIImage m_OptionImage; }; class GamepadUIHeaderButton : public GamepadUIOptionButton @@ -1598,8 +1628,8 @@ void GamepadUIOptionsPanel::Paint() if ( m_rightGlyph.SetupGlyph( nGlyphSize, "menu_rb", true ) ) m_rightGlyph.PaintGlyph( nLastTabX + nGlyphOffsetX, m_flTabsOffsetY + nGlyphOffsetY / 2, nGlyphSize, 255 ); - // Draw description - if (m_strOptionDescription != NULL) + // Draw description/image + if (m_strOptionDescription != NULL || m_pOptionImage != NULL) { int nParentW, nParentH; GetParent()->GetSize( nParentW, nParentH ); @@ -1607,13 +1637,34 @@ void GamepadUIOptionsPanel::Paint() float flX = m_flFooterButtonsOffsetX + m_nFooterButtonWidth + m_flFooterButtonsSpacing; float flY = nParentH - m_flFooterButtonsOffsetY - m_nFooterButtonHeight; - vgui::surface()->DrawSetTextColor( Color( 255, 255, 255, 255 ) ); - vgui::surface()->DrawSetTextFont( m_hDescFont ); - vgui::surface()->DrawSetTextPos( flX, flY ); - int nMaxWidth = nParentW - flX - (m_flFooterButtonsOffsetX + m_nFooterButtonWidth + m_flFooterButtonsSpacing); + + if (m_pOptionImage != NULL) + { + int wide, tall; + vgui::surface()->DrawGetTextureSize( *m_pOptionImage, wide, tall ); - DrawPrintWrappedText( m_hDescFont, flX, flY, m_strOptionDescription->String(), m_strOptionDescription->Length(), nMaxWidth, true ); + // TODO: More defined/controllable dimensions? + wide = (wide/tall) * m_nFooterButtonHeight * 3; + tall = m_nFooterButtonHeight * 3; + nMaxWidth -= wide; + + vgui::surface()->DrawSetTexture( *m_pOptionImage ); + vgui::surface()->DrawSetColor( Color( 255, 255, 255, 255 ) ); + vgui::surface()->DrawTexturedRect( flX + nMaxWidth, flY, flX + nMaxWidth + wide, flY + tall ); + + // Minor spacing + nMaxWidth -= 4; + } + + if (m_strOptionDescription != NULL) + { + vgui::surface()->DrawSetTextColor( Color( 255, 255, 255, 255 ) ); + vgui::surface()->DrawSetTextFont( m_hDescFont ); + vgui::surface()->DrawSetTextPos( flX, flY ); + + DrawPrintWrappedText( m_hDescFont, flX, flY, m_strOptionDescription->String(), m_strOptionDescription->Length(), nMaxWidth, true ); + } } } @@ -2340,6 +2391,7 @@ void GamepadUIOptionsPanel::LoadOptionTabs( const char *pszOptionsFile ) pItemData->GetString( "text", "" ), pItemData->GetString( "description", "" ) ); button->SetToDefault(); button->SetMouseStep( pItemData->GetFloat( "mouse_step", flStep ) ); + button->SetOptionImage( pItemData->GetString( "image", NULL ) ); m_Tabs[ m_nTabCount ].pButtons.AddToTail( button ); } else if ( !V_strcmp( pItemType, "headeryheader" ) ) @@ -2446,6 +2498,7 @@ void GamepadUIOptionsPanel::LoadOptionTabs( const char *pszOptionsFile ) } } button->SetToDefault(); + button->SetOptionImage( pItemData->GetString( "image", NULL ) ); // Values which require confirmation before changing KeyValues *pConfirm = pItemData->FindKey( "confirm" ); diff --git a/game/gamepadui/gamepadui_panel.h b/game/gamepadui/gamepadui_panel.h index c1f4c8c9..5beaf23a 100644 --- a/game/gamepadui/gamepadui_panel.h +++ b/game/gamepadui/gamepadui_panel.h @@ -5,7 +5,7 @@ #endif #include "gamepadui_interface.h" -#include "../../public/vgui_controls/Panel.h" +#include "vgui_controls/Panel.h" // There are a lot of really sucky macros in here // solely because VGUI base class stuff completely diff --git a/game/gamepadui/gamepadui_string.h b/game/gamepadui/gamepadui_string.h index 8b5ba740..edd522a8 100644 --- a/game/gamepadui/gamepadui_string.h +++ b/game/gamepadui/gamepadui_string.h @@ -31,7 +31,7 @@ public: SetText( pszText, nLength ); } - const wchar_t*String() const + const wchar_t *String() const { if ( m_ManagedText.Count() ) return m_ManagedText.Base(); @@ -42,7 +42,7 @@ public: int Length() const { if ( m_ManagedText.Count() ) - return m_ManagedText.Count()-1; + return m_ManagedText.Count() - 1; return 0; } @@ -103,10 +103,9 @@ public: memset( szUnicode, 0, sizeof( wchar_t ) * 4096 ); V_UTF8ToUnicode( pszText, szUnicode, sizeof( szUnicode ) ); - - int nChars = V_strlen(pszText); + int nChars = V_strlen(pszText); if ( nChars > 1 ) - SetText( szUnicode, nChars ); + SetText( szUnicode, nChars - 1 ); } private: CCopyableUtlVector< wchar_t > m_ManagedText; diff --git a/game/gamepadui/igamepadui.h b/game/gamepadui/igamepadui.h index 4f16b73e..1505d528 100644 --- a/game/gamepadui/igamepadui.h +++ b/game/gamepadui/igamepadui.h @@ -23,8 +23,9 @@ public: virtual void OnLevelShutdown() = 0; virtual void VidInit() = 0; + #ifdef STEAM_INPUT - //// TODO: Replace with proper singleton interface in the future + // TODO: Replace with proper singleton interface in the future virtual void SetSteamInput( ISource2013SteamInput *pSteamInput ) = 0; #endif