Elin Decompiled Documentation EA 23.264 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 (owner.mimicry != null && ShouldEndMimicry)
222 {
224 }
225 if (RightHand != 0)
226 {
228 }
229 if (owner.IsPC && UseTurbo)
230 {
232 }
233 }
234
235 public override bool Perform()
236 {
237 Act.CC.SetAIImmediate(this);
238 return false;
239 }
240
242 {
243 restartCount++;
245 {
246 return Success();
247 }
248 byte b = restartCount;
249 Chara chara = owner;
250 Reset();
251 SetOwner(chara);
252 restartCount = b;
253 return status = Status.Running;
254 }
255
256 public Status Success(Action action = null)
257 {
258 status = Status.Success;
259 OnSuccess();
260 action?.Invoke();
262 Reset();
263 return status;
264 }
265
266 public virtual void OnSuccess()
267 {
268 }
269
270 public bool TryCancel(Card c)
271 {
272 if (!IsRunning || Enumerator == null)
273 {
274 return false;
275 }
276 if (InformCancel)
277 {
278 if (owner.IsPC)
279 {
280 owner.Say("cancel_act_pc", owner);
281 }
282 else if (c != null)
283 {
284 owner.Say("cancel_act", owner, c);
285 }
286 else
287 {
288 owner.Say("cancel_act2", owner);
289 }
290 }
291 Cancel();
292 return true;
293 }
294
295 public virtual Status Cancel()
296 {
297 status = Status.Fail;
298 if (owner != null && owner.held != null && !owner.IsPC)
299 {
300 owner.PickHeld();
301 }
302 OnCancel();
304 Reset();
305 return status;
306 }
307
308 public virtual void OnCancel()
309 {
310 }
311
312 public virtual void OnCancelOrSuccess()
313 {
314 }
315
316 public virtual bool CanManualCancel()
317 {
318 if (IsChildRunning)
319 {
320 return child is AI_Goto;
321 }
322 return false;
323 }
324
326 {
327 return Status.Running;
328 }
329
330 public void Reset()
331 {
332 if (owner != null)
333 {
334 if (child != null)
335 {
336 child.Reset();
337 }
338 OnReset();
339 if (Enumerator != null)
340 {
341 Enumerator.Dispose();
342 Enumerator = null;
343 }
344 owner = null;
345 child = null;
346 restartCount = 0;
347 onChildFail = null;
348 isFail = null;
349 }
350 }
351
352 public virtual void OnReset()
353 {
354 }
355
356 public Status Tick()
357 {
358 if (owner == null || (isFail != null && isFail()))
359 {
360 return Cancel();
361 }
362 if (IsChildRunning)
363 {
364 switch (child.Tick())
365 {
366 case Status.Fail:
367 if (onChildFail != null)
368 {
369 return onChildFail();
370 }
371 return Status.Fail;
372 case Status.Running:
373 return Status.Running;
374 case Status.Success:
375 if (owner == null || (isFail != null && isFail()))
376 {
377 return Cancel();
378 }
379 break;
380 }
381 }
382 if (Enumerator == null)
383 {
384 Start();
385 if (status != 0)
386 {
387 return status;
388 }
389 }
390 if (!Enumerator.MoveNext())
391 {
392 return Success();
393 }
394 return status;
395 }
396
397 public virtual IEnumerable<Status> Run()
398 {
399 yield return Success();
400 }
401
403 {
404 if (child == null || onChildFail == null)
405 {
406 Debug.Log(child?.ToString() + "/" + onChildFail);
407 return Status.Fail;
408 }
409 if (child.Tick() == Status.Fail)
410 {
411 if (onChildFail != null)
412 {
413 return onChildFail();
414 }
415 return Status.Fail;
416 }
417 return Status.Running;
418 }
419
420 public Status Do(AIAct _seq, Func<Status> _onChildFail = null)
421 {
422 SetChild(_seq, _onChildFail);
423 return TickChild();
424 }
425
426 public Status DoGotoInteraction(Point pos, Func<Status> _onChildFail = null)
427 {
428 if (pos == null || !pos.IsValid)
429 {
430 return _onChildFail?.Invoke() ?? Cancel();
431 }
432 SetChild(new AI_Goto(pos, 0, _ignoreConnection: false, _interaction: true), _onChildFail);
433 return TickChild();
434 }
435
436 public Status DoGoto(Point pos, int dist = 0, bool ignoreConnection = false, Func<Status> _onChildFail = null)
437 {
438 if (pos == null || !pos.IsValid)
439 {
440 return _onChildFail?.Invoke() ?? Cancel();
441 }
442 SetChild(new AI_Goto(pos, dist, ignoreConnection), _onChildFail);
443 return TickChild();
444 }
445
446 public Status DoGoto(Card card, Func<Status> _onChildFail = null)
447 {
448 return DoGoto(card, (card.isChara || card.pos.cell.blocked) ? 1 : 0, _onChildFail);
449 }
450
451 public Status DoGoto(Card card, int dist, Func<Status> _onChildFail = null)
452 {
453 if (card != null && card == owner.held)
454 {
455 return Status.Running;
456 }
457 if (card == null || !card.ExistsOnMap)
458 {
459 return _onChildFail?.Invoke() ?? Cancel();
460 }
461 SetChild(new AI_Goto(card, dist), _onChildFail);
462 return TickChild();
463 }
464
465 public Status DoGotoSpot(Card card, Func<Status> _onChildFail = null)
466 {
467 if (card != null && card == owner.held)
468 {
469 return Status.Running;
470 }
471 if (card == null || !card.ExistsOnMap)
472 {
473 return _onChildFail?.Invoke() ?? Cancel();
474 }
475 Point randomPoint = card.trait.GetRandomPoint();
476 int dist = (randomPoint.cell.blocked ? 1 : 0);
477 SetChild(new AI_Goto(randomPoint, dist), _onChildFail);
478 return TickChild();
479 }
480
481 public Status DoGoto<T>(Func<Status> _onChildFail = null) where T : Trait
482 {
483 return DoGoto(EClass._map.Installed.traits.GetTraitSet<T>().GetRandom()?.owner, _onChildFail);
484 }
485
486 public Status DoGotoSpot<T>(Func<Status> _onChildFail = null, bool ignoreAccessType = false) where T : Trait
487 {
488 Trait random = EClass._map.Installed.traits.GetTraitSet<T>().GetRandom(ignoreAccessType ? null : owner);
489 if (random != null)
490 {
491 DoGoto(random.GetRandomPoint(null, ignoreAccessType ? null : owner), 0, ignoreConnection: false, _onChildFail);
492 }
493 return _onChildFail?.Invoke() ?? Status.Fail;
494 }
495
496 public Status DoGrab(Card card, int num = -1, bool pickHeld = false, Func<Status> _onChildFail = null)
497 {
498 if (card != null && card == owner.held)
499 {
500 return Status.Running;
501 }
502 if (card == null || !card.GetRootCard().ExistsOnMap)
503 {
504 return Cancel();
505 }
506 SetChild(new AI_Grab
507 {
508 target = card,
509 num = num,
510 pickHeld = pickHeld
511 }, _onChildFail);
512 return TickChild();
513 }
514
515 public Status DoGrab<T>() where T : Trait
516 {
517 SetChild(new AI_Grab<T>());
518 return TickChild();
519 }
520
522 {
524 return TickChild();
525 }
526
527 public Status DoIdle(int repeat = 3)
528 {
529 SetChild(new AI_Idle
530 {
531 maxRepeat = repeat
532 }, KeepRunning);
533 return TickChild();
534 }
535
536 public Status DoWait(int count = 1)
537 {
538 SetChild(new AI_Wait
539 {
540 count = count
541 }, KeepRunning);
542 return TickChild();
543 }
544
545 public virtual AIProgress CreateProgress()
546 {
547 Progress_Custom progress_Custom = new Progress_Custom
548 {
549 onProgress = delegate
550 {
551 OnProgress();
552 },
553 onProgressComplete = OnProgressComplete,
554 canProgress = CanProgress,
555 onBeforeProgress = OnBeforeProgress
556 };
557 OnCreateProgress(progress_Custom);
558 return progress_Custom;
559 }
560
561 public virtual void OnCreateProgress(Progress_Custom p)
562 {
563 }
564
565 public virtual bool CanProgress()
566 {
567 return true;
568 }
569
570 public virtual void OnBeforeProgress()
571 {
572 }
573
574 public virtual void OnProgress()
575 {
576 }
577
578 public virtual void OnProgressComplete()
579 {
580 }
581
582 public void SimulateZone(int days)
583 {
584 if (owner.conSuspend == null)
585 {
586 OnSimulateZone(days);
587 }
588 }
589
590 public virtual void OnSimulateZone(int days)
591 {
592 }
593
594 public virtual void OnSimulatePosition()
595 {
596 }
597}
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:446
Status DoGoto(Card card, int dist, Func< Status > _onChildFail=null)
Definition: AIAct.cs:451
virtual bool CanManualCancel()
Definition: AIAct.cs:316
virtual bool ShowCursor
Definition: AIAct.cs:92
Status Tick()
Definition: AIAct.cs:356
virtual bool IsIdle
Definition: AIAct.cs:78
AIAct Current
Definition: AIAct.cs:103
virtual void OnSimulateZone(int days)
Definition: AIAct.cs:590
override bool ShowRelativeAttribute
Definition: AIAct.cs:120
override bool Perform()
Definition: AIAct.cs:235
Func< Status > onChildFail
Definition: AIAct.cs:26
Status DoGrab(Card card, int num=-1, bool pickHeld=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:496
virtual void OnSetOwner()
Definition: AIAct.cs:186
virtual bool IsAutoTurn
Definition: AIAct.cs:76
Status Success(Action action=null)
Definition: AIAct.cs:256
virtual void OnCancelOrSuccess()
Definition: AIAct.cs:312
virtual bool UseTurbo
Definition: AIAct.cs:88
Status DoGotoSpot< T >(Func< Status > _onChildFail=null, bool ignoreAccessType=false)
Definition: AIAct.cs:486
void Start()
Definition: AIAct.cs:202
virtual void OnCancel()
Definition: AIAct.cs:308
AIProgress GetProgress()
Definition: AIAct.cs:148
virtual void OnProgress()
Definition: AIAct.cs:574
bool TryCancel(Card c)
Definition: AIAct.cs:270
virtual bool InformCancel
Definition: AIAct.cs:98
virtual void OnBeforeProgress()
Definition: AIAct.cs:570
IEnumerator< Status > Enumerator
Definition: AIAct.cs:18
Status DoGoto< T >(Func< Status > _onChildFail=null)
Definition: AIAct.cs:481
virtual bool ShowProgress
Definition: AIAct.cs:86
Status DoGotoInteraction(Point pos, Func< Status > _onChildFail=null)
Definition: AIAct.cs:426
bool IsMoveAI
Definition: AIAct.cs:55
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:420
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:295
void Reset()
Definition: AIAct.cs:330
virtual void OnSimulatePosition()
Definition: AIAct.cs:594
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:561
Status status
Definition: AIAct.cs:16
virtual AIProgress CreateProgress()
Definition: AIAct.cs:545
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:397
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:266
Status DoGotoSpot(Card card, Func< Status > _onChildFail=null)
Definition: AIAct.cs:465
virtual bool CancelWhenDamaged
Definition: AIAct.cs:94
override bool IsToolValid()
Definition: AIAct.cs:166
virtual void OnReset()
Definition: AIAct.cs:352
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:578
Status DoWait(int count=1)
Definition: AIAct.cs:536
AIAct parent
Definition: AIAct.cs:22
Status DoProgress()
Definition: AIAct.cs:521
Status DoGoto(Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:436
void SetChild(AIAct seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:190
Status DoIdle(int repeat=3)
Definition: AIAct.cs:527
virtual bool CancelWhenMoved
Definition: AIAct.cs:96
virtual int CurrentProgress
Definition: AIAct.cs:90
Status KeepRunning()
Definition: AIAct.cs:325
virtual bool CanProgress()
Definition: AIAct.cs:565
virtual MultiSprite stateIcon
Definition: AIAct.cs:70
string GetCurrentActionText()
Definition: AIAct.cs:157
Status TickChild()
Definition: AIAct.cs:402
void SimulateZone(int days)
Definition: AIAct.cs:582
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:241
Status DoGrab< T >()
Definition: AIAct.cs:515
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: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:6991
Definition: Chara.cs:10
Card held
Definition: Chara.cs:70
ConSuspend conSuspend
Definition: Chara.cs:104
override bool IsPC
Definition: Chara.cs:614
void PickHeld(bool msg=false)
Definition: Chara.cs:4518
ConTransmuteMimic mimicry
Definition: Chara.cs:106
void SetAIImmediate(AIAct g)
Definition: Chara.cs:8893
void SetTempHand(int right=0, int left=0)
Definition: Chara.cs:6676
Card DropHeld(Point dropPos=null)
Definition: Chara.cs:4595
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