116 lines
3.4 KiB
C++
116 lines
3.4 KiB
C++
//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ====
|
|
//
|
|
// Defines a logical entity which passes achievement related events to the gamerules system.
|
|
|
|
#include "cbase.h"
|
|
#include "gamerules.h"
|
|
#include "entityinput.h"
|
|
#include "entityoutput.h"
|
|
|
|
// memdbgon must be the last include file in a .cpp file!!!
|
|
#include "tier0/memdbgon.h"
|
|
|
|
|
|
// Allows map logic to send achievement related events.
|
|
class CLogicAchievement : public CLogicalEntity
|
|
{
|
|
public:
|
|
DECLARE_CLASS( CLogicAchievement, CLogicalEntity );
|
|
|
|
CLogicAchievement();
|
|
|
|
protected:
|
|
|
|
// Inputs
|
|
void InputFireEvent( inputdata_t &inputdata );
|
|
void InputEnable( inputdata_t &inputdata );
|
|
void InputDisable( inputdata_t &inputdata );
|
|
void InputToggle( inputdata_t &inputdata );
|
|
void InputSetTargetPlayer( inputdata_t &inputdata );
|
|
|
|
bool m_bDisabled;
|
|
string_t m_iszAchievementName; // Which achievement event this entity marks
|
|
EHANDLE m_hActivatingPlayer;
|
|
|
|
COutputEvent m_OnFired;
|
|
|
|
DECLARE_DATADESC();
|
|
};
|
|
|
|
|
|
LINK_ENTITY_TO_CLASS( logic_achievement, CLogicAchievement );
|
|
|
|
|
|
BEGIN_DATADESC( CLogicAchievement )
|
|
|
|
DEFINE_KEYFIELD( m_bDisabled, FIELD_BOOLEAN, "StartDisabled" ),
|
|
DEFINE_KEYFIELD( m_iszAchievementName, FIELD_STRING, "achievementname" ),
|
|
|
|
DEFINE_FIELD( m_hActivatingPlayer, FIELD_EHANDLE ),
|
|
|
|
// Inputs
|
|
DEFINE_INPUTFUNC( FIELD_VOID, "FireEvent", InputFireEvent ),
|
|
DEFINE_INPUTFUNC( FIELD_VOID, "Enable", InputEnable ),
|
|
DEFINE_INPUTFUNC( FIELD_VOID, "Disable", InputDisable ),
|
|
DEFINE_INPUTFUNC( FIELD_VOID, "Toggle", InputToggle ),
|
|
DEFINE_INPUTFUNC( FIELD_VOID, "SetTargetPlayer", InputSetTargetPlayer ),
|
|
|
|
// Outputs
|
|
DEFINE_OUTPUT( m_OnFired, "OnFired" ),
|
|
|
|
END_DATADESC()
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Constructor.
|
|
//-----------------------------------------------------------------------------
|
|
CLogicAchievement::CLogicAchievement(void)
|
|
{
|
|
m_hActivatingPlayer = NULL;
|
|
m_iszAchievementName = NULL_STRING;
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Sends the achievement event to the achievement marking system.
|
|
//-----------------------------------------------------------------------------
|
|
void CLogicAchievement::InputFireEvent( inputdata_t &inputdata )
|
|
{
|
|
// If we're active, and our string matched a valid achievement ID
|
|
CBasePlayer *pPlayer = (CBasePlayer*)m_hActivatingPlayer.Get();
|
|
if ( !m_bDisabled && m_iszAchievementName != NULL_STRING )
|
|
{
|
|
UTIL_RecordAchievementEvent( m_iszAchievementName.ToCStr(), pPlayer );
|
|
m_OnFired.FireOutput( inputdata.pActivator, this );
|
|
}
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Purpose: Turns on the relay, allowing it to fire outputs.
|
|
//------------------------------------------------------------------------------
|
|
void CLogicAchievement::InputEnable( inputdata_t &inputdata )
|
|
{
|
|
m_bDisabled = false;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Purpose: Turns off the relay, preventing it from firing outputs.
|
|
//------------------------------------------------------------------------------
|
|
void CLogicAchievement::InputDisable( inputdata_t &inputdata )
|
|
{
|
|
m_bDisabled = true;
|
|
}
|
|
|
|
void CLogicAchievement::InputToggle( inputdata_t &inputdata )
|
|
{
|
|
m_bDisabled = !m_bDisabled;
|
|
}
|
|
|
|
void CLogicAchievement::InputSetTargetPlayer( inputdata_t &inputdata )
|
|
{
|
|
m_hActivatingPlayer = inputdata.value.Entity();
|
|
}
|
|
|