2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
6 ///////////////////////////////////////////////////////////////////////////////
7 // $Header: r:/t2repos/thief2/src/ai/aicbtrsp.cpp,v 1.4 1999/11/22 17:51:35 henrys Exp $
31 F_DECLARE_INTERFACE(IAISenseCombatResponseProperty
);
33 ///////////////////////////////////////////////////////////////////////////////
35 // Combat sound response property
38 #define kAIMaxCbtRspActs 16
40 struct sAISenseCombatResponse
44 sAIPsdScrAct acts
[kAIMaxCbtRspActs
];
47 ///////////////////////////////////////
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
;
62 static sPropertyDesc _g_SenseCombatResponsePropertyDesc
=
66 NULL
, 0, 0, // constraints, version
67 { AI_RESPONSE_CAT
, "Sense combat response" },
68 kPropertyChangeLocally
, // net_flags
73 typedef cSpecificProperty
<IAISenseCombatResponseProperty
, &IID_IAISenseCombatResponseProperty
, sAISenseCombatResponse
*, cHashPropertyStore
< cClassDataOps
<sAISenseCombatResponse
> > > cAISenseCombatResponsePropertyBase
;
75 class cAISenseCombatResponseProperty
: public cAISenseCombatResponsePropertyBase
78 cAISenseCombatResponseProperty()
79 : cAISenseCombatResponsePropertyBase(&_g_SenseCombatResponsePropertyDesc
)
83 STANDARD_DESCRIBE_TYPE(sAISenseCombatResponse
);
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
;
120 ///////////////////////////////////////
122 BOOL
AITermSenseCombatResponseAbility()
124 SafeRelease(g_pAISenseCombatResponseProperty
);
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())
168 const sAISenseCombatResponse
* pResponse
= AIGetSenseCombatResponse(GetID());
170 SetTriggered(pResponse
->priority
, pResponse
->acts
, kAIMaxCbtRspActs
);
173 ///////////////////////////////////////////////////////////////////////////////
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
);