Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

211 lines
5.5 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: CTF Powerup Rune.
//
//=============================================================================//
#ifndef ENTITY_RUNE_H
#define ENTITY_RUNE_H
#ifdef _WIN32
#pragma once
#endif
#include "tf_powerup.h"
#include "tf_gamerules.h"
#define TF_RUNE_STRENGTH "models/pickups/pickup_powerup_strength.mdl"
#define TF_RUNE_RESIST "models/pickups/pickup_powerup_defense.mdl"
#define TF_RUNE_REGEN "models/pickups/pickup_powerup_regen.mdl"
#define TF_RUNE_HASTE "models/pickups/pickup_powerup_haste.mdl"
#define TF_RUNE_VAMPIRE "models/pickups/pickup_powerup_vampire.mdl"
#define TF_RUNE_REFLECT "models/pickups/pickup_powerup_reflect.mdl"
#define TF_RUNE_PRECISION "models/pickups/pickup_powerup_precision.mdl"
#define TF_RUNE_AGILITY "models/pickups/pickup_powerup_agility.mdl"
#define TF_RUNE_KNOCKOUT "models/pickups/pickup_powerup_knockout.mdl"
#define TF_RUNE_KING "models/pickups/pickup_powerup_king.mdl"
#define TF_RUNE_PLAGUE "models/pickups/pickup_powerup_plague.mdl"
#define TF_RUNE_SUPERNOVA "models/pickups/pickup_powerup_supernova.mdl"
#define TF_RUNE_TEMP_CRIT "models/pickups/pickup_powerup_crit.mdl"
#define TF_RUNE_TEMP_UBER "models/pickups/pickup_powerup_uber.mdl"
DECLARE_AUTO_LIST( IInfoPowerupSpawnAutoList );
//=============================================================================
//
// CTF Rune class. Powerups which last the life of the player and drop when they die
//
//=============================================================================
class CTFRune : public CTFPowerup
{
public:
DECLARE_CLASS( CTFRune, CTFPowerup );
CTFRune();
~CTFRune();
virtual void Spawn( void ) OVERRIDE;
virtual void Precache( void ) OVERRIDE;
virtual bool MyTouch( CBasePlayer *pPlayer );
static CTFRune* CreateRune( const Vector &vecOrigin, RuneTypes_t nType, int nTeam, bool bShouldReposition, bool bApplyForce, Vector vecSpawnDirection = vec3_origin );
static bool RepositionRune( RuneTypes_t nType, int nTeamNumber );
float GetRuneRepositionTime( void );
virtual const char *GetDefaultPowerupModel( void )
{
if ( m_nRuneType == RUNE_STRENGTH )
{
return TF_RUNE_STRENGTH;
}
else if ( m_nRuneType == RUNE_RESIST )
{
return TF_RUNE_RESIST;
}
else if ( m_nRuneType == RUNE_REGEN )
{
return TF_RUNE_REGEN;
}
else if ( m_nRuneType == RUNE_HASTE )
{
return TF_RUNE_HASTE;
}
else if ( m_nRuneType == RUNE_VAMPIRE )
{
return TF_RUNE_VAMPIRE;
}
else if ( m_nRuneType == RUNE_REFLECT )
{
return TF_RUNE_REFLECT;
}
else if ( m_nRuneType == RUNE_PRECISION )
{
return TF_RUNE_PRECISION;
}
else if ( m_nRuneType == RUNE_AGILITY )
{
return TF_RUNE_AGILITY;
}
else if ( m_nRuneType == RUNE_KNOCKOUT )
{
return TF_RUNE_KNOCKOUT;
}
else if ( m_nRuneType == RUNE_KING )
{
return TF_RUNE_KING;
}
else if ( m_nRuneType == RUNE_PLAGUE )
{
return TF_RUNE_PLAGUE;
}
else if ( m_nRuneType == RUNE_SUPERNOVA )
{
return TF_RUNE_SUPERNOVA;
}
return TF_RUNE_STRENGTH;
}
virtual int UpdateTransmitState( void ) OVERRIDE;
virtual int ShouldTransmit( const CCheckTransmitInfo *pInfo ) OVERRIDE;
protected:
bool m_bApplyForce;
virtual void ComeToRest( void );
Vector m_vecSpawnDirection;
private:
void BlinkThink();
RuneTypes_t m_nRuneType;
int m_nBlinkCount;
float m_flKillTime;
float m_flCanPickupTime;
int m_nTeam;
bool m_bShouldReposition;
};
//=============================================================================
//
// CTF Rune Temp class - Powerups whose effect lasts a length of time, then deactivates
//
//=============================================================================
class CTFRuneTemp : public CTFPowerup
{
public:
DECLARE_CLASS( CTFRuneTemp, CTFPowerup );
CTFRuneTemp();
virtual void Spawn( void ) OVERRIDE;
virtual void Precache( void ) OVERRIDE;
virtual bool MyTouch( CBasePlayer *pPlayer ) OVERRIDE;
virtual const char *GetDefaultPowerupModel( void ) OVERRIDE { return TF_RUNE_TEMP_CRIT; }
virtual float GetRespawnDelay( void ) OVERRIDE;
protected:
void TempRuneRespawnThink( void );
int m_nRuneTempType;
};
//=============================================================================
//
// Temporary Crit boost
//
//=============================================================================
class CTFRuneTempCrit : public CTFRuneTemp
{
public:
DECLARE_CLASS( CTFRuneTempCrit, CTFRuneTemp );
CTFRuneTempCrit();
};
//=============================================================================
//
// Temporary Uber boost
//
//=============================================================================
class CTFRuneTempUber : public CTFRuneTemp
{
public:
DECLARE_CLASS( CTFRuneTempUber, CTFRuneTemp );
CTFRuneTempUber();
virtual const char *GetDefaultPowerupModel( void ) OVERRIDE { return TF_RUNE_TEMP_UBER; }
};
//=============================================================================
//
// Powerup Spawn point class - location to spawn a powerup at
//
//=============================================================================
class CTFInfoPowerupSpawn : public CPointEntity, public IInfoPowerupSpawnAutoList
{
public:
DECLARE_CLASS( CTFInfoPowerupSpawn, CPointEntity );
CTFInfoPowerupSpawn();
DECLARE_DATADESC();
virtual void Spawn() OVERRIDE;
bool IsDisabled() const { return m_bDisabled; }
bool HasRune() const { return m_hRune != NULL; }
void SetRune( CTFRune *pRune ) { m_hRune = pRune; }
private:
bool m_bDisabled;
int m_nTeam;
CHandle< CTFRune > m_hRune;
};
#endif // ENTITY_RUNE_H