diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/server/subs.cpp | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/server/subs.cpp')
| -rw-r--r-- | mp/src/game/server/subs.cpp | 698 |
1 files changed, 349 insertions, 349 deletions
diff --git a/mp/src/game/server/subs.cpp b/mp/src/game/server/subs.cpp index 856fb851..b2bf003f 100644 --- a/mp/src/game/server/subs.cpp +++ b/mp/src/game/server/subs.cpp @@ -1,349 +1,349 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose: Frequently used global functions.
-//
-// $NoKeywords: $
-//=============================================================================//
-
-
-#include "cbase.h"
-#include "doors.h"
-#include "entitylist.h"
-#include "globals.h"
-
-// memdbgon must be the last include file in a .cpp file!!!
-#include "tier0/memdbgon.h"
-
-// Landmark class
-void CPointEntity::Spawn( void )
-{
- SetSolid( SOLID_NONE );
-// UTIL_SetSize(this, vec3_origin, vec3_origin);
-}
-
-
-class CNullEntity : public CBaseEntity
-{
-public:
- DECLARE_CLASS( CNullEntity, CBaseEntity );
-
- void Spawn( void );
-};
-
-
-// Null Entity, remove on startup
-void CNullEntity::Spawn( void )
-{
- UTIL_Remove( this );
-}
-LINK_ENTITY_TO_CLASS(info_null,CNullEntity);
-
-class CBaseDMStart : public CPointEntity
-{
-public:
- DECLARE_CLASS( CBaseDMStart, CPointEntity );
-
- bool IsTriggered( CBaseEntity *pEntity );
-
- DECLARE_DATADESC();
-
- string_t m_Master;
-
-private:
-};
-
-BEGIN_DATADESC( CBaseDMStart )
-
- DEFINE_KEYFIELD( m_Master, FIELD_STRING, "master" ),
-
-END_DATADESC()
-
-
-// These are the new entry points to entities.
-LINK_ENTITY_TO_CLASS(info_player_deathmatch,CBaseDMStart);
-LINK_ENTITY_TO_CLASS(info_player_start,CPointEntity);
-LINK_ENTITY_TO_CLASS(info_landmark,CPointEntity);
-
-bool CBaseDMStart::IsTriggered( CBaseEntity *pEntity )
-{
- bool master = UTIL_IsMasterTriggered( m_Master, pEntity );
-
- return master;
-}
-
-
-// Convenient way to delay removing oneself
-void CBaseEntity::SUB_Remove( void )
-{
- if (m_iHealth > 0)
- {
- // this situation can screw up NPCs who can't tell their entity pointers are invalid.
- m_iHealth = 0;
- DevWarning( 2, "SUB_Remove called on entity with health > 0\n");
- }
-
- UTIL_Remove( this );
-}
-
-
-// Convenient way to explicitly do nothing (passed to functions that require a method)
-void CBaseEntity::SUB_DoNothing( void )
-{
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Finds all active entities with the given targetname and calls their
-// 'Use' function.
-// Input : targetName - Target name to search for.
-// pActivator -
-// pCaller -
-// useType -
-// value -
-//-----------------------------------------------------------------------------
-void FireTargets( const char *targetName, CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value )
-{
- CBaseEntity *pTarget = NULL;
- if ( !targetName || !targetName[0] )
- return;
-
- DevMsg( 2, "Firing: (%s)\n", targetName );
-
- for (;;)
- {
- CBaseEntity *pSearchingEntity = pActivator;
- pTarget = gEntList.FindEntityByName( pTarget, targetName, pSearchingEntity, pActivator, pCaller );
- if ( !pTarget )
- break;
-
- if (!pTarget->IsMarkedForDeletion() ) // Don't use dying ents
- {
- DevMsg( 2, "[%03d] Found: %s, firing (%s)\n", gpGlobals->tickcount%1000, pTarget->GetDebugName(), targetName );
- pTarget->Use( pActivator, pCaller, useType, value );
- }
- }
-}
-
-enum togglemovetypes_t
-{
- MOVE_TOGGLE_NONE = 0,
- MOVE_TOGGLE_LINEAR = 1,
- MOVE_TOGGLE_ANGULAR = 2,
-};
-
-// Global Savedata for Toggle
-BEGIN_DATADESC( CBaseToggle )
-
- DEFINE_FIELD( m_toggle_state, FIELD_INTEGER ),
- DEFINE_FIELD( m_flMoveDistance, FIELD_FLOAT ),
- DEFINE_FIELD( m_flWait, FIELD_FLOAT ),
- DEFINE_FIELD( m_flLip, FIELD_FLOAT ),
- DEFINE_FIELD( m_vecPosition1, FIELD_POSITION_VECTOR ),
- DEFINE_FIELD( m_vecPosition2, FIELD_POSITION_VECTOR ),
- DEFINE_FIELD( m_vecMoveAng, FIELD_VECTOR ), // UNDONE: Position could go through transition, but also angle?
- DEFINE_FIELD( m_vecAngle1, FIELD_VECTOR ), // UNDONE: Position could go through transition, but also angle?
- DEFINE_FIELD( m_vecAngle2, FIELD_VECTOR ), // UNDONE: Position could go through transition, but also angle?
- DEFINE_FIELD( m_flHeight, FIELD_FLOAT ),
- DEFINE_FIELD( m_hActivator, FIELD_EHANDLE ),
- DEFINE_FIELD( m_vecFinalDest, FIELD_POSITION_VECTOR ),
- DEFINE_FIELD( m_vecFinalAngle, FIELD_VECTOR ),
- DEFINE_FIELD( m_sMaster, FIELD_STRING),
- DEFINE_FIELD( m_movementType, FIELD_INTEGER ), // Linear or angular movement? (togglemovetypes_t)
-
-END_DATADESC()
-
-
-CBaseToggle::CBaseToggle()
-{
-#ifdef _DEBUG
- // necessary since in debug, we initialize vectors to NAN for debugging
- m_vecPosition1.Init();
- m_vecPosition2.Init();
- m_vecAngle1.Init();
- m_vecAngle2.Init();
- m_vecFinalDest.Init();
- m_vecFinalAngle.Init();
-#endif
-}
-
-bool CBaseToggle::KeyValue( const char *szKeyName, const char *szValue )
-{
- if (FStrEq(szKeyName, "lip"))
- {
- m_flLip = atof(szValue);
- }
- else if (FStrEq(szKeyName, "wait"))
- {
- m_flWait = atof(szValue);
- }
- else if (FStrEq(szKeyName, "master"))
- {
- m_sMaster = AllocPooledString(szValue);
- }
- else if (FStrEq(szKeyName, "distance"))
- {
- m_flMoveDistance = atof(szValue);
- }
- else
- return BaseClass::KeyValue( szKeyName, szValue );
-
- return true;
-}
-
-
-//-----------------------------------------------------------------------------
-// Purpose: Calculate m_vecVelocity and m_flNextThink to reach vecDest from
-// GetOrigin() traveling at flSpeed.
-// Input : Vector vecDest -
-// flSpeed -
-//-----------------------------------------------------------------------------
-void CBaseToggle::LinearMove( const Vector &vecDest, float flSpeed )
-{
- ASSERTSZ(flSpeed != 0, "LinearMove: no speed is defined!");
-
- m_vecFinalDest = vecDest;
-
- m_movementType = MOVE_TOGGLE_LINEAR;
- // Already there?
- if (vecDest == GetLocalOrigin())
- {
- MoveDone();
- return;
- }
-
- // set destdelta to the vector needed to move
- Vector vecDestDelta = vecDest - GetLocalOrigin();
-
- // divide vector length by speed to get time to reach dest
- float flTravelTime = vecDestDelta.Length() / flSpeed;
-
- // set m_flNextThink to trigger a call to LinearMoveDone when dest is reached
- SetMoveDoneTime( flTravelTime );
-
- // scale the destdelta vector by the time spent traveling to get velocity
- SetLocalVelocity( vecDestDelta / flTravelTime );
-}
-
-
-void CBaseToggle::MoveDone( void )
-{
- switch ( m_movementType )
- {
- case MOVE_TOGGLE_LINEAR:
- LinearMoveDone();
- break;
- case MOVE_TOGGLE_ANGULAR:
- AngularMoveDone();
- break;
- }
- m_movementType = MOVE_TOGGLE_NONE;
- BaseClass::MoveDone();
-}
-//-----------------------------------------------------------------------------
-// Purpose: After moving, set origin to exact final destination, call "move done" function.
-//-----------------------------------------------------------------------------
-void CBaseToggle::LinearMoveDone( void )
-{
- UTIL_SetOrigin( this, m_vecFinalDest);
- SetAbsVelocity( vec3_origin );
- SetMoveDoneTime( -1 );
-}
-
-
-// DVS TODO: obselete, remove?
-bool CBaseToggle::IsLockedByMaster( void )
-{
- if (m_sMaster != NULL_STRING && !UTIL_IsMasterTriggered(m_sMaster, m_hActivator))
- return true;
- else
- return false;
-}
-
-
-//-----------------------------------------------------------------------------
-// Purpose: Calculate m_vecVelocity and m_flNextThink to reach vecDest from
-// GetLocalOrigin() traveling at flSpeed. Just like LinearMove, but rotational.
-// Input : vecDestAngle -
-// flSpeed -
-//-----------------------------------------------------------------------------
-void CBaseToggle::AngularMove( const QAngle &vecDestAngle, float flSpeed )
-{
- ASSERTSZ(flSpeed != 0, "AngularMove: no speed is defined!");
-
- m_vecFinalAngle = vecDestAngle;
-
- m_movementType = MOVE_TOGGLE_ANGULAR;
- // Already there?
- if (vecDestAngle == GetLocalAngles())
- {
- MoveDone();
- return;
- }
-
- // set destdelta to the vector needed to move
- QAngle vecDestDelta = vecDestAngle - GetLocalAngles();
-
- // divide by speed to get time to reach dest
- float flTravelTime = vecDestDelta.Length() / flSpeed;
-
- const float MinTravelTime = 0.01f;
- if ( flTravelTime < MinTravelTime )
- {
- // If we only travel for a short time, we can fail WillSimulateGamePhysics()
- flTravelTime = MinTravelTime;
- flSpeed = vecDestDelta.Length() / flTravelTime;
- }
-
- // set m_flNextThink to trigger a call to AngularMoveDone when dest is reached
- SetMoveDoneTime( flTravelTime );
-
- // scale the destdelta vector by the time spent traveling to get velocity
- SetLocalAngularVelocity( vecDestDelta * (1.0 / flTravelTime) );
-}
-
-
-//-----------------------------------------------------------------------------
-// Purpose: After rotating, set angle to exact final angle, call "move done" function.
-//-----------------------------------------------------------------------------
-void CBaseToggle::AngularMoveDone( void )
-{
- SetLocalAngles( m_vecFinalAngle );
- SetLocalAngularVelocity( vec3_angle );
- SetMoveDoneTime( -1 );
-}
-
-
-float CBaseToggle::AxisValue( int flags, const QAngle &angles )
-{
- if ( FBitSet(flags, SF_DOOR_ROTATE_ROLL) )
- return angles.z;
- if ( FBitSet(flags, SF_DOOR_ROTATE_PITCH) )
- return angles.x;
-
- return angles.y;
-}
-
-
-void CBaseToggle::AxisDir( void )
-{
- if ( m_spawnflags & SF_DOOR_ROTATE_ROLL )
- m_vecMoveAng = QAngle( 0, 0, 1 ); // angles are roll
- else if ( m_spawnflags & SF_DOOR_ROTATE_PITCH )
- m_vecMoveAng = QAngle( 1, 0, 0 ); // angles are pitch
- else
- m_vecMoveAng = QAngle( 0, 1, 0 ); // angles are yaw
-}
-
-
-float CBaseToggle::AxisDelta( int flags, const QAngle &angle1, const QAngle &angle2 )
-{
- // UNDONE: Use AngleDistance() here?
- if ( FBitSet (flags, SF_DOOR_ROTATE_ROLL) )
- return angle1.z - angle2.z;
-
- if ( FBitSet (flags, SF_DOOR_ROTATE_PITCH) )
- return angle1.x - angle2.x;
-
- return angle1.y - angle2.y;
-}
-
-
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Frequently used global functions. +// +// $NoKeywords: $ +//=============================================================================// + + +#include "cbase.h" +#include "doors.h" +#include "entitylist.h" +#include "globals.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +// Landmark class +void CPointEntity::Spawn( void ) +{ + SetSolid( SOLID_NONE ); +// UTIL_SetSize(this, vec3_origin, vec3_origin); +} + + +class CNullEntity : public CBaseEntity +{ +public: + DECLARE_CLASS( CNullEntity, CBaseEntity ); + + void Spawn( void ); +}; + + +// Null Entity, remove on startup +void CNullEntity::Spawn( void ) +{ + UTIL_Remove( this ); +} +LINK_ENTITY_TO_CLASS(info_null,CNullEntity); + +class CBaseDMStart : public CPointEntity +{ +public: + DECLARE_CLASS( CBaseDMStart, CPointEntity ); + + bool IsTriggered( CBaseEntity *pEntity ); + + DECLARE_DATADESC(); + + string_t m_Master; + +private: +}; + +BEGIN_DATADESC( CBaseDMStart ) + + DEFINE_KEYFIELD( m_Master, FIELD_STRING, "master" ), + +END_DATADESC() + + +// These are the new entry points to entities. +LINK_ENTITY_TO_CLASS(info_player_deathmatch,CBaseDMStart); +LINK_ENTITY_TO_CLASS(info_player_start,CPointEntity); +LINK_ENTITY_TO_CLASS(info_landmark,CPointEntity); + +bool CBaseDMStart::IsTriggered( CBaseEntity *pEntity ) +{ + bool master = UTIL_IsMasterTriggered( m_Master, pEntity ); + + return master; +} + + +// Convenient way to delay removing oneself +void CBaseEntity::SUB_Remove( void ) +{ + if (m_iHealth > 0) + { + // this situation can screw up NPCs who can't tell their entity pointers are invalid. + m_iHealth = 0; + DevWarning( 2, "SUB_Remove called on entity with health > 0\n"); + } + + UTIL_Remove( this ); +} + + +// Convenient way to explicitly do nothing (passed to functions that require a method) +void CBaseEntity::SUB_DoNothing( void ) +{ +} + +//----------------------------------------------------------------------------- +// Purpose: Finds all active entities with the given targetname and calls their +// 'Use' function. +// Input : targetName - Target name to search for. +// pActivator - +// pCaller - +// useType - +// value - +//----------------------------------------------------------------------------- +void FireTargets( const char *targetName, CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) +{ + CBaseEntity *pTarget = NULL; + if ( !targetName || !targetName[0] ) + return; + + DevMsg( 2, "Firing: (%s)\n", targetName ); + + for (;;) + { + CBaseEntity *pSearchingEntity = pActivator; + pTarget = gEntList.FindEntityByName( pTarget, targetName, pSearchingEntity, pActivator, pCaller ); + if ( !pTarget ) + break; + + if (!pTarget->IsMarkedForDeletion() ) // Don't use dying ents + { + DevMsg( 2, "[%03d] Found: %s, firing (%s)\n", gpGlobals->tickcount%1000, pTarget->GetDebugName(), targetName ); + pTarget->Use( pActivator, pCaller, useType, value ); + } + } +} + +enum togglemovetypes_t +{ + MOVE_TOGGLE_NONE = 0, + MOVE_TOGGLE_LINEAR = 1, + MOVE_TOGGLE_ANGULAR = 2, +}; + +// Global Savedata for Toggle +BEGIN_DATADESC( CBaseToggle ) + + DEFINE_FIELD( m_toggle_state, FIELD_INTEGER ), + DEFINE_FIELD( m_flMoveDistance, FIELD_FLOAT ), + DEFINE_FIELD( m_flWait, FIELD_FLOAT ), + DEFINE_FIELD( m_flLip, FIELD_FLOAT ), + DEFINE_FIELD( m_vecPosition1, FIELD_POSITION_VECTOR ), + DEFINE_FIELD( m_vecPosition2, FIELD_POSITION_VECTOR ), + DEFINE_FIELD( m_vecMoveAng, FIELD_VECTOR ), // UNDONE: Position could go through transition, but also angle? + DEFINE_FIELD( m_vecAngle1, FIELD_VECTOR ), // UNDONE: Position could go through transition, but also angle? + DEFINE_FIELD( m_vecAngle2, FIELD_VECTOR ), // UNDONE: Position could go through transition, but also angle? + DEFINE_FIELD( m_flHeight, FIELD_FLOAT ), + DEFINE_FIELD( m_hActivator, FIELD_EHANDLE ), + DEFINE_FIELD( m_vecFinalDest, FIELD_POSITION_VECTOR ), + DEFINE_FIELD( m_vecFinalAngle, FIELD_VECTOR ), + DEFINE_FIELD( m_sMaster, FIELD_STRING), + DEFINE_FIELD( m_movementType, FIELD_INTEGER ), // Linear or angular movement? (togglemovetypes_t) + +END_DATADESC() + + +CBaseToggle::CBaseToggle() +{ +#ifdef _DEBUG + // necessary since in debug, we initialize vectors to NAN for debugging + m_vecPosition1.Init(); + m_vecPosition2.Init(); + m_vecAngle1.Init(); + m_vecAngle2.Init(); + m_vecFinalDest.Init(); + m_vecFinalAngle.Init(); +#endif +} + +bool CBaseToggle::KeyValue( const char *szKeyName, const char *szValue ) +{ + if (FStrEq(szKeyName, "lip")) + { + m_flLip = atof(szValue); + } + else if (FStrEq(szKeyName, "wait")) + { + m_flWait = atof(szValue); + } + else if (FStrEq(szKeyName, "master")) + { + m_sMaster = AllocPooledString(szValue); + } + else if (FStrEq(szKeyName, "distance")) + { + m_flMoveDistance = atof(szValue); + } + else + return BaseClass::KeyValue( szKeyName, szValue ); + + return true; +} + + +//----------------------------------------------------------------------------- +// Purpose: Calculate m_vecVelocity and m_flNextThink to reach vecDest from +// GetOrigin() traveling at flSpeed. +// Input : Vector vecDest - +// flSpeed - +//----------------------------------------------------------------------------- +void CBaseToggle::LinearMove( const Vector &vecDest, float flSpeed ) +{ + ASSERTSZ(flSpeed != 0, "LinearMove: no speed is defined!"); + + m_vecFinalDest = vecDest; + + m_movementType = MOVE_TOGGLE_LINEAR; + // Already there? + if (vecDest == GetLocalOrigin()) + { + MoveDone(); + return; + } + + // set destdelta to the vector needed to move + Vector vecDestDelta = vecDest - GetLocalOrigin(); + + // divide vector length by speed to get time to reach dest + float flTravelTime = vecDestDelta.Length() / flSpeed; + + // set m_flNextThink to trigger a call to LinearMoveDone when dest is reached + SetMoveDoneTime( flTravelTime ); + + // scale the destdelta vector by the time spent traveling to get velocity + SetLocalVelocity( vecDestDelta / flTravelTime ); +} + + +void CBaseToggle::MoveDone( void ) +{ + switch ( m_movementType ) + { + case MOVE_TOGGLE_LINEAR: + LinearMoveDone(); + break; + case MOVE_TOGGLE_ANGULAR: + AngularMoveDone(); + break; + } + m_movementType = MOVE_TOGGLE_NONE; + BaseClass::MoveDone(); +} +//----------------------------------------------------------------------------- +// Purpose: After moving, set origin to exact final destination, call "move done" function. +//----------------------------------------------------------------------------- +void CBaseToggle::LinearMoveDone( void ) +{ + UTIL_SetOrigin( this, m_vecFinalDest); + SetAbsVelocity( vec3_origin ); + SetMoveDoneTime( -1 ); +} + + +// DVS TODO: obselete, remove? +bool CBaseToggle::IsLockedByMaster( void ) +{ + if (m_sMaster != NULL_STRING && !UTIL_IsMasterTriggered(m_sMaster, m_hActivator)) + return true; + else + return false; +} + + +//----------------------------------------------------------------------------- +// Purpose: Calculate m_vecVelocity and m_flNextThink to reach vecDest from +// GetLocalOrigin() traveling at flSpeed. Just like LinearMove, but rotational. +// Input : vecDestAngle - +// flSpeed - +//----------------------------------------------------------------------------- +void CBaseToggle::AngularMove( const QAngle &vecDestAngle, float flSpeed ) +{ + ASSERTSZ(flSpeed != 0, "AngularMove: no speed is defined!"); + + m_vecFinalAngle = vecDestAngle; + + m_movementType = MOVE_TOGGLE_ANGULAR; + // Already there? + if (vecDestAngle == GetLocalAngles()) + { + MoveDone(); + return; + } + + // set destdelta to the vector needed to move + QAngle vecDestDelta = vecDestAngle - GetLocalAngles(); + + // divide by speed to get time to reach dest + float flTravelTime = vecDestDelta.Length() / flSpeed; + + const float MinTravelTime = 0.01f; + if ( flTravelTime < MinTravelTime ) + { + // If we only travel for a short time, we can fail WillSimulateGamePhysics() + flTravelTime = MinTravelTime; + flSpeed = vecDestDelta.Length() / flTravelTime; + } + + // set m_flNextThink to trigger a call to AngularMoveDone when dest is reached + SetMoveDoneTime( flTravelTime ); + + // scale the destdelta vector by the time spent traveling to get velocity + SetLocalAngularVelocity( vecDestDelta * (1.0 / flTravelTime) ); +} + + +//----------------------------------------------------------------------------- +// Purpose: After rotating, set angle to exact final angle, call "move done" function. +//----------------------------------------------------------------------------- +void CBaseToggle::AngularMoveDone( void ) +{ + SetLocalAngles( m_vecFinalAngle ); + SetLocalAngularVelocity( vec3_angle ); + SetMoveDoneTime( -1 ); +} + + +float CBaseToggle::AxisValue( int flags, const QAngle &angles ) +{ + if ( FBitSet(flags, SF_DOOR_ROTATE_ROLL) ) + return angles.z; + if ( FBitSet(flags, SF_DOOR_ROTATE_PITCH) ) + return angles.x; + + return angles.y; +} + + +void CBaseToggle::AxisDir( void ) +{ + if ( m_spawnflags & SF_DOOR_ROTATE_ROLL ) + m_vecMoveAng = QAngle( 0, 0, 1 ); // angles are roll + else if ( m_spawnflags & SF_DOOR_ROTATE_PITCH ) + m_vecMoveAng = QAngle( 1, 0, 0 ); // angles are pitch + else + m_vecMoveAng = QAngle( 0, 1, 0 ); // angles are yaw +} + + +float CBaseToggle::AxisDelta( int flags, const QAngle &angle1, const QAngle &angle2 ) +{ + // UNDONE: Use AngleDistance() here? + if ( FBitSet (flags, SF_DOOR_ROTATE_ROLL) ) + return angle1.z - angle2.z; + + if ( FBitSet (flags, SF_DOOR_ROTATE_PITCH) ) + return angle1.x - angle2.x; + + return angle1.y - angle2.y; +} + + |