You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
4.2 KiB
186 lines
4.2 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Implements visual effects entities: sprites, beams, bubbles, etc. |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#include "cbase.h" |
|
#include "EnvMessage.h" |
|
#include "engine/IEngineSound.h" |
|
#include "KeyValues.h" |
|
#include "filesystem.h" |
|
#include "Color.h" |
|
#include "gamestats.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
|
|
class CPortalCredits : public CPointEntity |
|
{ |
|
public: |
|
DECLARE_CLASS( CMessage, CPointEntity ); |
|
DECLARE_DATADESC(); |
|
|
|
void Spawn( void ); |
|
void InputRollCredits( inputdata_t &inputdata ); |
|
void InputRollOutroCredits( inputdata_t &inputdata ); |
|
void InputShowLogo( inputdata_t &inputdata ); |
|
void InputSetLogoLength( inputdata_t &inputdata ); |
|
void InputRollPortalOutroCredits( inputdata_t &inputdata ); |
|
|
|
COutputEvent m_OnCreditsDone; |
|
|
|
virtual void Precache(); |
|
virtual void OnRestore(); |
|
private: |
|
|
|
void RollOutroCredits(); |
|
void RollPortalOutroCredits(); |
|
|
|
bool m_bRolledOutroCredits; |
|
float m_flLogoLength; |
|
}; |
|
|
|
LINK_ENTITY_TO_CLASS( env_portal_credits, CPortalCredits ); |
|
|
|
BEGIN_DATADESC( CPortalCredits ) |
|
DEFINE_INPUTFUNC( FIELD_VOID, "RollCredits", InputRollCredits ), |
|
DEFINE_INPUTFUNC( FIELD_VOID, "RollOutroCredits", InputRollOutroCredits ), |
|
DEFINE_INPUTFUNC( FIELD_VOID, "RollPortalOutroCredits", InputRollPortalOutroCredits ), |
|
DEFINE_INPUTFUNC( FIELD_VOID, "ShowLogo", InputShowLogo ), |
|
DEFINE_INPUTFUNC( FIELD_FLOAT, "SetLogoLength", InputSetLogoLength ), |
|
DEFINE_OUTPUT( m_OnCreditsDone, "OnCreditsDone"), |
|
|
|
DEFINE_FIELD( m_bRolledOutroCredits, FIELD_BOOLEAN ), |
|
DEFINE_FIELD( m_flLogoLength, FIELD_FLOAT ) |
|
END_DATADESC() |
|
|
|
void CPortalCredits::Spawn( void ) |
|
{ |
|
SetSolid( SOLID_NONE ); |
|
SetMoveType( MOVETYPE_NONE ); |
|
} |
|
|
|
static void CreditsDone_f( void ) |
|
{ |
|
CPortalCredits *pCredits = (CPortalCredits*)gEntList.FindEntityByClassname( NULL, "env_credits" ); |
|
|
|
if ( pCredits ) |
|
{ |
|
pCredits->m_OnCreditsDone.FireOutput( pCredits, pCredits ); |
|
} |
|
} |
|
|
|
static ConCommand creditsdone("creditsdone", CreditsDone_f ); |
|
|
|
extern ConVar sv_unlockedchapters; |
|
|
|
|
|
void CPortalCredits::Precache( void ) |
|
{ |
|
PrecacheScriptSound( "Portal.song_credits" ); |
|
|
|
BaseClass::Precache(); |
|
} |
|
|
|
void CPortalCredits::OnRestore() |
|
{ |
|
BaseClass::OnRestore(); |
|
|
|
if ( m_bRolledOutroCredits ) |
|
{ |
|
// Roll them again so that the client .dll will send the "creditsdone" message and we'll |
|
// actually get back to the main menu |
|
RollOutroCredits(); |
|
} |
|
} |
|
|
|
void CPortalCredits::RollOutroCredits() |
|
{ |
|
sv_unlockedchapters.SetValue( "15" ); |
|
|
|
CBasePlayer *pPlayer = UTIL_GetLocalPlayer(); |
|
|
|
CSingleUserRecipientFilter user( pPlayer ); |
|
user.MakeReliable(); |
|
|
|
UserMessageBegin( user, "CreditsPortalMsg" ); |
|
WRITE_BYTE( 3 ); |
|
MessageEnd(); |
|
} |
|
|
|
void CPortalCredits::InputRollOutroCredits( inputdata_t &inputdata ) |
|
{ |
|
RollOutroCredits(); |
|
|
|
// In case we save restore |
|
m_bRolledOutroCredits = true; |
|
|
|
gamestats->Event_Credits(); |
|
} |
|
|
|
void CPortalCredits::RollPortalOutroCredits() |
|
{ |
|
sv_unlockedchapters.SetValue( "15" ); |
|
|
|
CBasePlayer *pPlayer = UTIL_GetLocalPlayer(); |
|
|
|
CSingleUserRecipientFilter user( pPlayer ); |
|
user.MakeReliable(); |
|
|
|
UserMessageBegin( user, "CreditsPortalMsg" ); |
|
WRITE_BYTE( 4 ); |
|
MessageEnd(); |
|
} |
|
|
|
void CPortalCredits::InputRollPortalOutroCredits( inputdata_t &inputdata ) |
|
{ |
|
RollPortalOutroCredits(); |
|
|
|
// In case we save restore |
|
m_bRolledOutroCredits = true; |
|
|
|
gamestats->Event_Credits(); |
|
} |
|
|
|
|
|
void CPortalCredits::InputShowLogo( inputdata_t &inputdata ) |
|
{ |
|
CBasePlayer *pPlayer = UTIL_GetLocalPlayer(); |
|
|
|
CSingleUserRecipientFilter user( pPlayer ); |
|
user.MakeReliable(); |
|
|
|
if ( m_flLogoLength ) |
|
{ |
|
UserMessageBegin( user, "LogoTimeMsg" ); |
|
WRITE_FLOAT( m_flLogoLength ); |
|
MessageEnd(); |
|
} |
|
else |
|
{ |
|
UserMessageBegin( user, "CreditsPortalMsg" ); |
|
WRITE_BYTE( 1 ); |
|
MessageEnd(); |
|
} |
|
} |
|
|
|
void CPortalCredits::InputSetLogoLength( inputdata_t &inputdata ) |
|
{ |
|
m_flLogoLength = inputdata.value.Float(); |
|
} |
|
|
|
|
|
void CPortalCredits::InputRollCredits( inputdata_t &inputdata ) |
|
{ |
|
CBasePlayer *pPlayer = UTIL_GetLocalPlayer(); |
|
|
|
CSingleUserRecipientFilter user( pPlayer ); |
|
user.MakeReliable(); |
|
|
|
UserMessageBegin( user, "CreditsPortalMsg" ); |
|
WRITE_BYTE( 2 ); |
|
MessageEnd(); |
|
}
|
|
|