ef2-sdk/dlls/game/actor_sensoryperception.h

132 lines
4.3 KiB
C++

//-----------------------------------------------------------------------------
//
// $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 "actor.h"
#include "actorincludes.h"
#include "weapon.h"
//============================
// Class SensoryPerception
//============================
//
// Class used to handle all sensory perception by actors.
//
class SensoryPerception
{
public:
SensoryPerception();
SensoryPerception(Actor *actor );
~SensoryPerception();
// Sense functions
void SenseEnemies();
void SearchForEnemies();
// 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();
private: //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__ */