convert line ends
[canaan.git] / prj / cam / src / ai / aicbtrsp.cpp
blobf2fecab1528dcd0b315ad2c6a940984396df84cd
1 /*
2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
4 */
6 ///////////////////////////////////////////////////////////////////////////////
7 // $Header: r:/t2repos/thief2/src/ai/aicbtrsp.cpp,v 1.4 1999/11/22 17:51:35 henrys Exp $
8 //
9 //
12 #include <lg.h>
14 #include <propbase.h>
15 #include <property.h>
16 #include <propert_.h>
17 #include <prophash.h>
18 #include <sdesbase.h>
19 #include <sdesc.h>
21 #include <aiapisns.h>
22 #include <aicbtrsp.h>
23 #include <aiprops.h>
24 #include <aipsdscr.h>
25 #include <aisndtyp.h>
27 #include <psdialog.h>
29 #include <dbmem.h>
31 F_DECLARE_INTERFACE(IAISenseCombatResponseProperty);
33 ///////////////////////////////////////////////////////////////////////////////
35 // Combat sound response property
38 #define kAIMaxCbtRspActs 16
40 struct sAISenseCombatResponse
42 eAIPriority priority;
43 DWORD reserved[4];
44 sAIPsdScrAct acts[kAIMaxCbtRspActs];
47 ///////////////////////////////////////
49 #undef INTERFACE
50 #define INTERFACE IAISenseCombatResponseProperty
51 DECLARE_PROPERTY_INTERFACE(IAISenseCombatResponseProperty)
53 DECLARE_UNKNOWN_PURE();
54 DECLARE_PROPERTY_PURE();
55 DECLARE_PROPERTY_ACCESSORS(sAISenseCombatResponse *);
58 static IAISenseCombatResponseProperty * g_pAISenseCombatResponseProperty;
60 ///////////////////
62 static sPropertyDesc _g_SenseCombatResponsePropertyDesc =
64 "AI_CbtRsp",
66 NULL, 0, 0, // constraints, version
67 { AI_RESPONSE_CAT, "Sense combat response" },
68 kPropertyChangeLocally, // net_flags
71 ///////////////////
73 typedef cSpecificProperty<IAISenseCombatResponseProperty, &IID_IAISenseCombatResponseProperty, sAISenseCombatResponse *, cHashPropertyStore< cClassDataOps<sAISenseCombatResponse> > > cAISenseCombatResponsePropertyBase;
75 class cAISenseCombatResponseProperty : public cAISenseCombatResponsePropertyBase
77 public:
78 cAISenseCombatResponseProperty()
79 : cAISenseCombatResponsePropertyBase(&_g_SenseCombatResponsePropertyDesc)
83 STANDARD_DESCRIBE_TYPE(sAISenseCombatResponse);
86 ///////////////////
88 #define CBTSND_RESPONSE_FIELDS(i) \
89 AIPSDSCR_ARG_FIELD("Response: Step " #i, sAISenseCombatResponse, acts[i-1])
91 static sFieldDesc _g_AISenseCombatResponseFieldDesc[] =
93 //{ "Priority", kFieldTypeEnum, FieldLocation(sAISenseCombatResponse, priority), kFieldFlagNone, 0, FieldNames(g_ppszAIPriority) },
95 // @Note (toml 07-17-98): only showing 6 of 8 fields
96 CBTSND_RESPONSE_FIELDS(1),
97 CBTSND_RESPONSE_FIELDS(2),
98 CBTSND_RESPONSE_FIELDS(3),
99 CBTSND_RESPONSE_FIELDS(4),
100 CBTSND_RESPONSE_FIELDS(5),
101 CBTSND_RESPONSE_FIELDS(6),
104 static sStructDesc _g_AISenseCombatResponseStructDesc = StructDescBuild(sAISenseCombatResponse, kStructFlagNone, _g_AISenseCombatResponseFieldDesc);
106 ///////////////////////////////////////
108 #define AIGetSenseCombatResponse(obj) AIGetProperty(g_pAISenseCombatResponseProperty, obj, (sAISenseCombatResponse *)NULL)
110 ///////////////////////////////////////////////////////////////////////////////
112 BOOL AIInitSenseCombatResponseAbility(IAIManager *)
114 StructDescRegister(&_g_AISenseCombatResponseStructDesc);
116 g_pAISenseCombatResponseProperty = new cAISenseCombatResponseProperty;
117 return TRUE;
120 ///////////////////////////////////////
122 BOOL AITermSenseCombatResponseAbility()
124 SafeRelease(g_pAISenseCombatResponseProperty);
125 return TRUE;
128 ///////////////////////////////////////////////////////////////////////////////
130 // CLASS: cAISenseCombatResponse
133 #define kAIListenRate kAIT_2Hz
135 cAISenseCombatResponse::cAISenseCombatResponse()
136 : cAITriggeredPScripted(kAIListenRate)
140 ///////////////////////////////////////
142 cAISenseCombatResponse::~cAISenseCombatResponse()
146 ///////////////////////////////////////
148 STDMETHODIMP_(const char *) cAISenseCombatResponse::GetName()
150 return "Combat listen ability";
153 ///////////////////////////////////////
155 STDMETHODIMP_(void) cAISenseCombatResponse::Init()
157 cAITriggeredPScripted::Init();
158 SetNotifications(kAICN_WitnessCombat);
161 ///////////////////////////////////////
163 STDMETHODIMP_(void) cAISenseCombatResponse::OnWitnessCombat()
165 if (InControl() || IsTriggered())
166 return;
168 const sAISenseCombatResponse * pResponse = AIGetSenseCombatResponse(GetID());
169 if (pResponse)
170 SetTriggered(pResponse->priority, pResponse->acts, kAIMaxCbtRspActs);
173 ///////////////////////////////////////////////////////////////////////////////
175 #ifdef EDITOR
177 // The combat sense response pseudo-script dialog
179 static sFieldDesc gCbtRspHeaderFieldDesc[] =
181 { "Priority", kFieldTypeEnum, FieldLocation(sAISenseCombatResponse, priority), kFieldFlagNone, 0, FieldNames(g_ppszAIPriority) },
183 static sStructDesc gCbtRspHeaderStructDesc = StructDescBuild(sAISenseCombatResponse, kStructFlagNone, gCbtRspHeaderFieldDesc);
185 IStructEditor* NewCombatResponseDialog (void* data)
187 return NewPseudoScriptDialog ("Combat sense response", kAIMaxCbtRspActs, &gCbtRspHeaderStructDesc, data, ((sAISenseCombatResponse*) data)->acts);
190 #endif