summaryrefslogtreecommitdiff
path: root/game/server/NextBot/NextBotAttentionInterface.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/NextBot/NextBotAttentionInterface.h')
-rw-r--r--game/server/NextBot/NextBotAttentionInterface.h81
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 &params ); // 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_
+