convert line ends
[canaan.git] / prj / cam / src / ai / aicbrmpr.cpp
blob58fd1574d59d6b12ddd777adc482feb32675410d
1 /*
2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
4 */
6 ///////////////////////////////////////////////////////////////////////////////
7 // $Header: r:/t2repos/thief2/src/ai/aicbrmpr.cpp,v 1.3 1999/04/22 17:53:15 JON Exp $
8 //
9 //
11 #include <aicbrmpr.h>
13 #include <sdesbase.h>
14 #include <sdesc.h>
16 #include <propbase.h>
17 #include <propcomp.h>
18 #include <propface.h>
19 #include <prophash.h>
20 #include <property.h>
22 #include <aiprops.h>
24 #include <objpos.h>
26 // Must be last header
27 #include <dbmem.h>
29 ////////////////////////////////////////////////////////////////////////////////
31 // Ranged Applicabilities
34 sAIRangedApplicabilities g_defaultAIRangedApplicabilities = {0, 4, 6, 6, 4, 0, 5, 5, 0,};
36 class cAIRangedApplicabilities: public sAIRangedApplicabilities
38 public:
39 cAIRangedApplicabilities() {*this = *(cAIRangedApplicabilities*)&g_defaultAIRangedApplicabilities;}
42 static sPropertyDesc g_AIRangedApplicabilitiesPDesc =
44 PROP_AI_RANGED_APPS,
45 NULL,
46 NULL,
49 { AI_RANGED_CAT, "Ranged Combat Applicabilities" },
50 kPropertyChangeLocally, // net_flags
53 class cAIRangedApplicabilitiesOps : public cClassDataOps<cAIRangedApplicabilities>
55 public:
56 cAIRangedApplicabilitiesOps() : cClassDataOps<cAIRangedApplicabilities>(kNoFlags) {};
59 typedef cHashPropertyStore<cAIRangedApplicabilitiesOps> cAIRangedApplicabilitiesStore;
60 typedef cSpecificProperty<IAIRangedApplicabilitiesProperty, &IID_IAIRangedApplicabilitiesProperty, sAIRangedApplicabilities *, cAIRangedApplicabilitiesStore> cBaseAIRangedApplicabilitiesProperty;
62 class cAIRangedApplicabilitiesProperty : public cBaseAIRangedApplicabilitiesProperty
64 public:
65 cAIRangedApplicabilitiesProperty(const sPropertyDesc *desc) : cBaseAIRangedApplicabilitiesProperty(desc) {};
67 STANDARD_DESCRIBE_TYPE(sAIRangedApplicabilities);
70 IAIRangedApplicabilitiesProperty* g_pAIRangedApplicabilitiesProperty = NULL;
72 ////////////////////////////////////////////////////////////////////////////////
74 static char *g_AIRangedModeNames[kAIRC_NumApplicabilities] =
76 "None",
77 "Minimum",
78 "VeryLow",
79 "Low",
80 "Normal",
81 "High",
82 "VeryHigh",
85 static sFieldDesc g_AIRangedApplicabilitiesFields[] =
87 { "Idle", kFieldTypeEnum, FieldLocation(sAIRangedApplicabilities, m_modeApplicability[kAIRC_IdleMode]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
88 { "Close", kFieldTypeEnum, FieldLocation(sAIRangedApplicabilities, m_modeApplicability[kAIRC_CloseMode]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
89 { "Backup", kFieldTypeEnum, FieldLocation(sAIRangedApplicabilities, m_modeApplicability[kAIRC_BackupMode]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
90 { "Wound", kFieldTypeEnum, FieldLocation(sAIRangedApplicabilities, m_modeApplicability[kAIRC_WoundMode]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
91 { "Vantage", kFieldTypeEnum, FieldLocation(sAIRangedApplicabilities, m_modeApplicability[kAIRC_VantageMode]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
92 { "Left", kFieldTypeEnum, FieldLocation(sAIRangedApplicabilities, m_modeApplicability[kAIRC_LeftMode]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
93 { "Right", kFieldTypeEnum, FieldLocation(sAIRangedApplicabilities, m_modeApplicability[kAIRC_RightMode]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
96 static sStructDesc g_AIRangedApplicabilitiesSDesc = StructDescBuild(sAIRangedApplicabilities, kStructFlagNone, g_AIRangedApplicabilitiesFields);
98 ////////////////////////////////////////////////////////////////////////////////
100 // Ranged Flee
103 sAIRangedFleeParams g_defaultAIRangedFleeParams = {4, 0, 1.57, 5, 30., 6.,};
105 class cAIRangedFleeParams: public sAIRangedFleeParams
107 public:
108 cAIRangedFleeParams() {*this = *(cAIRangedFleeParams*)&g_defaultAIRangedFleeParams;}
111 static sPropertyDesc g_AIRangedFleePDesc =
113 PROP_AI_RANGED_FLEE,
114 NULL,
115 NULL,
118 { AI_RANGED_CAT, "Ranged Combat Flee" },
119 kPropertyChangeLocally, // net_flags
122 class cAIRangedFleeOps : public cClassDataOps<cAIRangedFleeParams>
124 public:
125 cAIRangedFleeOps() : cClassDataOps<cAIRangedFleeParams>(kNoFlags) {};
128 typedef cHashPropertyStore<cAIRangedFleeOps> cAIRangedFleeStore;
129 typedef cSpecificProperty<IAIRangedFleeProperty, &IID_IAIRangedFleeProperty, sAIRangedFleeParams *, cAIRangedFleeStore> cBaseAIRangedFleeProperty;
131 class cAIRangedFleeProperty : public cBaseAIRangedFleeProperty
133 public:
134 cAIRangedFleeProperty(const sPropertyDesc *desc) : cBaseAIRangedFleeProperty(desc) {};
136 STANDARD_DESCRIBE_TYPE(sAIRangedFleeParams);
139 IAIRangedFleeProperty* g_pAIRangedFleeProperty = NULL;
141 ////////////////////////////////////////////////////////////////////////////////
143 static sFieldDesc g_AIRangedFleeFields[] =
145 { "Very Short", kFieldTypeEnum, FieldLocation(sAIRangedFleeParams, m_rangeApplicability[kAIRC_RangeVeryShort]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
146 { "Short", kFieldTypeEnum, FieldLocation(sAIRangedFleeParams, m_rangeApplicability[kAIRC_RangeShort]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
147 { "Angle Range", kFieldTypeFloat, FieldLocation(sAIRangedFleeParams, m_angleRange), kFieldFlagNone },
148 { "Number Points", kFieldTypeInt, FieldLocation(sAIRangedFleeParams, m_numPoints), kFieldFlagNone },
149 { "Distance", kFieldTypeFloat, FieldLocation(sAIRangedFleeParams, m_distance), kFieldFlagNone },
150 { "Clearance", kFieldTypeFloat, FieldLocation(sAIRangedFleeParams, m_clearance), kFieldFlagNone },
153 static sStructDesc g_AIRangedFleeSDesc = StructDescBuild(sAIRangedFleeParams, kStructFlagNone, g_AIRangedFleeFields);
155 ////////////////////////////////////////////////////////////////////////////////
157 // Ranged Shoot
160 sAIRangedShootParams g_defaultAIRangedShootParams = {1, 3, 6, 3, 0, 0, 0, 0xf000, {0, 0, 0}};
162 class cAIRangedShootParams: public sAIRangedShootParams
164 public:
165 cAIRangedShootParams() {*this = *(cAIRangedShootParams*)&g_defaultAIRangedShootParams;}
168 static sPropertyDesc g_AIRangedShootPDesc =
170 PROP_AI_RANGED_SHOOT,
171 NULL,
172 NULL,
175 { AI_RANGED_CAT, "Ranged Combat Shoot" },
176 kPropertyChangeLocally, // net_flags
179 class cAIRangedShootOps : public cClassDataOps<cAIRangedShootParams>
181 public:
182 cAIRangedShootOps() : cClassDataOps<cAIRangedShootParams>(kNoFlags) {};
185 typedef cHashPropertyStore<cAIRangedShootOps> cAIRangedShootStore;
186 typedef cSpecificProperty<IAIRangedShootProperty, &IID_IAIRangedShootProperty, sAIRangedShootParams *, cAIRangedShootStore> cBaseAIRangedShootProperty;
188 class cAIRangedShootProperty : public cBaseAIRangedShootProperty
190 public:
191 cAIRangedShootProperty(const sPropertyDesc *desc) : cBaseAIRangedShootProperty(desc) {};
193 STANDARD_DESCRIBE_TYPE(sAIRangedShootParams);
196 IAIRangedShootProperty* g_pAIRangedShootProperty = NULL;
198 ////////////////////////////////////////////////////////////////////////////////
200 static sFieldDesc g_AIRangedShootFields[] =
202 { "Very Short", kFieldTypeEnum, FieldLocation(sAIRangedShootParams, m_rangeApplicability[kAIRC_RangeVeryShort]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
203 { "Short", kFieldTypeEnum, FieldLocation(sAIRangedShootParams, m_rangeApplicability[kAIRC_RangeShort]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
204 { "Ideal", kFieldTypeEnum, FieldLocation(sAIRangedShootParams, m_rangeApplicability[kAIRC_RangeIdeal]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
205 { "Long", kFieldTypeEnum, FieldLocation(sAIRangedShootParams, m_rangeApplicability[kAIRC_RangeLong]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
206 { "Very Long", kFieldTypeEnum, FieldLocation(sAIRangedShootParams, m_rangeApplicability[kAIRC_RangeVeryLong]), kFieldFlagNone, 0, kAIRC_NumApplicabilities, kAIRC_NumApplicabilities, g_AIRangedModeNames},
207 { "Confirm Range", kFieldTypeBool, FieldLocation(sAIRangedShootParams, m_confirmRange), kFieldFlagNone},
208 { "Confirm LOF", kFieldTypeBool, FieldLocation(sAIRangedShootParams, m_confirmLOF), kFieldFlagNone},
209 { "Rotation Speed", kFieldTypeInt, FieldLocation(sAIRangedShootParams, m_rotationSpeed), kFieldFlagHex},
210 { "Launch Offset", kFieldTypeVector, FieldLocation(sAIRangedShootParams, m_launchOffset), kFieldFlagNone},
213 static sStructDesc g_AIRangedShootSDesc = StructDescBuild(sAIRangedShootParams, kStructFlagNone, g_AIRangedShootFields);
215 /////////////////////////////////////////////////////////////////////////////////
217 BOOL AIGetLaunchOffset(ObjID AIID, Location* pLocation)
219 sAIRangedShootParams* pParams;
221 if (g_pAIRangedShootProperty->Get(AIID, &pParams))
223 mxs_vector offsetVec;
224 mxs_vector launchVec;
225 Position* pSourcePos = ObjPosGet(AIID);
227 mx_rot_z_vec(&offsetVec, &pParams->m_launchOffset, pSourcePos->fac.tz);
228 mx_add_vec(&launchVec, &pSourcePos->loc.vec, &offsetVec);
229 MakeHintedLocationFromVector(pLocation, &launchVec, &pSourcePos->loc);
230 return TRUE;
232 return FALSE;
235 /////////////////////////////////////////////////////////////////////////////////
237 void InitRangedModeProperties(void)
239 // applicabilities
240 g_pAIRangedApplicabilitiesProperty = new cAIRangedApplicabilitiesProperty(&g_AIRangedApplicabilitiesPDesc);
241 StructDescRegister(&g_AIRangedApplicabilitiesSDesc);
242 // flee
243 g_pAIRangedFleeProperty = new cAIRangedFleeProperty(&g_AIRangedFleePDesc);
244 StructDescRegister(&g_AIRangedFleeSDesc);
245 // Shoot
246 g_pAIRangedShootProperty = new cAIRangedShootProperty(&g_AIRangedShootPDesc);
247 StructDescRegister(&g_AIRangedShootSDesc);
250 void TermRangedModeProperties(void)
252 SafeRelease(g_pAIRangedApplicabilitiesProperty);
253 g_pAIRangedApplicabilitiesProperty = NULL;
254 SafeRelease(g_pAIRangedFleeProperty);
255 g_pAIRangedFleeProperty = NULL;
256 SafeRelease(g_pAIRangedShootProperty);
257 g_pAIRangedShootProperty = NULL;