mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-13 04:09:09 +00:00
1
This commit is contained in:
@@ -0,0 +1,513 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: Base Object built by a player
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef TF_OBJ_H
|
||||
#define TF_OBJ_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "baseentity.h"
|
||||
#include "ihasbuildpoints.h"
|
||||
#include "iscorer.h"
|
||||
#include "baseobject_shared.h"
|
||||
#include "utlmap.h"
|
||||
#include "props_shared.h"
|
||||
#include "tf_achievementdata.h"
|
||||
//#include "tf_player.h"
|
||||
|
||||
class CTFPlayer;
|
||||
class CTFTeam;
|
||||
class CRopeKeyframe;
|
||||
class CVGuiScreen;
|
||||
class KeyValues;
|
||||
class CTFWrench;
|
||||
class CTFAmmoPack;
|
||||
class CObjectSapper;
|
||||
struct animevent_t;
|
||||
|
||||
#define WRENCH_DMG_VS_SAPPER 65
|
||||
#define OBJ_MAX_UPGRADE_LEVEL 3
|
||||
#define OBJECT_REPAIR_RATE 10 // Health healed per second while repairing
|
||||
|
||||
// Construction
|
||||
#define OBJECT_CONSTRUCTION_INTERVAL 0.1
|
||||
#define OBJECT_CONSTRUCTION_STARTINGHEALTH 0.1
|
||||
|
||||
extern ConVar object_verbose;
|
||||
extern ConVar obj_child_range_factor;
|
||||
|
||||
#if defined( _DEBUG )
|
||||
#define TRACE_OBJECT( str ) \
|
||||
if ( object_verbose.GetInt() ) \
|
||||
{ \
|
||||
Msg( "%s", str ); \
|
||||
}
|
||||
#else
|
||||
#define TRACE_OBJECT( string )
|
||||
#endif
|
||||
|
||||
#define SF_BASEOBJ_INVULN (1<<1)
|
||||
#define LAST_SF_BASEOBJ SF_BASEOBJ_INVULN
|
||||
|
||||
DECLARE_AUTO_LIST( IBaseObjectAutoList );
|
||||
|
||||
enum
|
||||
{
|
||||
SHIELD_NONE = 0,
|
||||
SHIELD_NORMAL, // 33% damage taken, no tracking
|
||||
SHIELD_MAX, // 10% damage taken, tracking
|
||||
};
|
||||
|
||||
#define SHIELD_NORMAL_VALUE 0.33f
|
||||
#define SHIELD_MAX_VALUE 0.10f
|
||||
|
||||
// ------------------------------------------------------------------------ //
|
||||
// Resupply object that's built by the player
|
||||
// ------------------------------------------------------------------------ //
|
||||
class CBaseObject : public CBaseCombatCharacter, public IHasBuildPoints, public IScorer, public IBaseObjectAutoList
|
||||
{
|
||||
DECLARE_CLASS( CBaseObject, CBaseCombatCharacter );
|
||||
public:
|
||||
CBaseObject();
|
||||
|
||||
virtual void UpdateOnRemove( void );
|
||||
|
||||
DECLARE_SERVERCLASS();
|
||||
DECLARE_DATADESC();
|
||||
|
||||
virtual bool IsBaseObject( void ) const { return true; }
|
||||
|
||||
virtual void BaseObjectThink( void );
|
||||
//virtual void LostPowerThink( void );
|
||||
virtual CTFPlayer *GetOwner( void );
|
||||
|
||||
// Creation
|
||||
virtual void Precache();
|
||||
virtual void Spawn( void );
|
||||
virtual void FirstSpawn( void );
|
||||
|
||||
virtual bool ShouldCollide( int collisionGroup, int contentsMask ) const;
|
||||
|
||||
virtual void SetBuilder( CTFPlayer *pBuilder );
|
||||
virtual void SetType( int iObjectType );
|
||||
int ObjectType( ) const;
|
||||
|
||||
virtual int BloodColor( void ) { return BLOOD_COLOR_MECH; }
|
||||
|
||||
// Building
|
||||
virtual float GetTotalTime( void );
|
||||
virtual void StartPlacement( CTFPlayer *pPlayer );
|
||||
void StopPlacement( void );
|
||||
bool FindNearestBuildPoint( CBaseEntity *pEntity, CBasePlayer *pBuilder, float &flNearestPoint, Vector &vecNearestBuildPoint, bool bIgnoreChecks = false );
|
||||
bool FindBuildPointOnPlayer( CTFPlayer *pTFPlayer, CBasePlayer *pBuilder, float &flNearestPoint, Vector &vecNearestBuildPoint );
|
||||
bool VerifyCorner( const Vector &vBottomCenter, float xOffset, float yOffset );
|
||||
virtual float GetNearbyObjectCheckRadius( void ) { return 30.0; }
|
||||
bool UpdatePlacement( void );
|
||||
bool UpdateAttachmentPlacement( CBaseObject *pObjectOverride = NULL );
|
||||
bool IsValidPlacement( void ) const;
|
||||
|
||||
virtual bool IsPlacementPosValid( void );
|
||||
bool FindSnapToBuildPos( CBaseObject *pObjectOverride = NULL );
|
||||
|
||||
void ReattachChildren( void );
|
||||
|
||||
// I've finished building the specified object on the specified build point
|
||||
virtual int FindObjectOnBuildPoint( CBaseObject *pObject );
|
||||
|
||||
virtual bool StartBuilding( CBaseEntity *pPlayer );
|
||||
virtual void SetStartBuildingModel( void ) {}
|
||||
void BuildingThink( void );
|
||||
void SetControlPanelsActive( bool bState );
|
||||
virtual void FinishedBuilding( void );
|
||||
bool IsBuilding( void ) { return m_bBuilding; }
|
||||
bool IsPlacing( void ) { return m_bPlacing; }
|
||||
virtual bool IsUpgrading( void ) const { return false; }
|
||||
bool MustBeBuiltOnAttachmentPoint( void ) const;
|
||||
bool IsCarried( void ) const { return m_bCarried; }
|
||||
virtual void OnEndBeingCarried( CBaseEntity *pBuilder ) {}
|
||||
|
||||
// Returns information about the various control panels
|
||||
virtual void GetControlPanelInfo( int nPanelIndex, const char *&pPanelName );
|
||||
virtual void GetControlPanelClassName( int nPanelIndex, const char *&pPanelName );
|
||||
|
||||
// Client commands sent by clicking on various panels....
|
||||
// NOTE: pArg->Argv(0) == pCmd, pArg->Argv(1) == the first argument
|
||||
virtual bool ClientCommand( CTFPlayer *pSender, const CCommand &args );
|
||||
|
||||
// Damage
|
||||
void SetHealth( float flHealth );
|
||||
float GetHealth() { return m_flHealth; }
|
||||
virtual void TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr, CDmgAccumulator *pAccumulator );
|
||||
virtual int OnTakeDamage( const CTakeDamageInfo &info );
|
||||
bool PassDamageOntoChildren( const CTakeDamageInfo &info, float *flDamageLeftOver );
|
||||
virtual bool Construct( float flHealth );
|
||||
|
||||
void OnConstructionHit( CTFPlayer *pPlayer, CTFWrench *pWrench, Vector hitLoc );
|
||||
virtual float GetConstructionMultiplier( void );
|
||||
|
||||
// Destruction
|
||||
virtual void DetonateObject( void );
|
||||
virtual bool ShouldAutoRemove( void );
|
||||
virtual void Explode( void );
|
||||
virtual void Killed( const CTakeDamageInfo &info );
|
||||
virtual void DestroyObject( void ); // Silent cleanup
|
||||
virtual bool IsDying( void ) { return m_bDying; }
|
||||
void DestroyScreens( void );
|
||||
|
||||
// Data
|
||||
virtual Class_T Classify( void );
|
||||
virtual int GetType( void ) const;
|
||||
virtual CTFPlayer *GetBuilder( void ) const;
|
||||
CTFTeam *GetTFTeam( void ) { return (CTFTeam*)GetTeam(); };
|
||||
|
||||
// ID functions
|
||||
virtual bool IsAnUpgrade( void ) { return false; }
|
||||
virtual bool IsHostileUpgrade( void ) { return false; } // Attaches to enemy buildings
|
||||
|
||||
// Inputs
|
||||
void InputSetHealth( inputdata_t &inputdata );
|
||||
void InputAddHealth( inputdata_t &inputdata );
|
||||
void InputRemoveHealth( inputdata_t &inputdata );
|
||||
void InputSetSolidToPlayer( inputdata_t &inputdata );
|
||||
void InputSetBuilder( inputdata_t &inputdata );
|
||||
void InputShow( inputdata_t &inputdata );
|
||||
void InputHide( inputdata_t &inputdata );
|
||||
virtual void InputEnable( inputdata_t &inputdata );
|
||||
virtual void InputDisable( inputdata_t &inputdata );
|
||||
|
||||
// Wrench hits
|
||||
virtual bool InputWrenchHit( CTFPlayer *pPlayer, CTFWrench *pWrench, Vector hitLoc );
|
||||
virtual bool OnWrenchHit( CTFPlayer *pPlayer, CTFWrench *pWrench, Vector hitLoc );
|
||||
virtual bool CheckUpgradeOnHit( CTFPlayer *pPlayer );
|
||||
virtual bool Command_Repair( CTFPlayer *pActivator, float flRepairMod );
|
||||
virtual void DoWrenchHitEffect( Vector hitLoc, bool bRepairHit, bool bUpgradeHit );
|
||||
|
||||
virtual bool ShouldBeMiniBuilding( CTFPlayer* pPlayer );
|
||||
virtual void MakeMiniBuilding( CTFPlayer* pPlayer );
|
||||
virtual void MakeDisposableBuilding( CTFPlayer *pPlayer );
|
||||
|
||||
virtual void ChangeTeam( int iTeamNum ) OVERRIDE; // Assign this entity to a team.
|
||||
|
||||
// Handling object inactive
|
||||
virtual bool ShouldBeActive( void );
|
||||
|
||||
// Sappers
|
||||
CObjectSapper* GetSapper( void );
|
||||
bool HasSapper( void );
|
||||
bool IsPlasmaDisabled( void );
|
||||
void OnAddSapper( void );
|
||||
void OnRemoveSapper( void );
|
||||
|
||||
// Returns the object flags
|
||||
int GetObjectFlags() const { return m_fObjectFlags; }
|
||||
void SetObjectFlags( int flags ) { m_fObjectFlags = flags; }
|
||||
|
||||
virtual void OnGoActive( void );
|
||||
virtual void OnGoInactive( void );
|
||||
|
||||
// Disabling
|
||||
bool IsDisabled( void ) { return m_bDisabled || m_bCarried; }
|
||||
virtual void UpdateDisabledState( void );
|
||||
void SetDisabled( bool bDisabled );
|
||||
virtual void OnStartDisabled( void );
|
||||
virtual void OnEndDisabled( void );
|
||||
void SetPlasmaDisabled( float flDuration );
|
||||
|
||||
// Animation
|
||||
virtual void PlayStartupAnimation( void );
|
||||
|
||||
Activity GetActivity( ) const;
|
||||
void SetActivity( Activity act );
|
||||
void SetObjectSequence( int sequence );
|
||||
|
||||
// Object points
|
||||
void SpawnObjectPoints( void );
|
||||
|
||||
// Derive to customize an object's attached version
|
||||
virtual void SetupAttachedVersion( void ) { return; }
|
||||
|
||||
virtual int DrawDebugTextOverlays( void );
|
||||
|
||||
void RotateBuildAngles( void );
|
||||
|
||||
virtual bool ShouldPlayersAvoid( void );
|
||||
|
||||
void IncrementKills( void ) { m_iKills++; }
|
||||
int GetKills() { return m_iKills; }
|
||||
|
||||
void IncrementAssists( void ) { m_iAssists++; }
|
||||
int GetAssists() { return m_iAssists; }
|
||||
|
||||
void CreateObjectGibs( void );
|
||||
CTFAmmoPack* CreateAmmoPack( const char *pchModel, int nMetal );
|
||||
virtual void SetModel( const char *pModel );
|
||||
|
||||
const char *GetResponseRulesModifier( void );
|
||||
|
||||
// Map Placed
|
||||
virtual void Activate( void );
|
||||
virtual void InitializeMapPlacedObject( void );
|
||||
|
||||
bool CannotDie() const { return m_bCannotDie; }
|
||||
void SetCannotDie( bool bCannotDie ) { m_bCannotDie = bCannotDie; }
|
||||
|
||||
// Upgrading
|
||||
virtual bool CanBeUpgraded( CTFPlayer *pPlayer );
|
||||
virtual void StartUpgrading( void );
|
||||
virtual void FinishUpgrading( void );
|
||||
void UpgradeThink( void );
|
||||
virtual int GetUpgradeLevel( void ) const { return m_iUpgradeLevel; }
|
||||
int GetUpgradeMetal( void ) const { return m_iUpgradeMetal; }
|
||||
int GetHighestUpgradeLevel( void ) { return Min( (int)m_iHighestUpgradeLevel, GetMaxUpgradeLevel() ); }
|
||||
void SetHighestUpgradeLevel( int nLevel ) { m_iHighestUpgradeLevel = Min( nLevel, GetMaxUpgradeLevel() ); }
|
||||
void ApplyHealthUpgrade( void );
|
||||
virtual int GetBaseHealth( void ) = 0;
|
||||
void DoQuickBuild( bool bForceMax = false );
|
||||
bool ShouldQuickBuild( void );
|
||||
void DoReverseBuild( void );
|
||||
float GetReversesBuildingConstructionSpeed( void );
|
||||
virtual int GetMaxUpgradeLevel( void ) { return OBJ_MAX_UPGRADE_LEVEL; }
|
||||
|
||||
// Carrying
|
||||
virtual void MakeCarriedObject( CTFPlayer *pCarrier );
|
||||
virtual void DropCarriedObject( CTFPlayer* pCarrier );
|
||||
|
||||
void ForceQuickBuild() { m_bForceQuickBuild = true; }
|
||||
|
||||
virtual int GetMiniBuildingStartingHealth( void ) { return 100; }
|
||||
|
||||
virtual int GetMaxHealthForCurrentLevel( void );
|
||||
bool IsUsingReverseBuild( void ){ return ( GetReversesBuildingConstructionSpeed() != 0.0f ); }
|
||||
void ResetPlacement( void );
|
||||
|
||||
virtual bool TestHitboxes( const Ray_t &ray, unsigned int fContentsMask, trace_t& tr );
|
||||
|
||||
// IScorer interface
|
||||
virtual CBasePlayer *GetScorer( void ) { return ( CBasePlayer *)GetBuilder(); }
|
||||
virtual CBasePlayer *GetAssistant( void ) { return NULL; }
|
||||
|
||||
// Achievement tracking
|
||||
// Achievement data storage
|
||||
CAchievementData m_AchievementData;
|
||||
|
||||
// Client/Server shared build point code
|
||||
void CreateBuildPoints( void );
|
||||
void AddAndParseBuildPoint( int iAttachmentNumber, KeyValues *pkvBuildPoint );
|
||||
virtual int AddBuildPoint( int iAttachmentNum );
|
||||
virtual void AddValidObjectToBuildPoint( int iPoint, int iObjectType );
|
||||
virtual CBaseObject *GetBuildPointObject( int iPoint );
|
||||
bool IsBuiltOnAttachment( void ) { return (m_hBuiltOnEntity.Get() != NULL); }
|
||||
CBaseEntity *GetBuiltOnObject( void ){ return m_hBuiltOnEntity.Get(); }
|
||||
void AttachObjectToObject( CBaseEntity *pEntity, int iPoint, Vector &vecOrigin );
|
||||
virtual void DetachObjectFromObject( void );
|
||||
CBaseObject *GetParentObject( void );
|
||||
CBaseEntity *GetParentEntity( void );
|
||||
|
||||
virtual void SetObjectMode( int iVal ) { m_iObjectMode = iVal; }
|
||||
int GetObjectMode( void ) const { return m_iObjectMode; }
|
||||
|
||||
float GetConstructionStartTime( void ) { return m_flConstructionStartTime; }
|
||||
|
||||
// IHasBuildPoints
|
||||
virtual int GetNumBuildPoints( void ) const;
|
||||
virtual bool GetBuildPoint( int iPoint, Vector &vecOrigin, QAngle &vecAngles );
|
||||
virtual int GetBuildPointAttachmentIndex( int iPoint ) const;
|
||||
virtual bool CanBuildObjectOnBuildPoint( int iPoint, int iObjectType );
|
||||
virtual void SetObjectOnBuildPoint( int iPoint, CBaseObject *pObject );
|
||||
virtual float GetMaxSnapDistance( int iBuildPoint );
|
||||
virtual bool ShouldCheckForMovement( void ) { return true; }
|
||||
virtual int GetNumObjectsOnMe();
|
||||
virtual CBaseEntity *GetFirstFriendlyObjectOnMe( void );
|
||||
virtual CBaseObject *GetObjectOfTypeOnMe( int iObjectType );
|
||||
virtual void RemoveAllObjects( void );
|
||||
|
||||
// IServerNetworkable.
|
||||
virtual int UpdateTransmitState( void );
|
||||
virtual int ShouldTransmit( const CCheckTransmitInfo *pInfo );
|
||||
virtual void SetTransmit( CCheckTransmitInfo *pInfo, bool bAlways );
|
||||
|
||||
bool IsMiniBuilding( void ) const { return m_bMiniBuilding; }
|
||||
bool IsDisposableBuilding( void ) const { return m_bDisposableBuilding; }
|
||||
|
||||
virtual bool ShouldBlockNav() const OVERRIDE { return false; }
|
||||
|
||||
bool IsMapPlaced( void ){ return m_bWasMapPlaced; }
|
||||
|
||||
virtual int GetShieldLevel() { return SHIELD_NONE; }
|
||||
|
||||
virtual bool CanBeRepaired() const { return !IsDisposableBuilding(); }
|
||||
protected:
|
||||
|
||||
virtual bool CanBeUpgraded() const { return !( IsDisposableBuilding() || IsMiniBuilding() ); }
|
||||
|
||||
virtual int GetUpgradeMetalRequired();
|
||||
|
||||
// Show/hide vgui screens.
|
||||
bool ShowVGUIScreen( int panelIndex, bool bShow );
|
||||
|
||||
// Spawns the various control panels
|
||||
void SpawnControlPanels();
|
||||
|
||||
virtual void DetermineAnimation( void );
|
||||
virtual void DeterminePlaybackRate( void );
|
||||
|
||||
void UpdateDesiredBuildRotation( float flFrameTime );
|
||||
|
||||
bool CalculatePlacementPos( void );
|
||||
bool EstimateValidBuildPos( void );
|
||||
|
||||
private:
|
||||
// Purpose: Spawn any objects specified inside the mdl
|
||||
void SpawnEntityOnBuildPoint( const char *pEntityName, int iAttachmentNumber );
|
||||
|
||||
//bool TestPositionForPlayerBlock( Vector vecBuildOrigin, CBasePlayer *pPlayer );
|
||||
//void RecursiveTestBuildSpace( int iNode, bool *bNodeClear, bool *bNodeVisited );
|
||||
|
||||
protected:
|
||||
enum OBJSOLIDTYPE
|
||||
{
|
||||
SOLID_TO_PLAYER_USE_DEFAULT = 0,
|
||||
SOLID_TO_PLAYER_YES,
|
||||
SOLID_TO_PLAYER_NO,
|
||||
};
|
||||
|
||||
bool IsSolidToPlayers( void ) const;
|
||||
|
||||
// object flags....
|
||||
CNetworkVar( int, m_fObjectFlags );
|
||||
CNetworkHandle( CTFPlayer, m_hBuilder );
|
||||
|
||||
// Placement
|
||||
Vector m_vecBuildOrigin;
|
||||
Vector m_vecBuildCenterOfMass;
|
||||
CNetworkVector( m_vecBuildMaxs );
|
||||
CNetworkVector( m_vecBuildMins );
|
||||
CNetworkHandle( CBaseEntity, m_hBuiltOnEntity );
|
||||
int m_iBuiltOnPoint;
|
||||
|
||||
bool m_bDying;
|
||||
|
||||
// Outputs
|
||||
COutputEvent m_OnDestroyed;
|
||||
COutputEvent m_OnDamaged;
|
||||
COutputEvent m_OnRepaired;
|
||||
|
||||
COutputEvent m_OnBecomingDisabled;
|
||||
COutputEvent m_OnBecomingReenabled;
|
||||
|
||||
COutputFloat m_OnObjectHealthChanged;
|
||||
|
||||
// Control panel
|
||||
typedef CHandle<CVGuiScreen> ScreenHandle_t;
|
||||
CUtlVector<ScreenHandle_t> m_hScreens;
|
||||
|
||||
// Map placed objects
|
||||
CNetworkVar( bool, m_bWasMapPlaced );
|
||||
|
||||
float GetCarryDeployTime() { return m_flCarryDeployTime; }
|
||||
|
||||
public:
|
||||
// Upgrade Level ( 1, 2, 3 )
|
||||
CNetworkVar( int, m_iUpgradeLevel );
|
||||
CNetworkVar( int, m_iUpgradeMetal );
|
||||
CNetworkVar( int, m_iUpgradeMetalRequired );
|
||||
CNetworkVar( int, m_iHighestUpgradeLevel );
|
||||
int m_nDefaultUpgradeLevel;
|
||||
float m_flUpgradeCompleteTime; // Time when the upgrade animation will complete
|
||||
|
||||
private:
|
||||
// Make sure we pick up changes to these.
|
||||
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_iHealth );
|
||||
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_takedamage );
|
||||
|
||||
Activity m_Activity;
|
||||
|
||||
CNetworkVar( int, m_iObjectType );
|
||||
|
||||
|
||||
// True if players shouldn't do collision avoidance, but should just collide exactly with the object.
|
||||
OBJSOLIDTYPE m_SolidToPlayers;
|
||||
void SetSolidToPlayers( OBJSOLIDTYPE stp, bool force = false );
|
||||
|
||||
CNetworkVar( int , m_iObjectMode );
|
||||
|
||||
// Disabled
|
||||
CNetworkVar( bool, m_bDisabled );
|
||||
|
||||
// Building
|
||||
CNetworkVar( bool, m_bPlacing ); // True while the object's being placed
|
||||
CNetworkVar( bool, m_bBuilding ); // True while the object's still constructing itself
|
||||
|
||||
protected:
|
||||
float m_flConstructionTimeLeft; // Current time left in construction
|
||||
float m_flTotalConstructionTime; // Total construction time (the value of GetTotalTime() at the time construction
|
||||
// started, ie, incase you teleport out of a construction yard)
|
||||
float m_flConstructionStartTime;
|
||||
|
||||
protected:
|
||||
// Carried
|
||||
CNetworkVar( bool, m_bCarried );
|
||||
CNetworkVar( bool, m_bCarryDeploy );
|
||||
|
||||
CNetworkVar( bool, m_bMiniBuilding );
|
||||
CNetworkVar( bool, m_bDisposableBuilding );
|
||||
|
||||
float m_flPlasmaDisableTime;
|
||||
CNetworkVar( bool, m_bPlasmaDisable );
|
||||
|
||||
private:
|
||||
int m_iHealthOnPickup;
|
||||
float m_flCarryDeployTime;
|
||||
|
||||
CNetworkVar( float, m_flPercentageConstructed ); // Used to send to client
|
||||
float m_flHealth; // Health during construction. Needed a float due to small increases in health.
|
||||
|
||||
// Sapper on me
|
||||
CNetworkVar( bool, m_bHasSapper );
|
||||
|
||||
// Build points
|
||||
CUtlVector<BuildPoint_t> m_BuildPoints;
|
||||
|
||||
// Maps player ent index to repair expire time
|
||||
struct constructor_t
|
||||
{
|
||||
float flHitTime; // Time this constructor last hit me
|
||||
float flValue; // Speed value of this constructor. Defaults to 1.0, but some constructors are worth more.
|
||||
};
|
||||
CUtlMap<int, constructor_t> m_ConstructorList;
|
||||
|
||||
// Result of last placement test
|
||||
bool m_bPlacementOK; // last placement state
|
||||
|
||||
CNetworkVar( int, m_iKills );
|
||||
CNetworkVar( int, m_iAssists );
|
||||
|
||||
CNetworkVar( int, m_iDesiredBuildRotations ); // Number of times we've rotated, used to calc final rotation
|
||||
float m_flCurrentBuildRotation;
|
||||
|
||||
// Gibs.
|
||||
CUtlVector<breakmodel_t> m_aGibs;
|
||||
|
||||
CNetworkVar( bool, m_bServerOverridePlacement );
|
||||
|
||||
// for ACHIEVEMENT_TF_ENGINEER_TANK_DAMAGE
|
||||
int m_iLifetimeDamage;
|
||||
|
||||
bool m_bCannotDie;
|
||||
bool m_bQuickBuild;
|
||||
|
||||
// used when calculating the placement position
|
||||
Vector m_vecBuildForward;
|
||||
float m_flBuildDistance;
|
||||
|
||||
bool m_bForceQuickBuild;
|
||||
};
|
||||
|
||||
extern short g_sModelIndexFireball; // holds the index for the fireball
|
||||
|
||||
#endif // TF_OBJ_H
|
||||
Reference in New Issue
Block a user