Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
AIAct.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using UnityEngine;
4
5public class AIAct : Act
6{
7 public enum Status
8 {
10 Fail,
12 }
13
14 public new Chara owner;
15
16 public Status status;
17
18 public IEnumerator<Status> Enumerator;
19
20 public AIAct child;
21
22 public AIAct parent;
23
24 public byte restartCount;
25
26 public Func<Status> onChildFail;
27
28 public Func<bool> isFail;
29
30 public virtual bool IsRunning
31 {
32 get
33 {
34 if (status == Status.Running)
35 {
36 return owner != null;
37 }
38 return false;
39 }
40 }
41
42 public bool IsChildRunning
43 {
44 get
45 {
46 if (child != null && child.status == Status.Running)
47 {
48 return child.owner != null;
49 }
50 return false;
51 }
52 }
53
54 public bool IsMoveAI
55 {
56 get
57 {
58 if (!IsChildRunning)
59 {
60 return this is AI_Goto;
61 }
62 return child.IsMoveAI;
63 }
64 }
65
66 public virtual int MaxRestart => 5;
67
68 public new virtual string Name => base.source.GetName();
69
70 protected virtual MultiSprite stateIcon => null;
71
72 public virtual Sprite actionIcon => EClass.core.refs.orbitIcons.Default;
73
74 public virtual bool IsNoGoal => false;
75
76 public virtual bool IsAutoTurn => false;
77
78 public virtual bool IsIdle => false;
79
80 public virtual bool CancelOnAggro => true;
81
82 public virtual bool PushChara => true;
83
84 public virtual int MaxProgress => 20;
85
86 public virtual bool ShowProgress => true;
87
88 public virtual bool UseTurbo => true;
89
90 public virtual int CurrentProgress => 0;
91
92 public virtual bool ShowCursor => true;
93
94 public virtual bool CancelWhenDamaged => true;
95
96 public virtual bool CancelWhenMoved => false;
97
98 public virtual bool InformCancel => true;
99
100 public virtual Thing RenderThing => null;
101
103 {
104 get
105 {
106 if (!IsChildRunning)
107 {
108 return this;
109 }
110 return child.Current;
111 }
112 }
113
114 public override bool IsAct => false;
115
116 public override bool ShowPotential => false;
117
118 public override bool UsePotential => false;
119
120 public override bool ShowRelativeAttribute => true;
121
122 public virtual bool HasProgress => true;
123
124 public override string ToString()
125 {
126 return GetType().Name;
127 }
128
129 public override MultiSprite GetStateIcon()
130 {
131 return (child ?? this).stateIcon;
132 }
133
134 public virtual bool ShouldAllyAttack(Chara tg)
135 {
136 return child?.ShouldAllyAttack(tg) ?? true;
137 }
138
139 public virtual Point GetDestination()
140 {
141 if (!IsChildRunning)
142 {
143 return owner.pos;
144 }
145 return child.GetDestination();
146 }
147
149 {
150 if (IsChildRunning)
151 {
152 return child.GetProgress();
153 }
154 return this as AIProgress;
155 }
156
157 public string GetCurrentActionText()
158 {
159 if (IsChildRunning && child.source.id != 0 && !child.source.name_JP.IsEmpty())
160 {
162 }
163 return base.source.GetName().IsEmpty("idle".lang());
164 }
165
166 public override bool IsToolValid()
167 {
168 if (owner == EClass.pc && Act.TOOL != null)
169 {
170 return Act.TOOL.parent == EClass.pc;
171 }
172 return false;
173 }
174
175 public virtual void OnStart()
176 {
177 }
178
179 public void SetOwner(Chara c)
180 {
181 owner = c;
182 status = Status.Running;
183 OnSetOwner();
184 }
185
186 public virtual void OnSetOwner()
187 {
188 }
189
190 public void SetChild(AIAct seq, Func<Status> _onChildFail = null)
191 {
192 if (child != null)
193 {
194 child.Reset();
195 }
196 child = seq;
197 child.parent = this;
199 onChildFail = _onChildFail ?? new Func<Status>(Cancel);
200 }
201
202 public void Start()
203 {
204 Enumerator = Run().GetEnumerator();
205 OnStart();
206 if (owner == null)
207 {
208 return;
209 }
210 if (owner.held != null)
211 {
212 if (DropHeldOnStart)
213 {
214 owner.DropHeld();
215 }
216 else if (PickHeldOnStart)
217 {
218 owner.PickHeld();
219 }
220 }
221 if (RightHand != 0)
222 {
224 }
225 if (owner.IsPC && UseTurbo)
226 {
228 }
229 }
230
231 public override bool Perform()
232 {
233 Act.CC.SetAIImmediate(this);
234 return false;
235 }
236
238 {
239 restartCount++;
241 {
242 return Success();
243 }
244 byte b = restartCount;
245 Chara chara = owner;
246 Reset();
247 SetOwner(chara);
248 restartCount = b;
249 return status = Status.Running;
250 }
251
252 public Status Success(Action action = null)
253 {
254 status = Status.Success;
255 OnSuccess();
256 action?.Invoke();
258 Reset();
259 return status;
260 }
261
262 public virtual void OnSuccess()
263 {
264 }
265
266 public bool TryCancel(Card c)
267 {
268 if (!IsRunning || Enumerator == null)
269 {
270 return false;
271 }
272 if (InformCancel)
273 {
274 if (owner.IsPC)
275 {
276 owner.Say("cancel_act_pc", owner);
277 }
278 else if (c != null)
279 {
280 owner.Say("cancel_act", owner, c);
281 }
282 else
283 {
284 owner.Say("cancel_act2", owner);
285 }
286 }
287 Cancel();
288 return true;
289 }
290
291 public virtual Status Cancel()
292 {
293 status = Status.Fail;
294 if (owner != null && owner.held != null && !owner.IsPC)
295 {
296 owner.PickHeld();
297 }
298 OnCancel();
300 Reset();
301 return status;
302 }
303
304 public virtual void OnCancel()
305 {
306 }
307
308 public virtual void OnCancelOrSuccess()
309 {
310 }
311
312 public virtual bool CanManualCancel()
313 {
314 if (IsChildRunning)
315 {
316 return child is AI_Goto;
317 }
318 return false;
319 }
320
322 {
323 return Status.Running;
324 }
325
326 public void Reset()
327 {
328 if (owner != null)
329 {
330 if (child != null)
331 {
332 child.Reset();
333 }
334 OnReset();
335 if (Enumerator != null)
336 {
337 Enumerator.Dispose();
338 Enumerator = null;
339 }
340 owner = null;
341 child = null;
342 restartCount = 0;
343 onChildFail = null;
344 isFail = null;
345 }
346 }
347
348 public virtual void OnReset()
349 {
350 }
351
352 public Status Tick()
353 {
354 if (owner == null || (isFail != null && isFail()))
355 {
356 return Cancel();
357 }
358 if (IsChildRunning)
359 {
360 switch (child.Tick())
361 {
362 case Status.Fail:
363 if (onChildFail != null)
364 {
365 return onChildFail();
366 }
367 return Status.Fail;
368 case Status.Running:
369 return Status.Running;
370 case Status.Success:
371 if (owner == null || (isFail != null && isFail()))
372 {
373 return Cancel();
374 }
375 break;
376 }
377 }
378 if (Enumerator == null)
379 {
380 Start();
381 if (status != 0)
382 {
383 return status;
384 }
385 }
386 if (!Enumerator.MoveNext())
387 {
388 return Success();
389 }
390 return status;
391 }
392
393 public virtual IEnumerable<Status> Run()
394 {
395 yield return Success();
396 }
397
399 {
400 if (child == null || onChildFail == null)
401 {
402 Debug.Log(child?.ToString() + "/" + onChildFail);
403 return Status.Fail;
404 }
405 if (child.Tick() == Status.Fail)
406 {
407 if (onChildFail != null)
408 {
409 return onChildFail();
410 }
411 return Status.Fail;
412 }
413 return Status.Running;
414 }
415
416 public Status Do(AIAct _seq, Func<Status> _onChildFail = null)
417 {
418 SetChild(_seq, _onChildFail);
419 return TickChild();
420 }
421
422 public Status DoGotoInteraction(Point pos, Func<Status> _onChildFail = null)
423 {
424 if (pos == null || !pos.IsValid)
425 {
426 return _onChildFail?.Invoke() ?? Cancel();
427 }
428 SetChild(new AI_Goto(pos, 0, _ignoreConnection: false, _interaction: true), _onChildFail);
429 return TickChild();
430 }
431
432 public Status DoGoto(Point pos, int dist = 0, bool ignoreConnection = false, Func<Status> _onChildFail = null)
433 {
434 if (pos == null || !pos.IsValid)
435 {
436 return _onChildFail?.Invoke() ?? Cancel();
437 }
438 SetChild(new AI_Goto(pos, dist, ignoreConnection), _onChildFail);
439 return TickChild();
440 }
441
442 public Status DoGoto(Card card, Func<Status> _onChildFail = null)
443 {
444 return DoGoto(card, (card.isChara || card.pos.cell.blocked) ? 1 : 0, _onChildFail);
445 }
446
447 public Status DoGoto(Card card, int dist, Func<Status> _onChildFail = null)
448 {
449 if (card != null && card == owner.held)
450 {
451 return Status.Running;
452 }
453 if (card == null || !card.ExistsOnMap)
454 {
455 return _onChildFail?.Invoke() ?? Cancel();
456 }
457 SetChild(new AI_Goto(card, dist), _onChildFail);
458 return TickChild();
459 }
460
461 public Status DoGotoSpot(Card card, Func<Status> _onChildFail = null)
462 {
463 if (card != null && card == owner.held)
464 {
465 return Status.Running;
466 }
467 if (card == null || !card.ExistsOnMap)
468 {
469 return _onChildFail?.Invoke() ?? Cancel();
470 }
471 Point randomPoint = card.trait.GetRandomPoint();
472 int dist = (randomPoint.cell.blocked ? 1 : 0);
473 SetChild(new AI_Goto(randomPoint, dist), _onChildFail);
474 return TickChild();
475 }
476
477 public Status DoGoto<T>(Func<Status> _onChildFail = null) where T : Trait
478 {
479 return DoGoto(EClass._map.Installed.traits.GetTraitSet<T>().GetRandom()?.owner, _onChildFail);
480 }
481
482 public Status DoGotoSpot<T>(Func<Status> _onChildFail = null, bool ignoreAccessType = false) where T : Trait
483 {
484 Trait random = EClass._map.Installed.traits.GetTraitSet<T>().GetRandom(ignoreAccessType ? null : owner);
485 if (random != null)
486 {
487 DoGoto(random.GetRandomPoint(null, ignoreAccessType ? null : owner), 0, ignoreConnection: false, _onChildFail);
488 }
489 return _onChildFail?.Invoke() ?? Status.Fail;
490 }
491
492 public Status DoGrab(Card card, int num = -1, bool pickHeld = false, Func<Status> _onChildFail = null)
493 {
494 if (card != null && card == owner.held)
495 {
496 return Status.Running;
497 }
498 if (card == null || !card.GetRootCard().ExistsOnMap)
499 {
500 return Cancel();
501 }
502 SetChild(new AI_Grab
503 {
504 target = card,
505 num = num,
506 pickHeld = pickHeld
507 }, _onChildFail);
508 return TickChild();
509 }
510
511 public Status DoGrab<T>() where T : Trait
512 {
513 SetChild(new AI_Grab<T>());
514 return TickChild();
515 }
516
518 {
520 return TickChild();
521 }
522
523 public Status DoIdle(int repeat = 3)
524 {
525 SetChild(new AI_Idle
526 {
527 maxRepeat = repeat
528 }, KeepRunning);
529 return TickChild();
530 }
531
532 public Status DoWait(int count = 1)
533 {
534 SetChild(new AI_Wait
535 {
536 count = count
537 }, KeepRunning);
538 return TickChild();
539 }
540
541 public virtual AIProgress CreateProgress()
542 {
543 Progress_Custom progress_Custom = new Progress_Custom
544 {
545 onProgress = delegate
546 {
547 OnProgress();
548 },
549 onProgressComplete = OnProgressComplete,
550 canProgress = CanProgress,
551 onBeforeProgress = OnBeforeProgress
552 };
553 OnCreateProgress(progress_Custom);
554 return progress_Custom;
555 }
556
557 public virtual void OnCreateProgress(Progress_Custom p)
558 {
559 }
560
561 public virtual bool CanProgress()
562 {
563 return true;
564 }
565
566 public virtual void OnBeforeProgress()
567 {
568 }
569
570 public virtual void OnProgress()
571 {
572 }
573
574 public virtual void OnProgressComplete()
575 {
576 }
577
578 public void SimulateZone(int days)
579 {
580 if (owner.conSuspend == null)
581 {
582 OnSimulateZone(days);
583 }
584 }
585
586 public virtual void OnSimulateZone(int days)
587 {
588 }
589
590 public virtual void OnSimulatePosition()
591 {
592 }
593}
Definition: AIAct.cs:6
virtual Thing RenderThing
Definition: AIAct.cs:100
byte restartCount
Definition: AIAct.cs:24
Status DoGoto(Card card, Func< Status > _onChildFail=null)
Definition: AIAct.cs:442
Status DoGoto(Card card, int dist, Func< Status > _onChildFail=null)
Definition: AIAct.cs:447
virtual bool CanManualCancel()
Definition: AIAct.cs:312
virtual bool ShowCursor
Definition: AIAct.cs:92
Status Tick()
Definition: AIAct.cs:352
virtual bool IsIdle
Definition: AIAct.cs:78
AIAct Current
Definition: AIAct.cs:103
virtual void OnSimulateZone(int days)
Definition: AIAct.cs:586
override bool ShowRelativeAttribute
Definition: AIAct.cs:120
override bool Perform()
Definition: AIAct.cs:231
Func< Status > onChildFail
Definition: AIAct.cs:26
Status DoGrab(Card card, int num=-1, bool pickHeld=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:492
virtual void OnSetOwner()
Definition: AIAct.cs:186
virtual bool IsAutoTurn
Definition: AIAct.cs:76
Status Success(Action action=null)
Definition: AIAct.cs:252
virtual void OnCancelOrSuccess()
Definition: AIAct.cs:308
virtual bool UseTurbo
Definition: AIAct.cs:88
Status DoGotoSpot< T >(Func< Status > _onChildFail=null, bool ignoreAccessType=false)
Definition: AIAct.cs:482
void Start()
Definition: AIAct.cs:202
virtual void OnCancel()
Definition: AIAct.cs:304
AIProgress GetProgress()
Definition: AIAct.cs:148
virtual void OnProgress()
Definition: AIAct.cs:570
bool TryCancel(Card c)
Definition: AIAct.cs:266
virtual bool InformCancel
Definition: AIAct.cs:98
virtual void OnBeforeProgress()
Definition: AIAct.cs:566
IEnumerator< Status > Enumerator
Definition: AIAct.cs:18
Status DoGoto< T >(Func< Status > _onChildFail=null)
Definition: AIAct.cs:477
virtual bool ShowProgress
Definition: AIAct.cs:86
Status DoGotoInteraction(Point pos, Func< Status > _onChildFail=null)
Definition: AIAct.cs:422
bool IsMoveAI
Definition: AIAct.cs:55
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:416
virtual bool IsRunning
Definition: AIAct.cs:31
virtual int MaxProgress
Definition: AIAct.cs:84
virtual bool PushChara
Definition: AIAct.cs:82
virtual Status Cancel()
Definition: AIAct.cs:291
void Reset()
Definition: AIAct.cs:326
virtual void OnSimulatePosition()
Definition: AIAct.cs:590
virtual void OnStart()
Definition: AIAct.cs:175
virtual bool ShouldAllyAttack(Chara tg)
Definition: AIAct.cs:134
virtual void OnCreateProgress(Progress_Custom p)
Definition: AIAct.cs:557
Status status
Definition: AIAct.cs:16
virtual AIProgress CreateProgress()
Definition: AIAct.cs:541
new Chara owner
Definition: AIAct.cs:14
virtual bool HasProgress
Definition: AIAct.cs:122
virtual bool IsNoGoal
Definition: AIAct.cs:74
virtual IEnumerable< Status > Run()
Definition: AIAct.cs:393
virtual Sprite actionIcon
Definition: AIAct.cs:72
Func< bool > isFail
Definition: AIAct.cs:28
AIAct child
Definition: AIAct.cs:20
Status
Definition: AIAct.cs:8
override MultiSprite GetStateIcon()
Definition: AIAct.cs:129
virtual bool CancelOnAggro
Definition: AIAct.cs:80
virtual void OnSuccess()
Definition: AIAct.cs:262
Status DoGotoSpot(Card card, Func< Status > _onChildFail=null)
Definition: AIAct.cs:461
virtual bool CancelWhenDamaged
Definition: AIAct.cs:94
override bool IsToolValid()
Definition: AIAct.cs:166
virtual void OnReset()
Definition: AIAct.cs:348
void SetOwner(Chara c)
Definition: AIAct.cs:179
override string ToString()
Definition: AIAct.cs:124
override bool IsAct
Definition: AIAct.cs:114
virtual new string Name
Definition: AIAct.cs:68
virtual void OnProgressComplete()
Definition: AIAct.cs:574
Status DoWait(int count=1)
Definition: AIAct.cs:532
AIAct parent
Definition: AIAct.cs:22
Status DoProgress()
Definition: AIAct.cs:517
Status DoGoto(Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:432
void SetChild(AIAct seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:190
Status DoIdle(int repeat=3)
Definition: AIAct.cs:523
virtual bool CancelWhenMoved
Definition: AIAct.cs:96
virtual int CurrentProgress
Definition: AIAct.cs:90
Status KeepRunning()
Definition: AIAct.cs:321
virtual bool CanProgress()
Definition: AIAct.cs:561
virtual MultiSprite stateIcon
Definition: AIAct.cs:70
string GetCurrentActionText()
Definition: AIAct.cs:157
Status TickChild()
Definition: AIAct.cs:398
void SimulateZone(int days)
Definition: AIAct.cs:578
bool IsChildRunning
Definition: AIAct.cs:43
override bool ShowPotential
Definition: AIAct.cs:116
virtual Point GetDestination()
Definition: AIAct.cs:139
Status Restart()
Definition: AIAct.cs:237
Status DoGrab< T >()
Definition: AIAct.cs:511
override bool UsePotential
Definition: AIAct.cs:118
virtual int MaxRestart
Definition: AIAct.cs:66
void SetTurbo(int mtp=-1)
Definition: AM_Adv.cs:1040
Definition: ACT.cs:62
virtual bool PickHeldOnStart
Definition: ACT.cs:115
virtual int RightHand
Definition: ACT.cs:107
static Chara CC
Definition: ACT.cs:77
static Thing TOOL
Definition: ACT.cs:83
virtual int LeftHand
Definition: ACT.cs:105
virtual bool DropHeldOnStart
Definition: ACT.cs:117
static AM_Adv Adv
Definition: ActionMode.cs:15
Definition: Card.cs:11
Point pos
Definition: Card.cs:55
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6046
Definition: Chara.cs:10
Card held
Definition: Chara.cs:67
ConSuspend conSuspend
Definition: Chara.cs:101
override bool IsPC
Definition: Chara.cs:597
void PickHeld(bool msg=false)
Definition: Chara.cs:4136
void SetAIImmediate(AIAct g)
Definition: Chara.cs:8077
void SetTempHand(int right=0, int left=0)
Definition: Chara.cs:6057
Card DropHeld(Point dropPos=null)
Definition: Chara.cs:4213
OrbitIcons orbitIcons
Definition: CoreRef.cs:331
CoreRef refs
Definition: Core.cs:51
Definition: EClass.cs:5
static Core core
Definition: EClass.cs:6
static Map _map
Definition: EClass.cs:18
static Chara pc
Definition: EClass.cs:14
SourceElement.Row source
Definition: ELEMENT.cs:263
PropsInstalled Installed
Definition: Map.cs:123
Definition: Point.cs:9
bool IsValid
Definition: Point.cs:88
TraitManager traits
Definition: Props.cs:18
Definition: Thing.cs:8
TraitSet GetTraitSet(Type t)
Definition: TraitManager.cs:94
Trait GetRandom()
Definition: TraitSet.cs:7
Definition: Trait.cs:7
Point GetRandomPoint(Func< Point, bool > func=null, Chara accessChara=null)
Definition: Trait.cs:689
Card owner
Definition: Trait.cs:26