Files
DoomRTX/neo/prey/Prey/game_wraith.h
T
2026-05-05 15:01:01 -07:00

129 lines
3.3 KiB
C++

#ifndef __GAME_WRAITH_H__
#define __GAME_WRAITH_H__
typedef enum wraithState_s {
WS_SPAWN = 0,
WS_FLY,
WS_FLEE,
WS_POSSESS_CHARGE,
WS_DEATH_CHARGE,
WS_STILL
} wraithState_t;
class hhWraith : public hhMonsterAI {
public:
CLASS_PROTOTYPE(hhWraith);
void Spawn(void);
virtual ~hhWraith();
void Save( idSaveGame *savefile ) const;
void Restore( idRestoreGame *savefile );
void UpdateEnemyPosition( void );
virtual void Damage( idEntity *inflictor, idEntity *attacker, const idVec3 &dir, const char *damageDefName, const float damageScale, const int location );
virtual void Killed( idEntity *inflictor, idEntity *attacker, int damage, const idVec3 &dir, int location );
virtual void Think( void );
virtual int HasAmmo( ammo_t type, int amount ) { return 0; }
virtual bool UseAmmo( ammo_t type, int amount ) { return false ; }
protected:
virtual void EnemyDead();
// State flight functions
virtual void FlyUp( void );
virtual void FlyMove( void );
virtual void FlyToEnemy( void );
virtual void FlyAway( void );
void CheckFleeRemove( void );
void WraithPossess( idActor *actor );
void CheckCollisions( void );
void PlayAnimMove( int anim, int blendTime );
void PlayAnimMoveEnd();
void TurnTowardEnemy();
void Event_FindEnemy( int useFOV );
void Event_TurnTowardEnemy();
void Event_Flee();
void Event_PlayAnimMoveEnd( );
virtual void Event_Activate(idEntity *activator);
virtual void Event_EnemyIsSpirit( hhPlayer *player, hhSpiritProxy *proxy );
virtual void Event_EnemyIsPhysical( hhPlayer *player, hhSpiritProxy *proxy );
virtual void TeleportIn( idEntity *activator );
virtual void StartDisposeCountdown() { } // Doesn't apply to wraiths
virtual void Portalled(idEntity *portal);
protected:
// Animations
int flyAnim;
int possessAnim;
int leftAnim;
int rightAnim;
int fleeAnim;
int fleeInAnim;
int lastAnim; // Used in turning flight logic
// Variables
bool canPossess;
idVec3 velocity;
int damageTicks; // # of ticks to act damaged (fly slower, flash red)
int straightTicks; // # of ticks to fly straight
int turnTicks; // # if ticks when turning before the wraith will be forced to fly straight
int nextCheckTime;
idVec3 lastCheckOrigin;
float lastDamageTime; // used to delay the damage check after applying damage
wraithState_t state;
// .def file variables
float velocity_xy;
float velocity_z;
float velocity_z_fast;
float dist_z_close;
float dist_z_far;
float turn_threshold;
float turn_radius_max;
int straight_ticks; // Number of ticks to delay before turning
int damage_ticks;
int turn_ticks; // Max time to spend turning before going straight
float flee_speed_z;
float target_z_threshold;
float minDamageDist; // Damage distance check
// Scale variables
bool isScaling;
float scaleStart;
float scaleEnd;
float scaleTime;
float lastScaleTime;
int countDownTimer;
idMat3 desiredAxis;
float desiredVelocity;
bool bFaceEnemy;
int nextDrop;
int nextChatter;
int minChatter;
int maxChatter;
idEntityPtr<idActor> lastActor;
int nextPossessTime;
idEntityPtr<idEntityFx> fxFly;
};
#endif /* __GAME_WRAITH_H__ */