ef2gamesource/dlls/game/actor_sensoryperception.h
2015-04-29 22:34:44 +02:00

128 lines
3.8 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 "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__ */