mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-16 08:10:32 +02:00
227 lines
11 KiB
C++
227 lines
11 KiB
C++
// AI_base.h
|
|
// Native state-machine replacement for ai_base.script.
|
|
// Root object mirrors DoomScript object "ai" and owns an idAI native actor.
|
|
|
|
#pragma once
|
|
|
|
|
|
#ifndef ATTACK_DODGE_LEFT
|
|
#define ATTACK_DODGE_LEFT 1
|
|
#define ATTACK_DODGE_RIGHT 2
|
|
#define ATTACK_COMBAT_NODE 4
|
|
#define ATTACK_MELEE 8
|
|
#define ATTACK_LEAP 16
|
|
#define ATTACK_MISSILE 32
|
|
#define ATTACK_SPECIAL1 64
|
|
#define ATTACK_SPECIAL2 128
|
|
#define ATTACK_SPECIAL3 256
|
|
#define ATTACK_SPECIAL4 512
|
|
#endif
|
|
|
|
#ifndef AI_NOT_ACTIVATED
|
|
#define AI_NOT_ACTIVATED 0
|
|
#define AI_CHASING_ENEMY 1
|
|
#define AI_LOST 2
|
|
#define AI_PATH_FOLLOWING 3
|
|
#define AI_ATTACK_NODE 4
|
|
#endif
|
|
|
|
|
|
// The weapon native scripts use stateResult_t/stateParms_t. If this port is dropped
|
|
// into a branch where those are only declared in the weapon layer, include that header
|
|
// before this one or move the enum/struct into a shared script-state header.
|
|
|
|
class rvmAIObject : public idClass {
|
|
public:
|
|
CLASS_PROTOTYPE( rvmAIObject );
|
|
|
|
rvmAIObject();
|
|
virtual ~rvmAIObject();
|
|
|
|
virtual void Init( idAI* aiOwner );
|
|
virtual void Destroy();
|
|
virtual void Update();
|
|
|
|
virtual void SetState( const char* stateName );
|
|
virtual void SetAnimState( int channel, const char* stateName, int blendFrames );
|
|
virtual bool InAnimState( int channel, const char* stateName ) const;
|
|
virtual void StartAction( const char* actionName );
|
|
virtual bool InAction() const;
|
|
virtual void FinishAction( const char* actionName );
|
|
virtual bool ActionDone( const char* actionName ) const;
|
|
|
|
virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms );
|
|
|
|
protected:
|
|
static const int AI_NATIVE_MAX_CHANNELS = 4;
|
|
|
|
idAI* owner;
|
|
idStr currentState;
|
|
idStr currentAction;
|
|
idStr currentAnimState[AI_NATIVE_MAX_CHANNELS];
|
|
idStr waitActionName;
|
|
|
|
stateParms_t stateParms;
|
|
stateParms_t actionParms;
|
|
stateParms_t animParms[AI_NATIVE_MAX_CHANNELS];
|
|
|
|
float scratchEndTime;
|
|
float scratchMinTime;
|
|
float scratchNextTime;
|
|
float scratchCount;
|
|
float scratchFlags;
|
|
bool scratchBool;
|
|
idEntityPtr<idEntity> scratchEntity;
|
|
idStr scratchString;
|
|
|
|
virtual int ChannelIndex( int channel ) const;
|
|
virtual void ClearParms( stateParms_t& parms );
|
|
|
|
virtual float Time() const;
|
|
virtual float FrameTime() const;
|
|
virtual float RandomFloat( float max = 1.0f ) const;
|
|
virtual float RandomDelay( float minSeconds, float maxSeconds ) const;
|
|
virtual float DelayTime( float seconds ) const;
|
|
virtual float RandomTime( float seconds ) const;
|
|
|
|
virtual bool InfluenceActive() const;
|
|
virtual idPlayer* Player() const;
|
|
|
|
virtual void IdleAnim( int channel, const char* animName );
|
|
virtual void PlayCycle( int channel, const char* animName );
|
|
virtual void PlayAnim( int channel, const char* animName, bool blend = false );
|
|
virtual void StopAnim( int channel, int frames );
|
|
virtual bool AnimDone( int channel, int blendFrames ) const;
|
|
virtual bool HasAnim( int channel, const char* animName ) const;
|
|
virtual const char* GetPainAnim() const;
|
|
virtual void SetBlendFrames( int channel, int blendFrames );
|
|
virtual void OverrideAnim( int channel );
|
|
virtual void SetAnimPrefix( const char* prefix );
|
|
virtual void PreventPain( float seconds );
|
|
|
|
virtual void LookAtEnemy( float seconds );
|
|
virtual void LookAtEntity( idEntity* ent, float seconds );
|
|
virtual void FaceEnemy();
|
|
virtual void FaceEntity( idEntity* ent );
|
|
virtual bool FacingIdeal() const;
|
|
|
|
virtual void StopMove();
|
|
virtual void MoveToEnemy();
|
|
virtual void MoveToEnemyHeight();
|
|
virtual void MoveToEntity( idEntity* ent );
|
|
virtual void MoveToPosition( const idVec3& pos );
|
|
virtual void MoveToAttackPosition( idEntity* ent, const char* animName );
|
|
virtual void MoveOutOfRange( idEntity* ent, float range );
|
|
virtual void MoveToCover();
|
|
virtual void Wander();
|
|
virtual bool MoveDone() const;
|
|
virtual int MoveStatus() const;
|
|
virtual bool DestinationUnreachable() const;
|
|
|
|
virtual idActor* GetEnemy() const;
|
|
virtual void SetEnemy( idEntity* ent );
|
|
virtual void ClearEnemy();
|
|
virtual bool EnemyVisible() const;
|
|
virtual bool EnemyInFOV() const;
|
|
virtual bool EnemyDead() const;
|
|
virtual float EnemyRange() const;
|
|
virtual bool CheckForMelee() const;
|
|
virtual bool CanHitEnemy() const;
|
|
virtual bool CanHitEnemyFromAnim( const char* animName ) const;
|
|
virtual bool EntityInAttackCone( idEntity* ent ) const;
|
|
virtual bool CanReachEnemy() const;
|
|
virtual bool CanReachEntity( idEntity* ent ) const;
|
|
virtual bool CanSeeEntity( idEntity* ent ) const;
|
|
virtual void LocateEnemy();
|
|
|
|
virtual bool AttackMelee( const char* meleeDefName );
|
|
virtual idEntity* AttackMissile( const char* jointName );
|
|
virtual void MuzzleFlash( const char* jointName );
|
|
virtual idEntity* GetCombatNode();
|
|
|
|
virtual bool Pain() const;
|
|
virtual bool Activated() const;
|
|
virtual void ClearActivated();
|
|
virtual bool MovingForward() const;
|
|
virtual bool Blocked() const;
|
|
virtual bool ObstacleInPath() const;
|
|
virtual void AllowMovement( bool allow );
|
|
virtual void SetMoveType( int moveType );
|
|
virtual float GetTurnDelta() const;
|
|
virtual void TurnTo( float yaw );
|
|
virtual void TurnToPos( const idVec3& pos );
|
|
virtual float CurrentYaw() const;
|
|
virtual idVec3 GetOrigin() const;
|
|
virtual idVec3 GetEnemyPos() const;
|
|
virtual idVec3 PredictEnemyPos( float seconds ) const;
|
|
virtual idVec3 GetLinearVelocity() const;
|
|
virtual void SetLinearVelocity( const idVec3& velocity );
|
|
virtual float AnimLength( int channel, const char* animName ) const;
|
|
virtual const char* ChooseAnim( int channel, const char* animName ) const;
|
|
virtual bool TestAnimMove( const char* animName ) const;
|
|
virtual bool TestAnimMoveTowardEnemy( const char* animName ) const;
|
|
virtual bool TestAnimAttack( const char* animName ) const;
|
|
virtual bool TestMoveToPosition( const idVec3& pos ) const;
|
|
virtual float TravelDistanceToPoint( const idVec3& pos ) const;
|
|
virtual float TravelDistanceToEntity( idEntity* ent ) const;
|
|
virtual float TravelDistanceBetweenPoints( const idVec3& source, const idVec3& dest ) const;
|
|
virtual idVec3 GetReachableEntityPosition( idEntity* ent ) const;
|
|
virtual idVec3 GetJumpVelocity( const idVec3& pos, float speed, float maxHeight ) const;
|
|
virtual void AttackBegin( const char* damageDefName );
|
|
virtual void AttackEnd();
|
|
virtual void ChargeAttack( const char* damageDefName );
|
|
virtual float TestChargeAttack() const;
|
|
virtual idEntity* CreateMissile( const char* jointName );
|
|
virtual idEntity* FireMissileAtTarget( const char* jointName, const char* targetName );
|
|
virtual idEntity* LaunchMissile( const idVec3& origin, const idAngles& angles );
|
|
virtual void DirectDamage( idEntity* target, const char* damageDefName );
|
|
virtual void RadiusDamageFromJoint( const char* jointName, const char* damageDefName );
|
|
virtual void SetFlySpeed( float speed );
|
|
virtual void SetFlyOffset( int offset );
|
|
virtual void ClearFlyOffset();
|
|
virtual void SetHealth( float value );
|
|
virtual float GetHealth() const;
|
|
virtual void AllowDamage();
|
|
virtual void IgnoreDamage();
|
|
virtual void BecomeSolid();
|
|
virtual void BecomeNonSolid();
|
|
virtual void PreBurn();
|
|
virtual void Burn();
|
|
virtual void ClearBurn();
|
|
virtual void KillEntity( idEntity* ent );
|
|
virtual idEntity* RandomPathFrom( idEntity* from ) const;
|
|
virtual idEntity* FindEnemy( bool useFOV );
|
|
virtual idEntity* FindEnemyAI( bool useFOV );
|
|
virtual idEntity* HeardSound( bool ignoreTeam );
|
|
virtual idEntity* FindActorsInBounds( const idVec3& mins, const idVec3& maxs );
|
|
virtual idEntity* ClosestReachableEnemyOfEntity( idEntity* teamMate );
|
|
virtual idEntity* GetRandomTarget( const char* type );
|
|
virtual idVec3 GetVectorKey( const char* key, const char* defaultValue = "0 0 0" ) const;
|
|
virtual void HideEntity( idEntity* ent );
|
|
virtual void ShowEntity( idEntity* ent );
|
|
virtual void RemoveEntity( idEntity* ent );
|
|
|
|
virtual int GetIntKey( const char* key, const char* defaultValue = "0" ) const;
|
|
virtual int GetIntKey( const char* key, int defaultValue ) const;
|
|
virtual float GetFloatKey( const char* key, const char* defaultValue = "0" ) const;
|
|
virtual float GetFloatKey( const char* key, float defaultValue ) const;
|
|
virtual const char* GetKey( const char* key, const char* defaultValue = "" ) const;
|
|
virtual idEntity* GetEntityKey( const char* key ) const;
|
|
|
|
virtual void HideOwner();
|
|
virtual void ShowOwner();
|
|
virtual bool CanBecomeSolid() const;
|
|
virtual void SetNeverDormant( bool value );
|
|
virtual void WakeOnFlashlight( bool value );
|
|
virtual void StartSoundKey( const char* key, int channel, bool netSync = false );
|
|
virtual void StartFx( const char* fx );
|
|
virtual void SetSmokeVisibility( int index, bool visible );
|
|
virtual void TriggerParticles( const char* jointName );
|
|
virtual void BecomeRagdoll();
|
|
virtual void StopThinking();
|
|
virtual void RemoveOwner();
|
|
};
|
|
|
|
#define AI_DISPATCH_STATE( stateNameLiteral, methodName ) \
|
|
if ( !idStr::Icmp( stateName, stateNameLiteral ) ) { return methodName( parms ); }
|