OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
aiqueue.cpp
Go to the documentation of this file.
1#include "aiqueue.h"
2
3#include <limits>
4#include "game/serialize.h"
5
8
9void AiQueue::save(Serialize& fout) const {
10 fout.write(uint32_t(aiActions.size()));
11 for(auto& i:aiActions){
12 fout.write(uint32_t(i.act));
13 fout.write(i.target,i.victim);
14 fout.write(i.point,i.func,i.i0,i.i1,i.s0);
15 if(i.act==AI_PrintScreen)
16 fout.write(i.i2,i.s1);
17 }
18 }
19
21 uint32_t size = 0;
22 fin.read(size);
23 aiActions.resize(size);
24 for(auto& i:aiActions){
25 fin.read(reinterpret_cast<uint32_t&>(i.act));
26 fin.read(i.target,i.victim);
27 fin.read(i.point,i.func,i.i0,i.i1,i.s0);
28 if(i.act==AI_PrintScreen)
29 fin.read(i.i2,i.s1);
30 }
31 }
32
34 aiActions.clear();
35 }
36
38 if(aiActions.size()>0) {
39 if(aiActions.back().act==AI_LookAtNpc && a.act==AI_LookAtNpc) {
40 aiActions.back() = a;
41 return;
42 }
43 }
44 aiActions.push_back(a);
45 }
46
48 if(a.act!=AI_PrintScreen) {
49 assert(a.i2==0);
50 assert(a.s1.empty());
51 }
52 aiActions.push_front(a);
53 }
54
56 auto act = std::move(aiActions.front());
57 aiActions.pop_front();
58 return act;
59 }
60
62 int v = std::numeric_limits<int>::max();
63 for(auto& i:aiActions)
64 if(i.i0<v && (i.act==AI_Output || i.act==AI_OutputSvm || i.act==AI_OutputSvmOverlay || i.act==AI_StopProcessInfo))
65 v = i.i0;
66 return v;
67 }
68
70 for(auto& i:aiActions)
71 if(i.item==&itm)
72 i.item = nullptr;
73 }
74
76 AiAction a;
77 a.act = AI_LookAt;
78 a.point = to;
79 return a;
80 }
81
83 AiAction a;
84 a.act = AI_LookAtNpc;
85 a.target = other;
86 return a;
87 }
88
94
100
102 AiAction a;
103 a.act = AI_TurnAway;
104 a.target = other;
105 return a;
106 }
107
109 AiAction a;
110 a.act = AI_TurnToNpc;
111 a.target = other;
112 return a;
113 }
114
116 AiAction a;
117 a.act = AI_WhirlToNpc;
118 a.target = other;
119 return a;
120 }
121
123 AiAction a;
124 a.act = AI_GoToNpc;
125 a.target = other;
126 return a;
127 }
128
130 AiAction a;
131 a.act = AI_GoToNextFp;
132 a.s0 = fp;
133 return a;
134 }
135
136AiQueue::AiAction AiQueue::aiStartState(ScriptFn stateFn, int behavior, Npc* other, Npc* victim, std::string_view wp) {
137 AiAction a;
138 a.act = AI_StartState;
139 a.func = stateFn;
140 a.i0 = behavior;
141 a.s0 = wp;
142 a.target = other;
143 a.victim = victim;
144 return a;
145 }
146
148 AiAction a;
149 a.act = AI_PlayAnim;
150 a.s0 = ani;
151 return a;
152 }
153
155 AiAction a;
156 a.act = AI_PlayAnimBs;
157 a.s0 = ani;
158 a.i0 = int(bs);
159 return a;
160 }
161
163 AiAction a;
164 a.act = AI_Wait;
165 a.i0 = int(dt);
166 return a;
167 }
168
170 AiAction a;
171 a.act = AI_StandUp;
172 return a;
173 }
174
180
182 AiAction a;
183 a.act = AI_GoToPoint;
184 a.point = &to;
185 return a;
186 }
187
189 AiAction a;
190 a.act = AI_EquipArmor;
191 a.i0 = id;
192 return a;
193 }
194
200
206
212
213AiQueue::AiAction AiQueue::aiUseMob(std::string_view name, int st) {
214 AiAction a;
215 a.act = AI_UseMob;
216 a.s0 = name;
217 a.i0 = st;
218 return a;
219 }
220
222 AiAction a;
223 a.act = AI_UseItem;
224 a.i0 = id;
225 return a;
226 }
227
229 AiAction a;
231 a.i0 = id;
232 a.i1 = state;
233 return a;
234 }
235
237 AiAction a;
238 a.act = AI_Teleport;
239 a.point = &to;
240 return a;
241 }
242
244 AiAction a;
245 a.act = AI_DrawWeapon;
246 return a;
247 }
248
254
260
261AiQueue::AiAction AiQueue::aiReadySpell(int32_t spell,int32_t mana) {
262 AiAction a;
263 a.act = AI_DrawSpell;
264 a.i0 = spell;
265 a.i1 = mana;
266 return a;
267 }
268
270 AiAction a;
271 a.act = AI_Attack;
272 return a;
273 }
274
276 AiAction a;
277 a.act = AI_Flee;
278 return a;
279 }
280
282 AiAction a;
283 a.act = AI_Dodge;
284 return a;
285 }
286
292
298
300 AiAction a;
302 a.target = &other;
303 return a;
304 }
305
306AiQueue::AiAction AiQueue::aiOutput(Npc& to, std::string_view text, int order) {
307 AiAction a;
308 a.act = AI_Output;
309 a.s0 = text;
310 a.target = &to;
311 a.i0 = order;
312 return a;
313 }
314
315AiQueue::AiAction AiQueue::aiOutputSvm(Npc &to, std::string_view text, int order) {
316 AiAction a;
317 a.act = AI_OutputSvm;
318 a.s0 = text;
319 a.target = &to;
320 a.i0 = order;
321 return a;
322 }
323
324AiQueue::AiAction AiQueue::aiOutputSvmOverlay(Npc &to, std::string_view text, int order) {
325 AiAction a;
327 a.s0 = text;
328 a.target = &to;
329 a.i0 = order;
330 return a;
331 }
332
334 AiAction a;
336 a.i0 = order;
337 return a;
338 }
339
345
347 AiAction a;
348 a.act = AI_AlignToFp;
349 return a;
350 }
351
353 AiAction a;
354 a.act = AI_AlignToWp;
355 return a;
356 }
357
359 AiAction a;
361 a.func = func;
362 a.i0 = radius;
363 return a;
364 }
365
367 AiAction a;
369 a.i0 = int(w);
370 return a;
371 }
372
374 AiAction a;
376 a.target = &other;
377 return a;
378 }
379
381 AiAction a;
382 a.act = AI_TakeItem;
383 a.item = &item;
384 return a;
385 }
386
388 AiAction a;
389 a.act = AI_GotoItem;
390 a.item = &item;
391 return a;
392 }
393
395 AiAction a;
396 a.act = AI_PointAt;
397 a.point = &to;
398 return a;
399 }
400
402 AiAction a;
403 a.act = AI_PointAtNpc;
404 a.target = &other;
405 return a;
406 }
407
413
414AiQueue::AiAction AiQueue::aiPrintScreen(int time, std::string_view font, int x,int y, std::string_view msg) {
415 AiAction a;
417 a.i0 = x;
418 a.i1 = y;
419 a.s0 = msg;
420 a.i2 = time;
421 a.s1 = font;
422 return a;
423 }
void pushFront(AiAction &&a)
Definition aiqueue.cpp:47
int aiOutputOrderId() const
Definition aiqueue.cpp:61
static AiAction aiPlayAnimBs(std::string_view ani, BodyState bs)
Definition aiqueue.cpp:154
void onWldItemRemoved(const Item &itm)
Definition aiqueue.cpp:69
static AiAction aiTakeItem(Item &item)
Definition aiqueue.cpp:380
static AiAction aiReadyRangedWeapon()
Definition aiqueue.cpp:255
static AiAction aiEquipBestRangedWeapon()
Definition aiqueue.cpp:207
static AiAction aiFlee()
Definition aiqueue.cpp:275
static AiAction aiAlignToWp()
Definition aiqueue.cpp:352
static AiAction aiUseMob(std::string_view name, int st)
Definition aiqueue.cpp:213
AiQueue()
Definition aiqueue.cpp:6
static AiAction aiUseItemToState(int32_t id, int32_t state)
Definition aiqueue.cpp:228
static AiAction aiGotoItem(Item &item)
Definition aiqueue.cpp:387
static AiAction aiRemoveWeapon()
Definition aiqueue.cpp:95
static AiAction aiDrawWeapon()
Definition aiqueue.cpp:243
static AiAction aiStopLookAt()
Definition aiqueue.cpp:89
static AiAction aiLookAtNpc(Npc *other)
Definition aiqueue.cpp:82
static AiAction aiPointAtNpc(Npc &other)
Definition aiqueue.cpp:401
static AiAction aiAttack()
Definition aiqueue.cpp:269
static AiAction aiWhirlToNpc(Npc *other)
Definition aiqueue.cpp:115
static AiAction aiTurnAway(Npc *other)
Definition aiqueue.cpp:101
static AiAction aiPointAt(const WayPoint &to)
Definition aiqueue.cpp:394
void clear()
Definition aiqueue.cpp:33
static AiAction aiStartState(ScriptFn stateFn, int behavior, Npc *other, Npc *victim, std::string_view wp)
Definition aiqueue.cpp:136
static AiAction aiTurnToNpc(Npc *other)
Definition aiqueue.cpp:108
static AiAction aiUnEquipArmor()
Definition aiqueue.cpp:293
static AiAction aiReadyMeleeWeapon()
Definition aiqueue.cpp:249
static AiAction aiPrintScreen(int time, std::string_view font, int x, int y, std::string_view msg)
Definition aiqueue.cpp:414
static AiAction aiOutputSvmOverlay(Npc &to, std::string_view text, int order)
Definition aiqueue.cpp:324
static AiAction aiReadySpell(int32_t spell, int32_t mana)
Definition aiqueue.cpp:261
static AiAction aiDodge()
Definition aiqueue.cpp:281
static AiAction aiSetNpcsToState(ScriptFn func, int32_t radius)
Definition aiqueue.cpp:358
static AiAction aiUseItem(int32_t id)
Definition aiqueue.cpp:221
static AiAction aiUnEquipWeapons()
Definition aiqueue.cpp:287
static AiAction aiLookAt(const WayPoint *to)
Definition aiqueue.cpp:75
static AiAction aiEquipBestArmor()
Definition aiqueue.cpp:195
static AiAction aiStandup()
Definition aiqueue.cpp:169
void pushBack(AiAction &&a)
Definition aiqueue.cpp:37
static AiAction aiProcessInfo(Npc &other)
Definition aiqueue.cpp:299
static AiAction aiTeleport(const WayPoint &to)
Definition aiqueue.cpp:236
AiAction pop()
Definition aiqueue.cpp:55
static AiAction aiOutputSvm(Npc &to, std::string_view text, int order)
Definition aiqueue.cpp:315
void save(Serialize &fout) const
Definition aiqueue.cpp:9
void load(Serialize &fin)
Definition aiqueue.cpp:20
static AiAction aiSetWalkMode(WalkBit w)
Definition aiqueue.cpp:366
static AiAction aiContinueRoutine()
Definition aiqueue.cpp:340
static AiAction aiGoToNpc(Npc *other)
Definition aiqueue.cpp:122
static AiAction aiGoToPoint(const WayPoint &to)
Definition aiqueue.cpp:181
static AiAction aiAlignToFp()
Definition aiqueue.cpp:346
static AiAction aiWait(uint64_t dt)
Definition aiqueue.cpp:162
static AiAction aiEquipArmor(int32_t id)
Definition aiqueue.cpp:188
static AiAction aiFinishingMove(Npc &other)
Definition aiqueue.cpp:373
static AiAction aiGoToNextFp(std::string_view fp)
Definition aiqueue.cpp:129
static AiAction aiStopProcessInfo(int order)
Definition aiqueue.cpp:333
static AiAction aiEquipBestMeleeWeapon()
Definition aiqueue.cpp:201
static AiAction aiStopPointAt()
Definition aiqueue.cpp:408
static AiAction aiPlayAnim(std::string_view ani)
Definition aiqueue.cpp:147
static AiAction aiStandupQuick()
Definition aiqueue.cpp:175
size_t size() const
Definition aiqueue.h:36
static AiAction aiOutput(Npc &to, std::string_view text, int order)
Definition aiqueue.cpp:306
Definition item.h:14
Definition npc.h:25
void write(const Arg &... a)
Definition serialize.h:76
void read(Arg &... a)
Definition serialize.h:81
WalkBit
Definition constants.h:209
@ AI_EquipBestArmor
Definition constants.h:357
@ AI_UseItem
Definition constants.h:361
@ AI_UnEquipWeapons
Definition constants.h:370
@ AI_DrawWeapon
Definition constants.h:383
@ AI_AlignToFp
Definition constants.h:378
@ AI_Output
Definition constants.h:372
@ AI_StopProcessInfo
Definition constants.h:376
@ AI_GoToNpc
Definition constants.h:347
@ AI_GoToNextFp
Definition constants.h:348
@ AI_OutputSvm
Definition constants.h:373
@ AI_UseMob
Definition constants.h:360
@ AI_RemoveWeapon
Definition constants.h:345
@ AI_OutputSvmOverlay
Definition constants.h:374
@ AI_UnEquipArmor
Definition constants.h:371
@ AI_EquipRange
Definition constants.h:359
@ AI_GotoItem
Definition constants.h:385
@ AI_PointAt
Definition constants.h:387
@ AI_TakeItem
Definition constants.h:384
@ AI_StandUpQuick
Definition constants.h:355
@ AI_WhirlToNpc
Definition constants.h:391
@ AI_Attack
Definition constants.h:367
@ AI_LookAtNpc
Definition constants.h:343
@ AI_DrawSpell
Definition constants.h:366
@ AI_Dodge
Definition constants.h:369
@ AI_FinishingMove
Definition constants.h:382
@ AI_ContinueRoutine
Definition constants.h:377
@ AI_PointAtNpc
Definition constants.h:386
@ AI_TurnToNpc
Definition constants.h:346
@ AI_GoToPoint
Definition constants.h:349
@ AI_DrawWeaponRange
Definition constants.h:365
@ AI_Teleport
Definition constants.h:363
@ AI_DrawWeaponMelee
Definition constants.h:364
@ AI_ProcessInfo
Definition constants.h:375
@ AI_StartState
Definition constants.h:350
@ AI_AlignToWp
Definition constants.h:379
@ AI_SetWalkMode
Definition constants.h:381
@ AI_SetNpcsToState
Definition constants.h:380
@ AI_StopLookAt
Definition constants.h:344
@ AI_PlayAnimBs
Definition constants.h:352
@ AI_UseItemToState
Definition constants.h:362
@ AI_TurnAway
Definition constants.h:392
@ AI_LookAt
Definition constants.h:390
@ AI_Wait
Definition constants.h:353
@ AI_StopPointAt
Definition constants.h:388
@ AI_EquipMelee
Definition constants.h:358
@ AI_StandUp
Definition constants.h:354
@ AI_PlayAnim
Definition constants.h:351
@ AI_EquipArmor
Definition constants.h:356
@ AI_PrintScreen
Definition constants.h:389
@ AI_Flee
Definition constants.h:368
BodyState
Definition constants.h:140
const WayPoint * point
Definition aiqueue.h:22
std::string s1
Definition aiqueue.h:30
ScriptFn func
Definition aiqueue.h:24
std::string s0
Definition aiqueue.h:27