//----------------------------------------------------------------------------- // // $Logfile:: /Code/DLLs/game/actor_sensoryperception.h $ // $Revision:: 7 $ // $Author:: Steven $ // $Date:: 10/13/03 8:53a $ // // Copyright (C) 2001 by Ritual Entertainment, Inc. // All rights reserved. // // This source may not be distributed and/or modified without // expressly written permission by Ritual Entertainment, Inc. // // DESCRIPTION: // SensoryPerception class for Actors -- Handles all the sensory related funtionality // class SensoryPerception; #ifndef __ACTOR_SENSORYPERCEPTION_H__ #define __ACTOR_SENSORYPERCEPTION_H__ #include "actorincludes.h" //============================ // Class SensoryPerception //============================ // // Class used to handle all sensory perception by actors. // class SensoryPerception { public: SensoryPerception(); explicit SensoryPerception(Actor *actor); virtual ~SensoryPerception(); // Sense functions void SenseEnemies(); // Stimuli functions void Stimuli(int stimuli); void Stimuli(int stimuli, Entity *ent); void Stimuli(int stimuli, const Vector &pos); void Stimuli(int stimuli, const Vector &pos, int sound_Type); void RespondTo(const str &stimuli_name, qboolean respond); void RespondTo(int stimuli, qboolean respond); void PermanentlyRespondTo(const str &stimuli_name, qboolean respond); qboolean ShouldRespondToStimuli(int new_stimuli); // Vision functions qboolean WithinVisionDistance(const Entity *ent); qboolean WithinVisionDistance(const Vector &pos); qboolean InFOV(const Vector &pos, float check_fov, float check_fovdot); qboolean InFOV(const Vector &pos); qboolean InFOV(const Entity *ent); // New Vision Functions -- Simplified Vision qboolean CanSeeEntity(Entity *start, const Entity *target, qboolean useFOV, qboolean useVisionDistance); qboolean CanSeeEntity(const Vector &start, const Entity *target, qboolean useFOV, qboolean useVisionDistance); // New Vision Functions -- More Sophisticated Vision qboolean CanSeeEntityComplex(Entity *start, Entity *target, qboolean useFOV, qboolean useVisionDistance); qboolean CanSeeEntityComplex(Vector &start, Entity *target, qboolean useFOV, qboolean useVisionDistance); qboolean CanSeePosition(const Vector &start, const Vector &position, qboolean useFOV, qboolean useVisionDistance); qboolean isInLineOfSight(const Vector &position, const int entNum); qboolean checkInLineOfSight(const Vector &position, const int entNum); // Debugging Functions void ShowInfo(); // Accessors and Mutators void SetNoisePosition(const Vector &pos); Vector GetNoisePosition(); void SetLastSoundType(int soundtype); int GetLastSoundType(); void SetNoiseTime(float noisetime); float GetNoiseTime(); void SetFOV(float fov); float GetFOV(); void SetFOVdot(float fov_dot); float GetFOVdot(); void SetVisionDistance(float vision_distance); float GetVisionDistance(); // Archiving virtual void Archive(Archiver &arc); void DoArchive(Archiver &arc, Actor *actor); private: //Functions qboolean _CanSeeComplex(Vector &start, Entity *target, qboolean useFOV, qboolean useVisionDistance); qboolean _SenseEntity(Entity *ent); void _init(); //Member Variables // Stimuli Variables int _stimuli; int _permanent_stimuli; // Hearing Variables Vector _noise_position; int _last_soundType; float _noise_time; // Vision Stuff for "seeing" float _fov; float _fovdot; float _vision_distance; float _nextSenseTime; LineOfSight_t _lineOfSight; Actor *act; }; #endif /* __ACTOR_SENSORYPERCEPTION_H__ */