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.
115 lines
2.9 KiB
115 lines
2.9 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
#ifndef TF_WALKER_BASE_H |
|
#define TF_WALKER_BASE_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
|
|
#include "basetfvehicle.h" |
|
|
|
|
|
class CWalkerBase : public CBaseTFVehicle |
|
{ |
|
public: |
|
DECLARE_CLASS( CWalkerBase, CBaseTFVehicle ); |
|
DECLARE_SERVERCLASS(); |
|
|
|
|
|
public: |
|
CWalkerBase(); |
|
|
|
// Derived classes must call this from inside their Spawn() function. Their Spawn() function |
|
// should NOT chain down to CWalkerBase. |
|
void SpawnWalker( |
|
const char *pModelName, |
|
int objectType, |
|
const Vector &vPlacementMins, |
|
const Vector &vPlacementMaxs, |
|
int iHealth, |
|
int nMaxPassengers, |
|
float flPlaybackSpeedBoost // Strider likes the animations played at 2x speed. |
|
); |
|
|
|
virtual void AdjustInitialBuildAngles(); |
|
|
|
// When it's in walk mode, it'll set a walk animation, process user input, set pose parameters, |
|
// and move the entity around as it walks. |
|
void EnableWalkMode( bool bEnable ); |
|
|
|
// This is called each frame to do thinking. Derived classes can hook this to do their own stuff each frame. |
|
virtual void WalkerThink(); |
|
|
|
// Returns the new local origin to set based on the walker's movement. |
|
// This usually just asks for the movement from the animation, but some walkers may |
|
// want to generate the motion in code. |
|
virtual Vector GetWalkerLocalMovement(); |
|
|
|
// See notes on m_vSteerVelocity below. |
|
const Vector2D& GetSteerVelocity() const; |
|
|
|
void WalkerActivate( void ); |
|
|
|
// See m_flVelocityDecayRate. |
|
void SetVelocityDecayRate( float flDecayRate ); |
|
|
|
// Walkers think 10x/second. |
|
float GetTimeDelta() const; |
|
|
|
// CBaseEntity. |
|
public: |
|
virtual void Spawn(); |
|
virtual void Activate(); |
|
|
|
// IVehicle overrides. |
|
public: |
|
virtual void SetupMove( CBasePlayer *player, CUserCmd *ucmd, IMoveHelper *pHelper, CMoveData *move ); |
|
|
|
|
|
// IServerVehicle overrides. |
|
public: |
|
virtual bool IsPassengerVisible( int nRole ); |
|
|
|
|
|
// CBaseObject overrides. |
|
public: |
|
virtual bool StartBuilding( CBaseEntity *pBuilder ); |
|
|
|
|
|
public: |
|
|
|
// This is a hack to prevent the strider from playing a lot of footstep sounds, until we figure out 9-way anim events |
|
float m_flDontMakeSoundsUntil; |
|
|
|
// Last usercmd buttons. |
|
int m_LastButtons; |
|
QAngle m_vLastCmdViewAngles; |
|
|
|
|
|
private: |
|
|
|
// This is the (local) velocity that the player's controls are saying the player wants to move in. |
|
// Note that it is completely virtual - the speed that the walker moves at is gotten from the animations ground speed. |
|
// It maps this velocity a 9-way blend for movement. +X = forward, +Y = left. |
|
Vector2D m_vSteerVelocity; |
|
|
|
// Which pose parameters we use to make this guy walk around on X and Y. |
|
int m_iMovePoseParamX; |
|
int m_iMovePoseParamY; |
|
|
|
float m_flPlaybackSpeedBoost; |
|
|
|
bool m_bWalkMode; |
|
|
|
// This is a magic number that can be tweaked to make the velocity decay faster. |
|
// Default: 80 |
|
float m_flVelocityDecayRate; |
|
}; |
|
|
|
|
|
#endif // TF_WALKER_BASE_H
|
|
|