// AI_monster_turret.h // Native state-machine replacement for ai_monster_turret.script. #pragma once #ifndef TURRET_FIRE_RATE #define TURRET_FIRE_RATE 0.1f #endif #ifndef TURRET_MIN_ATTACK_TIME #define TURRET_MIN_ATTACK_TIME 1.5f #endif #ifndef TURRET_SHUTDOWN_TIME #define TURRET_SHUTDOWN_TIME 4 #endif class rvmMonsterTurret : public rvmMonsterBase { public: CLASS_PROTOTYPE( rvmMonsterTurret ); rvmMonsterTurret(); virtual void Init( idAI* aiOwner ) override; virtual stateResult_t RunStateByName( const char* stateName, stateParms_t* parms ) override; protected: bool fire; bool attack_monsters; bool light_is_on; float attackTime; float nextFireTime; float shutdownTime; idEntityPtr light; virtual stateResult_t Torso_Death( stateParms_t* parms ); virtual stateResult_t Torso_Idle( stateParms_t* parms ); virtual stateResult_t Torso_Attack( stateParms_t* parms ); virtual stateResult_t state_Begin( stateParms_t* parms ); virtual stateResult_t state_Idle( stateParms_t* parms ); virtual stateResult_t state_Disabled( stateParms_t* parms ); virtual stateResult_t state_Killed( stateParms_t* parms ); virtual stateResult_t state_Combat( stateParms_t* parms ); virtual stateResult_t combat_attack( stateParms_t* parms ); virtual stateResult_t spawn_light( stateParms_t* parms ); virtual stateResult_t light_off( stateParms_t* parms ); virtual stateResult_t light_on( stateParms_t* parms ); virtual bool checkForEnemy( bool use_fov ); };