mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-21 04:56:01 +08:00
Added most recent version of unmodified HL2 SDK for Orange Box engine
This commit is contained in:
128
game/server/sdk/sdk_modelentity.cpp
Normal file
128
game/server/sdk/sdk_modelentity.cpp
Normal file
@ -0,0 +1,128 @@
|
||||
//========= Copyright <20> 1996-2005, 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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user