MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / AI_SafeSetType

Function AI_SafeSetType

scripts/AIGame3.cpp:156–256  ·  view source on GitHub ↗

Works like AI_SetType(), but won't clear out Dallas' goal slots 0 or 3

Source from the content-addressed store, hash-verified

154
155// Works like AI_SetType(), but won't clear out Dallas' goal slots 0 or 3
156void AI_SafeSetType(int obj_handle, int ai_type) {
157 float aware = AWARE_BARELY;
158 float time = 25.0f;
159
160 SafeGoalClearAll(obj_handle);
161
162 switch (ai_type) {
163 case AIT_STALKER: {
164 vector goal_pos;
165 int goal_room;
166
167 Obj_Value(obj_handle, VF_GET, OBJV_V_POS, &goal_pos);
168 Obj_Value(obj_handle, VF_GET, OBJV_I_ROOMNUM, &goal_room);
169
170 AI_AddGoal(obj_handle, AIG_WANDER_AROUND, 1, 1.0f, -1, GF_NONFLUSHABLE | GF_KEEP_AT_COMPLETION, &goal_pos,
171 goal_room);
172 } break;
173
174 case AIT_EVADER2: {
175 vector goal_pos;
176 int goal_room;
177 float size, circle_distance;
178
179 Obj_Value(obj_handle, VF_GET, OBJV_V_POS, &goal_pos);
180 Obj_Value(obj_handle, VF_GET, OBJV_I_ROOMNUM, &goal_room);
181 Obj_Value(obj_handle, VF_GET, OBJV_F_SIZE, &size);
182 AI_Value(obj_handle, VF_GET, AIV_F_CIRCLE_DIST, &circle_distance);
183
184 AI_AddGoal(obj_handle, AIG_GUARD_AREA, 1, 1.0f, -1, GF_NONFLUSHABLE, &goal_pos, goal_room);
185 AI_SetGoalCircleDist(obj_handle, 1, size * 2.0f);
186 AI_GoalAddEnabler(obj_handle, 1, AIE_GT_AWARENESS, 1.0, 0.0, &aware);
187 AI_GoalAddEnabler(obj_handle, 1, AIE_LTE_LAST_SEE_TARGET_INTERVAL, 1.0, 0.0, &time);
188
189 int gi = AI_AddGoal(obj_handle, AIG_GET_AROUND_OBJ, ACTIVATION_BLEND_LEVEL, 3.0f, -1,
190 GF_NONFLUSHABLE | GF_OBJ_IS_TARGET, OBJECT_HANDLE_NONE);
191 AI_GoalAddEnabler(obj_handle, gi, AIE_NEAR, 1.0, 0.0, &circle_distance);
192 AI_SetGoalCircleDist(obj_handle, gi, circle_distance);
193 } break;
194
195 case AIT_EVADER1: {
196 float circle_distance;
197 AI_Value(obj_handle, VF_GET, AIV_F_CIRCLE_DIST, &circle_distance);
198
199 AI_AddGoal(obj_handle, AIG_MOVE_RELATIVE_OBJ, 1, 1.0f, -1, GF_OBJ_IS_TARGET | GF_SPEED_ATTACK | GF_NONFLUSHABLE,
200 OBJECT_HANDLE_NONE);
201 AI_GoalAddEnabler(obj_handle, 1, AIE_GT_AWARENESS, 1.0, 0.0, &aware);
202 AI_GoalAddEnabler(obj_handle, 1, AIE_LTE_LAST_SEE_TARGET_INTERVAL, 1.0, 0.0, &time);
203
204 if (circle_distance > 0.0f) {
205 int gi = AI_AddGoal(obj_handle, AIG_GET_AROUND_OBJ, ACTIVATION_BLEND_LEVEL, 3.0f, -1,
206 GF_NONFLUSHABLE | GF_OBJ_IS_TARGET, OBJECT_HANDLE_NONE);
207
208 float temp = circle_distance * 0.55f;
209 AI_GoalAddEnabler(obj_handle, gi, AIE_NEAR, 1.0, 0.0, &temp);
210 AI_SetGoalCircleDist(obj_handle, gi, circle_distance * 0.55f);
211 }
212 } break;
213

Callers 1

SetModeMethod · 0.70

Calls 2

Obj_ValueFunction · 0.85
SafeGoalClearAllFunction · 0.70

Tested by

no test coverage detected