Files
DoomRTX/neo/doom3/game/ai/AI_base.h
T
2026-05-23 14:30:21 -07:00

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 ); }