Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Simple model entity that randomly moves and changes direction
// when activated.
//
//=============================================================================//
#include "cbase.h"
class CMyModelEntity : public CBaseAnimating { public: DECLARE_CLASS( CMyModelEntity, CBaseAnimating ); DECLARE_DATADESC();
void Spawn( void ); void Precache( void );
void MoveThink( void );
// Input function
void InputToggle( inputdata_t &inputData );
private:
bool m_bActive; float m_flNextChangeTime; };
LINK_ENTITY_TO_CLASS( my_model_entity, CMyModelEntity );
// Start of our data description for the class
BEGIN_DATADESC( CMyModelEntity ) // Save/restore our active state
DEFINE_FIELD( m_bActive, FIELD_BOOLEAN ), DEFINE_FIELD( m_flNextChangeTime, FIELD_TIME ),
// Links our input name from Hammer to our input member function
DEFINE_INPUTFUNC( FIELD_VOID, "Toggle", InputToggle ),
// Declare our think function
DEFINE_THINKFUNC( MoveThink ),
END_DATADESC()
// Name of our entity's model
#define ENTITY_MODEL "models/gibs/airboat_broken_engine.mdl"
//-----------------------------------------------------------------------------
// Purpose: Precache assets used by the entity
//-----------------------------------------------------------------------------
void CMyModelEntity::Precache( void ) { PrecacheModel( ENTITY_MODEL ); }
//-----------------------------------------------------------------------------
// Purpose: Sets up the entity's initial state
//-----------------------------------------------------------------------------
void CMyModelEntity::Spawn( void ) { Precache();
SetModel( ENTITY_MODEL ); SetSolid( SOLID_BBOX ); UTIL_SetSize( this, -Vector(20,20,20), Vector(20,20,20) );
m_bActive = false; }
//-----------------------------------------------------------------------------
// Purpose: Think function to randomly move the entity
//-----------------------------------------------------------------------------
void CMyModelEntity::MoveThink( void ) { // See if we should change direction again
if ( m_flNextChangeTime < gpGlobals->curtime ) { // Randomly take a new direction and speed
Vector vecNewVelocity = RandomVector( -64.0f, 64.0f ); SetAbsVelocity( vecNewVelocity );
// Randomly change it again within one to three seconds
m_flNextChangeTime = gpGlobals->curtime + random->RandomFloat( 1.0f, 3.0f ); }
// Snap our facing to where we're heading
Vector velFacing = GetAbsVelocity(); QAngle angFacing; VectorAngles( velFacing, angFacing ); SetAbsAngles( angFacing );
// Think every 20Hz
SetNextThink( gpGlobals->curtime + 0.05f ); }
//-----------------------------------------------------------------------------
// Purpose: Toggle the movement of the entity
//-----------------------------------------------------------------------------
void CMyModelEntity::InputToggle( inputdata_t &inputData ) { // Toggle our active state
if ( !m_bActive ) { // Start thinking
SetThink( &CMyModelEntity::MoveThink ); SetNextThink( gpGlobals->curtime + 0.05f ); // Start flying
SetMoveType( MOVETYPE_FLY );
// Set our next time for changing our speed and direction
m_flNextChangeTime = gpGlobals->curtime; m_bActive = true; } else { // Stop thinking
SetThink( NULL ); // Stop moving
SetAbsVelocity( vec3_origin ); SetMoveType( MOVETYPE_NONE ); m_bActive = false; } }
|