Elin Decompiled Documentation EA 23.286 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 T GetChild<T>() where T : AIAct
176 {
177 if (this is T)
178 {
179 return this as T;
180 }
181 AIAct aIAct = child;
182 return ((aIAct != null) ? aIAct.GetChild<T>() : null) ?? null;
183 }
184
185 public virtual void OnStart()
186 {
187 }
188
189 public void SetOwner(Chara c)
190 {
191 owner = c;
192 status = Status.Running;
193 OnSetOwner();
194 }
195
196 public virtual void OnSetOwner()
197 {
198 }
199
200 public void SetChild(AIAct seq, Func<Status> _onChildFail = null)
201 {
202 if (child != null)
203 {
204 child.Reset();
205 }
206 child = seq;
207 child.parent = this;
209 onChildFail = _onChildFail ?? new Func<Status>(Cancel);
210 }
211
212 public void Start()
213 {
214 Enumerator = Run().GetEnumerator();
215 OnStart();
216 if (owner == null)
217 {
218 return;
219 }
220 if (owner.held != null)
221 {
222 if (DropHeldOnStart)
223 {
224 owner.DropHeld();
225 }
226 else if (PickHeldOnStart)
227 {
228 owner.PickHeld();
229 }
230 }
231 if (owner.mimicry != null && ShouldEndMimicry)
232 {
234 }
235 if (RightHand != 0)
236 {
238 }
239 if (owner.IsPC && UseTurbo)
240 {
242 }
243 }
244
245 public override bool Perform()
246 {
247 Act.CC.SetAIImmediate(this);
248 return false;
249 }
250
252 {
253 restartCount++;
255 {
256 return Success();
257 }
258 byte b = restartCount;
259 Chara chara = owner;
260 Reset();
261 SetOwner(chara);
262 restartCount = b;
263 return status = Status.Running;
264 }
265
266 public Status Success(Action action = null)
267 {
268 status = Status.Success;
269 OnSuccess();
270 action?.Invoke();
272 Reset();
273 return status;
274 }
275
276 public virtual void OnSuccess()
277 {
278 }
279
280 public bool TryCancel(Card c)
281 {
282 if (!IsRunning || Enumerator == null)
283 {
284 return false;
285 }
286 if (InformCancel)
287 {
288 if (owner.IsPC)
289 {
290 owner.Say("cancel_act_pc", owner);
291 }
292 else if (c != null)
293 {
294 owner.Say("cancel_act", owner, c);
295 }
296 else
297 {
298 owner.Say("cancel_act2", owner);
299 }
300 }
301 Cancel();
302 return true;
303 }
304
305 public virtual Status Cancel()
306 {
307 status = Status.Fail;
308 if (owner != null && owner.held != null && !owner.IsPC)
309 {
310 owner.PickHeld();
311 }
312 OnCancel();
314 Reset();
315 return status;
316 }
317
318 public virtual void OnCancel()
319 {
320 }
321
322 public virtual void OnCancelOrSuccess()
323 {
324 }
325
326 public virtual bool CanManualCancel()
327 {
328 if (IsChildRunning)
329 {
330 return child is AI_Goto;
331 }
332 return false;
333 }
334
336 {
337 return Status.Running;
338 }
339
340 public void Reset()
341 {
342 if (owner != null)
343 {
344 if (child != null)
345 {
346 child.Reset();
347 }
348 OnReset();
349 if (Enumerator != null)
350 {
351 Enumerator.Dispose();
352 Enumerator = null;
353 }
354 owner = null;
355 child = null;
356 restartCount = 0;
357 onChildFail = null;
358 isFail = null;
359 }
360 }
361
362 public virtual void OnReset()
363 {
364 }
365
366 public Status Tick()
367 {
368 if (owner == null || (isFail != null && isFail()))
369 {
370 return Cancel();
371 }
372 if (IsChildRunning)
373 {
374 switch (child.Tick())
375 {
376 case Status.Fail:
377 if (onChildFail != null)
378 {
379 return onChildFail();
380 }
381 return Status.Fail;
382 case Status.Running:
383 return Status.Running;
384 case Status.Success:
385 if (owner == null || (isFail != null && isFail()))
386 {
387 return Cancel();
388 }
389 break;
390 }
391 }
392 if (Enumerator == null)
393 {
394 Start();
395 if (status != 0)
396 {
397 return status;
398 }
399 }
400 if (!Enumerator.MoveNext())
401 {
402 return Success();
403 }
404 return status;
405 }
406
407 public virtual IEnumerable<Status> Run()
408 {
409 yield return Success();
410 }
411
413 {
414 if (child == null || onChildFail == null)
415 {
416 Debug.Log(child?.ToString() + "/" + onChildFail);
417 return Status.Fail;
418 }
419 if (child.Tick() == Status.Fail)
420 {
421 if (onChildFail != null)
422 {
423 return onChildFail();
424 }
425 return Status.Fail;
426 }
427 return Status.Running;
428 }
429
430 public Status Do(AIAct _seq, Func<Status> _onChildFail = null)
431 {
432 SetChild(_seq, _onChildFail);
433 return TickChild();
434 }
435
436 public Status DoGotoInteraction(Point pos, Func<Status> _onChildFail = null)
437 {
438 if (pos == null || !pos.IsValid)
439 {
440 return _onChildFail?.Invoke() ?? Cancel();
441 }
442 SetChild(new AI_Goto(pos, 0, _ignoreConnection: false, _interaction: true), _onChildFail);
443 return TickChild();
444 }
445
446 public Status DoGoto(Point pos, int dist = 0, bool ignoreConnection = false, Func<Status> _onChildFail = null)
447 {
448 if (pos == null || !pos.IsValid)
449 {
450 return _onChildFail?.Invoke() ?? Cancel();
451 }
452 SetChild(new AI_Goto(pos, dist, ignoreConnection), _onChildFail);
453 return TickChild();
454 }
455
456 public Status DoGoto(Card card, Func<Status> _onChildFail = null)
457 {
458 return DoGoto(card, (card.isChara || card.pos.cell.blocked) ? 1 : 0, _onChildFail);
459 }
460
461 public Status DoGoto(Card card, int dist, 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 SetChild(new AI_Goto(card, dist), _onChildFail);
472 return TickChild();
473 }
474
475 public Status DoGotoSpot(Card card, Func<Status> _onChildFail = null)
476 {
477 if (card != null && card == owner.held)
478 {
479 return Status.Running;
480 }
481 if (card == null || !card.ExistsOnMap)
482 {
483 return _onChildFail?.Invoke() ?? Cancel();
484 }
485 Point randomPoint = card.trait.GetRandomPoint();
486 int dist = (randomPoint.cell.blocked ? 1 : 0);
487 SetChild(new AI_Goto(randomPoint, dist), _onChildFail);
488 return TickChild();
489 }
490
491 public Status DoGoto<T>(Func<Status> _onChildFail = null) where T : Trait
492 {
493 return DoGoto(EClass._map.Installed.traits.GetTraitSet<T>().GetRandom()?.owner, _onChildFail);
494 }
495
496 public Status DoGotoSpot<T>(Func<Status> _onChildFail = null, bool ignoreAccessType = false) where T : Trait
497 {
498 Trait random = EClass._map.Installed.traits.GetTraitSet<T>().GetRandom(ignoreAccessType ? null : owner);
499 if (random != null)
500 {
501 DoGoto(random.GetRandomPoint(null, ignoreAccessType ? null : owner), 0, ignoreConnection: false, _onChildFail);
502 }
503 return _onChildFail?.Invoke() ?? Status.Fail;
504 }
505
506 public Status DoGrab(Card card, int num = -1, bool pickHeld = false, Func<Status> _onChildFail = null)
507 {
508 if (card != null && card == owner.held)
509 {
510 return Status.Running;
511 }
512 if (card == null || !card.GetRootCard().ExistsOnMap)
513 {
514 return Cancel();
515 }
516 SetChild(new AI_Grab
517 {
518 target = card,
519 num = num,
520 pickHeld = pickHeld
521 }, _onChildFail);
522 return TickChild();
523 }
524
525 public Status DoGrab<T>() where T : Trait
526 {
527 SetChild(new AI_Grab<T>());
528 return TickChild();
529 }
530
532 {
534 return TickChild();
535 }
536
537 public Status DoIdle(int repeat = 3)
538 {
539 SetChild(new AI_Idle
540 {
541 maxRepeat = repeat
542 }, KeepRunning);
543 return TickChild();
544 }
545
546 public Status DoWait(int count = 1)
547 {
548 SetChild(new AI_Wait
549 {
550 count = count
551 }, KeepRunning);
552 return TickChild();
553 }
554
555 public virtual AIProgress CreateProgress()
556 {
557 Progress_Custom progress_Custom = new Progress_Custom
558 {
559 onProgress = delegate
560 {
561 OnProgress();
562 },
563 onProgressComplete = OnProgressComplete,
564 canProgress = CanProgress,
565 onBeforeProgress = OnBeforeProgress
566 };
567 OnCreateProgress(progress_Custom);
568 return progress_Custom;
569 }
570
571 public virtual void OnCreateProgress(Progress_Custom p)
572 {
573 }
574
575 public virtual bool CanProgress()
576 {
577 return true;
578 }
579
580 public virtual void OnBeforeProgress()
581 {
582 }
583
584 public virtual void OnProgress()
585 {
586 }
587
588 public virtual void OnProgressComplete()
589 {
590 }
591
592 public void SimulateZone(int days)
593 {
594 if (owner.conSuspend == null)
595 {
596 OnSimulateZone(days);
597 }
598 }
599
600 public virtual void OnSimulateZone(int days)
601 {
602 }
603
604 public virtual void OnSimulatePosition()
605 {
606 }
607}
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:456
Status DoGoto(Card card, int dist, Func< Status > _onChildFail=null)
Definition: AIAct.cs:461
virtual bool CanManualCancel()
Definition: AIAct.cs:326
virtual bool ShowCursor
Definition: AIAct.cs:92
Status Tick()
Definition: AIAct.cs:366
virtual bool IsIdle
Definition: AIAct.cs:78
AIAct Current
Definition: AIAct.cs:103
virtual void OnSimulateZone(int days)
Definition: AIAct.cs:600
override bool ShowRelativeAttribute
Definition: AIAct.cs:120
override bool Perform()
Definition: AIAct.cs:245
Func< Status > onChildFail
Definition: AIAct.cs:26
Status DoGrab(Card card, int num=-1, bool pickHeld=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:506
virtual void OnSetOwner()
Definition: AIAct.cs:196
virtual bool IsAutoTurn
Definition: AIAct.cs:76
Status Success(Action action=null)
Definition: AIAct.cs:266
virtual void OnCancelOrSuccess()
Definition: AIAct.cs:322
virtual bool UseTurbo
Definition: AIAct.cs:88
Status DoGotoSpot< T >(Func< Status > _onChildFail=null, bool ignoreAccessType=false)
Definition: AIAct.cs:496
void Start()
Definition: AIAct.cs:212
virtual void OnCancel()
Definition: AIAct.cs:318
AIProgress GetProgress()
Definition: AIAct.cs:148
virtual void OnProgress()
Definition: AIAct.cs:584
bool TryCancel(Card c)
Definition: AIAct.cs:280
virtual bool InformCancel
Definition: AIAct.cs:98
virtual void OnBeforeProgress()
Definition: AIAct.cs:580
IEnumerator< Status > Enumerator
Definition: AIAct.cs:18
Status DoGoto< T >(Func< Status > _onChildFail=null)
Definition: AIAct.cs:491
virtual bool ShowProgress
Definition: AIAct.cs:86
Status DoGotoInteraction(Point pos, Func< Status > _onChildFail=null)
Definition: AIAct.cs:436
bool IsMoveAI
Definition: AIAct.cs:55
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:430
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:305
void Reset()
Definition: AIAct.cs:340
virtual void OnSimulatePosition()
Definition: AIAct.cs:604
virtual void OnStart()
Definition: AIAct.cs:185
virtual bool ShouldAllyAttack(Chara tg)
Definition: AIAct.cs:134
virtual void OnCreateProgress(Progress_Custom p)
Definition: AIAct.cs:571
Status status
Definition: AIAct.cs:16
virtual AIProgress CreateProgress()
Definition: AIAct.cs:555
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:407
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:276
Status DoGotoSpot(Card card, Func< Status > _onChildFail=null)
Definition: AIAct.cs:475
virtual bool CancelWhenDamaged
Definition: AIAct.cs:94
override bool IsToolValid()
Definition: AIAct.cs:166
virtual void OnReset()
Definition: AIAct.cs:362
void SetOwner(Chara c)
Definition: AIAct.cs:189
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:588
Status DoWait(int count=1)
Definition: AIAct.cs:546
AIAct parent
Definition: AIAct.cs:22
Status DoProgress()
Definition: AIAct.cs:531
Status DoGoto(Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:446
void SetChild(AIAct seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:200
Status DoIdle(int repeat=3)
Definition: AIAct.cs:537
virtual bool CancelWhenMoved
Definition: AIAct.cs:96
virtual int CurrentProgress
Definition: AIAct.cs:90
Status KeepRunning()
Definition: AIAct.cs:335
virtual bool CanProgress()
Definition: AIAct.cs:575
virtual MultiSprite stateIcon
Definition: AIAct.cs:70
string GetCurrentActionText()
Definition: AIAct.cs:157
Status TickChild()
Definition: AIAct.cs:412
void SimulateZone(int days)
Definition: AIAct.cs:592
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:251
Status DoGrab< T >()
Definition: AIAct.cs:525
override bool UsePotential
Definition: AIAct.cs:118
virtual int MaxRestart
Definition: AIAct.cs:66
T GetChild< T >()
Definition: AIAct.cs:175
void SetTurbo(int mtp=-1)
Definition: AM_Adv.cs:1086
Definition: ACT.cs:62
virtual bool PickHeldOnStart
Definition: ACT.cs:117
virtual int RightHand
Definition: ACT.cs:109
static Chara CC
Definition: ACT.cs:77
static Thing TOOL
Definition: ACT.cs:83
virtual int LeftHand
Definition: ACT.cs:107
virtual bool DropHeldOnStart
Definition: ACT.cs:119
virtual bool ShouldEndMimicry
Definition: ACT.cs:133
static AM_Adv Adv
Definition: ActionMode.cs:15
Definition: Card.cs:11
Point pos
Definition: Card.cs:60
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7052
Definition: Chara.cs:10
Card held
Definition: Chara.cs:70
ConSuspend conSuspend
Definition: Chara.cs:104
override bool IsPC
Definition: Chara.cs:626
void PickHeld(bool msg=false)
Definition: Chara.cs:4600
ConTransmuteMimic mimicry
Definition: Chara.cs:106
void SetAIImmediate(AIAct g)
Definition: Chara.cs:9113
void SetTempHand(int right=0, int left=0)
Definition: Chara.cs:6850
Card DropHeld(Point dropPos=null)
Definition: Chara.cs:4677
void Kill(bool silent=false)
Definition: Condition.cs:91
OrbitIcons orbitIcons
Definition: CoreRef.cs:347
CoreRef refs
Definition: Core.cs:51
Definition: EClass.cs:6
static Core core
Definition: EClass.cs:7
static Map _map
Definition: EClass.cs:19
static Chara pc
Definition: EClass.cs:15
SourceElement.Row source
Definition: ELEMENT.cs:278
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:761
Card owner
Definition: Trait.cs:28