diff options
Diffstat (limited to 'game/server/NextBot/NextBotAttentionInterface.h')
| -rw-r--r-- | game/server/NextBot/NextBotAttentionInterface.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/game/server/NextBot/NextBotAttentionInterface.h b/game/server/NextBot/NextBotAttentionInterface.h new file mode 100644 index 0000000..26bec43 --- /dev/null +++ b/game/server/NextBot/NextBotAttentionInterface.h @@ -0,0 +1,81 @@ +// NextBotAttentionInterface.h +// Manage what this bot pays attention to +// Author: Michael Booth, April 2007 +//========= Copyright Valve Corporation, All rights reserved. ============// + +#ifndef _NEXT_BOT_ATTENTION_INTERFACE_H_ +#define _NEXT_BOT_ATTENTION_INTERFACE_H_ + +#include "NextBotComponentInterface.h" + +class INextBot; +class IBody; + + +//---------------------------------------------------------------------------------------------------------------- +/** + * The interface for managing what a bot pays attention to. + * Vision determines what see see and notice -> Attention determines which of those things we look at -> Low level head/aiming simulation actually moves our head/eyes + */ +class IAttention : public INextBotComponent +{ +public: + IAttention( INextBot *bot ) : INextBotComponent( bot ) { } + virtual ~IAttention() { } + + virtual void Reset( void ) { } // reset to initial state + virtual void Update( void ) { } // update internal state + + enum SignificanceLevel + { + BORING, // background noise + INTERESTING, // notably interesting + COMPELLING, // very hard to pay attention to anything else + IRRESISTIBLE, // can't look away + }; + + // override these to control the significance of entities in a context-specific way + virtual int CompareSignificance( const CBaseEntity *a, const CBaseEntity *b ) const; // returns <0 if a < b, 0 if a==b, or >0 if a>b + + // bring things to our attention + virtual void AttendTo( CBaseEntity *what, const char *reason = NULL ); + virtual void AttendTo( const Vector &where, SignificanceLevel significance, const char *reason = NULL ); + + // remove things from our attention + virtual void Disregard( CBaseEntity *what, const char *reason = NULL ); + + virtual bool IsAwareOf( CBaseEntity *what ) const; // return true if given object is in our attending set + virtual float GetAwareDuration( CBaseEntity *what ) const; // return how long we've been aware of this entity + + // INextBotEventResponder ------------------------------------------------------------------ + virtual void OnInjured( const CTakeDamageInfo &info ); // when bot is damaged by something + virtual void OnContact( CBaseEntity *other, CGameTrace *result = NULL ); // invoked when bot touches 'other' + virtual void OnSight( CBaseEntity *subject ); // when subject initially enters bot's visual awareness + virtual void OnLostSight( CBaseEntity *subject ); // when subject leaves enters bot's visual awareness + virtual void OnSound( CBaseEntity *source, const CSoundParameters ¶ms ); // when an entity emits a sound + + +private: + IBody *m_body; // to access head aiming + + struct PointOfInterest + { + enum { ENTITY, POSITION } m_type; + CHandle< CBaseEntity > m_entity; + Vector m_position; + + IntervalTimer m_duration; // how long has this PoI been in our attention set + }; + + CUtlVector< PointOfInterest > m_attentionSet; // the set of things we are attending to + + +}; + +inline int IAttention::CompareSignificance( const CBaseEntity *a, const CBaseEntity *b ) const +{ + return 0; +} + +#endif // _NEXT_BOT_ATTENTION_INTERFACE_H_ + |