Authoring a Model Entity/Code: Difference between revisions
Jump to navigation
Jump to search
TomEdwards (talk | contribs) (colours) |
TomEdwards (talk | contribs) m (doh) |
||
Line 5: | Line 5: | ||
// | // | ||
//=============================================================================</span> | //=============================================================================</span> | ||
<span style="color:blue;">#include</span> <span style="color:brown;">"cbase.h"</span> | <span style="color:blue;">#include</span> <span style="color:brown;">"cbase.h"</span> | ||
Line 27: | Line 27: | ||
<span style="color:blue;">float</span> m_flNextChangeTime; | <span style="color:blue;">float</span> m_flNextChangeTime; | ||
}; | }; | ||
LINK_ENTITY_TO_CLASS( my_model_entity, CMyModelEntity ); | LINK_ENTITY_TO_CLASS( my_model_entity, CMyModelEntity ); | ||
Line 44: | Line 44: | ||
END_DATADESC() | END_DATADESC() | ||
<span style="color:green;">// Name of our entity's model</span> | <span style="color:green;">// Name of our entity's model</span> | ||
<span style="color:blue;">#define</span> ENTITY_MODEL <span style="color:brown;">"models/gibs/airboat_broken_engine.mdl"</span> | <span style="color:blue;">#define</span> ENTITY_MODEL <span style="color:brown;">"models/gibs/airboat_broken_engine.mdl"</span> | ||
<span style="color:green;">//----------------------------------------------------------------------------- | <span style="color:green;">//----------------------------------------------------------------------------- | ||
// Purpose: Precache assets used by the entity | // Purpose: Precache assets used by the entity | ||
Line 55: | Line 55: | ||
PrecacheModel( ENTITY_MODEL ); | PrecacheModel( ENTITY_MODEL ); | ||
} | } | ||
<span style="color:green;">//----------------------------------------------------------------------------- | <span style="color:green;">//----------------------------------------------------------------------------- | ||
// Purpose: Sets up the entity's initial state | // Purpose: Sets up the entity's initial state | ||
Line 69: | Line 69: | ||
m_bActive = <span style="color:blue;">false</span>; | m_bActive = <span style="color:blue;">false</span>; | ||
} | } | ||
<span style="color:green;">//----------------------------------------------------------------------------- | <span style="color:green;">//----------------------------------------------------------------------------- | ||
// Purpose: Think function to randomly move the entity | // Purpose: Think function to randomly move the entity | ||
Line 95: | Line 95: | ||
SetNextThink( gpGlobals->curtime + 0.05f ); | SetNextThink( gpGlobals->curtime + 0.05f ); | ||
} | } | ||
<span style="color:green;">//----------------------------------------------------------------------------- | <span style="color:green;">//----------------------------------------------------------------------------- | ||
// Purpose: Toggle the movement of the entity | // Purpose: Toggle the movement of the entity |
Revision as of 10:10, 24 February 2008
//===== Copyright © 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; } }
See also
Authoring a Model Entity