Elin Decompiled Documentation EA 23.209 Stable Patch 2
Loading...
Searching...
No Matches
TaskCullLife.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using System.Linq;
3using UnityEngine;
4
5public class TaskCullLife : Task
6{
7 public Point dest;
8
9 public HashSet<Chara> listSkip = new HashSet<Chara>();
10
11 public static bool CanCull(Card c)
12 {
13 if (c.c_minionType == MinionType.Friend)
14 {
15 return !c.IsPCFaction;
16 }
17 return false;
18 }
19
20 public override bool CanPerform()
21 {
22 return Act.TP.FindChara((Chara c) => CanCull(c)) != null;
23 }
24
25 public override bool CanManualCancel()
26 {
27 return true;
28 }
29
30 public override IEnumerable<Status> Run()
31 {
32 while (true)
33 {
34 Chara target = GetTarget();
35 if (dest != null)
36 {
37 target = dest.FindChara((Chara c) => CanCull(c));
38 dest = null;
39 }
40 if (target == null)
41 {
42 yield return Success();
43 }
44 bool fail = false;
45 yield return DoGoto(target, delegate
46 {
47 fail = true;
48 return Status.Running;
49 });
50 if (fail || !target.IsAliveInCurrentZone)
51 {
52 listSkip.Add(target);
53 continue;
54 }
55 if (owner.Dist(target) > 1)
56 {
57 yield return Cancel();
58 }
59 owner.PlaySound("shear");
60 Msg.Say("cull_life", EClass.pc, target);
61 target.Die();
62 Thing t = ThingGen.Create("ecopo").SetNum(EClass.rndHalf((int)Mathf.Sqrt(target.LV) + 5));
63 EClass.pc.Pick(t);
64 yield return KeepRunning();
65 }
66 }
67
69 {
70 List<Chara> list = new List<Chara>();
71 foreach (Chara chara in EClass._map.charas)
72 {
73 if (!listSkip.Contains(chara) && CanCull(chara))
74 {
75 list.Add(chara);
76 }
77 }
78 if (list.Count == 0)
79 {
80 return null;
81 }
82 list.Sort((Chara a, Chara b) => EClass.pc.Dist(a) - EClass.pc.Dist(b));
83 return list.First();
84 }
85}
MinionType
Definition: MinionType.cs:2
new Chara owner
Definition: AIAct.cs:14
Status
Definition: AIAct.cs:8
Status DoGoto(Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:432
Status KeepRunning()
Definition: AIAct.cs:321
Definition: ACT.cs:62
static Point TP
Definition: ACT.cs:81
Definition: Card.cs:11
MinionType c_minionType
Definition: Card.cs:974
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5977
Thing SetNum(int a)
Definition: Card.cs:3406
int Dist(Card c)
Definition: Card.cs:7468
virtual bool IsPCFaction
Definition: Card.cs:2243
int LV
Definition: Card.cs:384
Definition: Chara.cs:10
override bool IsAliveInCurrentZone
Definition: Chara.cs:559
override void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
Definition: Chara.cs:5149
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4217
Definition: EClass.cs:5
static Map _map
Definition: EClass.cs:18
static int rndHalf(int a)
Definition: EClass.cs:87
static Chara pc
Definition: EClass.cs:14
List< Chara > charas
Definition: Map.cs:81
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
Definition: Point.cs:9
Chara FindChara(Func< Chara, bool > func)
Definition: Point.cs:1094
Chara GetTarget()
Definition: TaskCullLife.cs:68
override IEnumerable< Status > Run()
Definition: TaskCullLife.cs:30
override bool CanManualCancel()
Definition: TaskCullLife.cs:25
override bool CanPerform()
Definition: TaskCullLife.cs:20
HashSet< Chara > listSkip
Definition: TaskCullLife.cs:9
static bool CanCull(Card c)
Definition: TaskCullLife.cs:11
Definition: Task.cs:4
override Status Cancel()
Definition: Task.cs:54
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8