//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: [jpaquin] The "Player Two press start" widget // //=============================================================================// #include "cbase.h" #include "basepanel.h" #include "scaleformui/scaleformui.h" #include "iclientmode.h" #include "clientmode_csnormal.h" #include "sfhudflashinterface.h" #include "vgui/ILocalize.h" #include "VGuiMatSurface/IMatSystemSurface.h" #if defined( _X360 ) #include "xbox/xbox_launch.h" #endif // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" static const float UPDATE_INTERVAL = 60.0f; class SFHudTrialTimer : public SFHudFlashInterface { public: explicit SFHudTrialTimer( const char *value ) : SFHudFlashInterface( value ), m_fNextUpdate( 0.0f ), m_bVisible( false ) { SetHiddenBits( /* HIDEHUD_MISCSTATUS */ 0 ); } virtual ~SFHudTrialTimer() { } void ProcessInput( void ) { if ( FlashAPIIsValid() ) { if ( m_fNextUpdate < gpGlobals->curtime ) { m_fNextUpdate = gpGlobals->curtime + UPDATE_INTERVAL; bool bUnlocked = false; float timeLeft = 0; #if defined( _X360 ) if ( xboxsystem ) { bUnlocked = xboxsystem->IsArcadeTitleUnlocked(); if ( !bUnlocked ) { timeLeft = xboxsystem->GetArcadeRemainingTrialTime( m_iFlashSlot - SF_FIRST_SS_SLOT ); } } #else ConVarRef xbox_arcade_title_unlocked( "xbox_arcade_title_unlocked" ); ConVarRef xbox_arcade_remaining_trial_time( "xbox_arcade_remaining_trial_time" ); bUnlocked = xbox_arcade_title_unlocked.GetBool(); timeLeft = xbox_arcade_remaining_trial_time.GetFloat(); #endif if ( !bUnlocked ) { int minutesLeft = floorf( timeLeft / 60.0f ); minutesLeft = MAX( minutesLeft, 0 ); if ( minutesLeft == 1 ) { WITH_SLOT_LOCKED { m_pTimerMessage->SetTextHTML( "#SFUI_TrialHudTextMinute" ); } } else { char strTrialTime[16]; Q_snprintf( strTrialTime, sizeof( strTrialTime ), "%d", minutesLeft ); wchar_t buffer[128]; wchar_t wTrialTime[16]; g_pVGuiLocalize->ConvertANSIToUnicode( strTrialTime, wTrialTime, sizeof( wTrialTime ) ); g_pVGuiLocalize->ConstructString( buffer, sizeof( buffer ), g_pVGuiLocalize->Find( "#SFUI_TrialHudTextMinutes" ), 1, wTrialTime ); WITH_SLOT_LOCKED { m_pTimerMessage->SetTextHTML( buffer ); } } } } } } void LevelInit( void ) { if ( !FlashAPIIsValid() ) { SFUI_REQUEST_ELEMENT( SF_SS_SLOT( GET_ACTIVE_SPLITSCREEN_SLOT() ), g_pScaleformUI, SFHudTrialTimer, this, TrialTimer ); } } virtual void LevelShutdown( void ) { if ( FlashAPIIsValid() ) { RemoveFlashElement(); } } virtual void SetActive( bool bActive ) { ShowPanel( bActive, false ); CHudElement::SetActive( bActive ); } virtual bool ShouldDraw( void ) { bool result = cl_drawhud.GetBool(); #if defined( _X360 ) if ( result && xboxsystem ) { result = !( xboxsystem->IsArcadeTitleUnlocked() ); } #else ConVarRef xbox_arcade_title_unlocked( "xbox_arcade_title_unlocked" ); result = result && !xbox_arcade_title_unlocked.GetBool(); #endif return result && CHudElement::ShouldDraw(); } // these overload the ScaleformFlashInterfaceMixin class virtual void FlashReady( void ) { SFVALUE panel = m_pScaleformUI->Value_GetMember( m_FlashAPI, "Panel" ); if ( panel != NULL ) { m_pTimerMessage = m_pScaleformUI->TextObject_MakeTextObjectFromMember( panel, "AnimatedText" ); m_pScaleformUI->ReleaseValue( panel ); } ShowPanel( m_bVisible, true ); } virtual bool PreUnloadFlash( void ) { SafeReleaseSFTextObject( m_pTimerMessage ); return SFHudFlashInterface::PreUnloadFlash(); } protected: void ShowPanel( bool bShow, bool force ) { if ( ( bShow != m_bVisible ) || force ) { m_bVisible = bShow; if ( m_FlashAPI ) { if ( m_bVisible ) { m_fNextUpdate = 0.0f; ProcessInput(); WITH_SLOT_LOCKED m_pScaleformUI->Value_InvokeWithoutReturn( m_FlashAPI, "ShowPanel", NULL, 0 ); } else { WITH_SLOT_LOCKED m_pScaleformUI->Value_InvokeWithoutReturn( m_FlashAPI, "HidePanel", NULL, 0 ); } } } } protected: ISFTextObject* m_pTimerMessage; float m_fNextUpdate; bool m_bVisible; }; DECLARE_HUDELEMENT( SFHudTrialTimer ); SFUI_BEGIN_GAME_API_DEF SFUI_END_GAME_API_DEF( SFHudTrialTimer, TrialTimer );