//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_BaseEntity::PhysicsCustom() { PhysicsCheckWater(); // regular thinking if ( !PhysicsRunThink() ) return; // Moving upward, off the ground, or resting on something that isn't ground if ( m_vecVelocity[2] > 0 || !GetGroundEntity() || !GetGroundEntity()->IsStandable() ) { SetGroundEntity( NULL ); } // NOTE: The entity must set the position, angles, velocity in its custom movement Vector vecNewPosition = GetAbsOrigin(); if ( vecNewPosition == vec3_origin ) { // Shouldn't be at world origin Assert( 0 ); } Vector vecNewVelocity = m_vecVelocity; QAngle angNewAngles = GetAbsAngles(); QAngle angNewAngVelocity = m_vecAngVelocity; PerformCustomPhysics( &vecNewPosition, &vecNewVelocity, &angNewAngles, &angNewAngVelocity ); // Store off all of the new state information... m_vecVelocity = vecNewVelocity; SetAbsAngles( angNewAngles ); m_vecAngVelocity = angNewAngVelocity; Vector move; VectorSubtract( vecNewPosition, GetAbsOrigin(), move ); // move origin trace_t trace; PhysicsPushEntity( move, &trace ); PhysicsCheckVelocity(); if (trace.allsolid) { // entity is trapped in another solid // UNDONE: does this entity needs to be removed? VectorCopy (vec3_origin, m_vecVelocity); VectorCopy (vec3_angle, m_vecAngVelocity); return; } #if !defined( CLIENT_DLL ) if (pev->free) return; #endif // check for in water PhysicsCheckWaterTransition(); }
void CUnitBase::PhysicsSimulate( void ) { #ifdef CLIENT_DLL if (ShouldPredict()) { m_nSimulationTick = gpGlobals->tickcount; return; } #else //NDebugOverlay::Box( GetAbsOrigin(), Vector(-16, -16, -16), Vector(16, 24, 16), 0, 255, 0, 255, 0.1f); #endif // CLIENT_DLL if( GetMoveType() != MOVETYPE_WALK ) { BaseClass::PhysicsSimulate(); return; } // Run all but the base think function PhysicsRunThink( THINK_FIRE_ALL_BUT_BASE ); PhysicsRunThink( THINK_FIRE_BASE_ONLY ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_BaseEntity::PhysicsParent( void ) { PhysicsRunThink(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_BaseEntity::PhysicsPusher( void ) { PhysicsRunThink(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_BaseEntity::PhysicsNone( void ) { PhysicsRunThink(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_BaseEntity::PhysicsStep() { // Run all but the base think function PhysicsRunThink( THINK_FIRE_ALL_BUT_BASE ); PhysicsRunThink( THINK_FIRE_BASE_ONLY ); }