2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
6 ///////////////////////////////////////////////////////////////////////////////
7 // $Header: r:/t2repos/thief2/src/ai/aicbrmpr.cpp,v 1.3 1999/04/22 17:53:15 JON Exp $
26 // Must be last header
29 ////////////////////////////////////////////////////////////////////////////////
31 // Ranged Applicabilities
34 sAIRangedApplicabilities g_defaultAIRangedApplicabilities
= {0, 4, 6, 6, 4, 0, 5, 5, 0,};
36 class cAIRangedApplicabilities
: public sAIRangedApplicabilities
39 cAIRangedApplicabilities() {*this = *(cAIRangedApplicabilities
*)&g_defaultAIRangedApplicabilities
;}
42 static sPropertyDesc g_AIRangedApplicabilitiesPDesc
=
49 { AI_RANGED_CAT
, "Ranged Combat Applicabilities" },
50 kPropertyChangeLocally
, // net_flags
53 class cAIRangedApplicabilitiesOps
: public cClassDataOps
<cAIRangedApplicabilities
>
56 cAIRangedApplicabilitiesOps() : cClassDataOps
<cAIRangedApplicabilities
>(kNoFlags
) {};
59 typedef cHashPropertyStore
<cAIRangedApplicabilitiesOps
> cAIRangedApplicabilitiesStore
;
60 typedef cSpecificProperty
<IAIRangedApplicabilitiesProperty
, &IID_IAIRangedApplicabilitiesProperty
, sAIRangedApplicabilities
*, cAIRangedApplicabilitiesStore
> cBaseAIRangedApplicabilitiesProperty
;
62 class cAIRangedApplicabilitiesProperty
: public cBaseAIRangedApplicabilitiesProperty
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
] =
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 ////////////////////////////////////////////////////////////////////////////////
103 sAIRangedFleeParams g_defaultAIRangedFleeParams
= {4, 0, 1.57, 5, 30., 6.,};
105 class cAIRangedFleeParams
: public sAIRangedFleeParams
108 cAIRangedFleeParams() {*this = *(cAIRangedFleeParams
*)&g_defaultAIRangedFleeParams
;}
111 static sPropertyDesc g_AIRangedFleePDesc
=
118 { AI_RANGED_CAT
, "Ranged Combat Flee" },
119 kPropertyChangeLocally
, // net_flags
122 class cAIRangedFleeOps
: public cClassDataOps
<cAIRangedFleeParams
>
125 cAIRangedFleeOps() : cClassDataOps
<cAIRangedFleeParams
>(kNoFlags
) {};
128 typedef cHashPropertyStore
<cAIRangedFleeOps
> cAIRangedFleeStore
;
129 typedef cSpecificProperty
<IAIRangedFleeProperty
, &IID_IAIRangedFleeProperty
, sAIRangedFleeParams
*, cAIRangedFleeStore
> cBaseAIRangedFleeProperty
;
131 class cAIRangedFleeProperty
: public cBaseAIRangedFleeProperty
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 ////////////////////////////////////////////////////////////////////////////////
160 sAIRangedShootParams g_defaultAIRangedShootParams
= {1, 3, 6, 3, 0, 0, 0, 0xf000, {0, 0, 0}};
162 class cAIRangedShootParams
: public sAIRangedShootParams
165 cAIRangedShootParams() {*this = *(cAIRangedShootParams
*)&g_defaultAIRangedShootParams
;}
168 static sPropertyDesc g_AIRangedShootPDesc
=
170 PROP_AI_RANGED_SHOOT
,
175 { AI_RANGED_CAT
, "Ranged Combat Shoot" },
176 kPropertyChangeLocally
, // net_flags
179 class cAIRangedShootOps
: public cClassDataOps
<cAIRangedShootParams
>
182 cAIRangedShootOps() : cClassDataOps
<cAIRangedShootParams
>(kNoFlags
) {};
185 typedef cHashPropertyStore
<cAIRangedShootOps
> cAIRangedShootStore
;
186 typedef cSpecificProperty
<IAIRangedShootProperty
, &IID_IAIRangedShootProperty
, sAIRangedShootParams
*, cAIRangedShootStore
> cBaseAIRangedShootProperty
;
188 class cAIRangedShootProperty
: public cBaseAIRangedShootProperty
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
);
235 /////////////////////////////////////////////////////////////////////////////////
237 void InitRangedModeProperties(void)
240 g_pAIRangedApplicabilitiesProperty
= new cAIRangedApplicabilitiesProperty(&g_AIRangedApplicabilitiesPDesc
);
241 StructDescRegister(&g_AIRangedApplicabilitiesSDesc
);
243 g_pAIRangedFleeProperty
= new cAIRangedFleeProperty(&g_AIRangedFleePDesc
);
244 StructDescRegister(&g_AIRangedFleeSDesc
);
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
;