Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

67 lines
2.4 KiB

#ifndef ASW_VPHYSICS_NPC_H
#define ASW_VPHYSICS_NPC_H
#pragma once
#include "ai_playerally.h"
class CMoveData;
class CASW_VPhysics_NPC : public CAI_PlayerAlly
{
public:
DECLARE_CLASS( CASW_VPhysics_NPC, CAI_PlayerAlly );
DECLARE_SERVERCLASS();
DECLARE_DATADESC();
CASW_VPhysics_NPC();
virtual ~CASW_VPhysics_NPC();
virtual void UpdateOnRemove();
void Spawn( void );
int Restore( IRestore &restore );
virtual void InhabitedPhysicsSimulate();
virtual void UpdateVPhysicsAfterMove();
virtual float MaxSpeed();
void PostThink();
// physics stuff
bool ShouldSavePhysics();
void VPhysicsShadowUpdate( IPhysicsObject *pPhysics );
void SetVCollisionState( int collisionState );
void VPhysicsDestroyObject();
void InitVCollision( void );
void PostThinkVPhysics(CMoveData* pMoveData);
void SetupVPhysicsShadow( CPhysCollide *pStandModel, const char *pStandHullName, CPhysCollide *pCrouchModel, const char *pCrouchHullName );
void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent );
void VPhysicsUpdate( IPhysicsObject *pPhysics );
void UpdateVPhysicsPosition( const Vector &position, const Vector &velocity, float secondsToArrival );
void UpdatePhysicsShadowToCurrentPosition();
IPhysicsPlayerController* GetPhysicsController() { return m_pPhysicsController; }
virtual bool IsFollowingPhysics( void ) { return false; }
bool IsRideablePhysics( IPhysicsObject *pPhysics );
IPhysicsObject *GetGroundVPhysics();
// Player Physics Shadow
IPhysicsPlayerController *m_pPhysicsController;
IPhysicsObject *m_pShadowStand;
IPhysicsObject *m_pShadowCrouch;
int m_vphysicsCollisionState;
Vector m_oldOrigin;
Vector m_vecSmoothedVelocity;
bool m_touchedPhysObject;
bool HasPhysicsFlag( unsigned int flag ) { return (m_afPhysicsFlags & flag) != 0; }
unsigned int m_afPhysicsFlags; // physics flags - set when 'normal' physics should be revisited or overriden
// These are generated while running usercmds, then given to UpdateVPhysicsPosition after running all queued commands.
Vector m_vNewVPhysicsPosition;
Vector m_vNewVPhysicsVelocity;
void Touch( CBaseEntity *pOther );
void SetTouchedPhysics( bool bTouch ) { m_touchedPhysObject = bTouch; }
bool TouchedPhysics( void ) { return m_touchedPhysObject; }
// asw
Vector m_vecLastSafePosition;
//CUtlVector<EHANDLE> m_BlockingEntities;
//CUtlVector<int> m_BlockingCollisionGroup;
};
#endif /* ASW_VPHYSICS_NPC_H */