Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
TaskWater.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2
3public class TaskWater : Task
4{
5 public Point dest;
6
7 public TraitToolWaterCan waterCan => (owner ?? Act.CC)?.held?.trait as TraitToolWaterCan;
8
9 public override string GetText(string str = "")
10 {
11 if (dest == null || !dest.cell.HasFire)
12 {
13 return base.GetText(str);
14 }
15 return "TaskWaterFire".lang();
16 }
17
18 public override bool CanPerform()
19 {
20 if (ShouldWater(Act.TP))
21 {
22 return IsWaterCanValid(msg: false);
23 }
24 return false;
25 }
26
27 public override bool CanManualCancel()
28 {
29 return true;
30 }
31
32 public override IEnumerable<Status> Run()
33 {
34 dest = new Point(dest);
35 List<Point> list = ListPoints();
36 while (list.Count != 0)
37 {
38 list.Sort((Point a, Point b) => a.Distance(dest) - b.Distance(dest));
39 Point p = list[0];
40 dest.Set(p);
41 list.RemoveAt(0);
42 if (!ShouldWater(p))
43 {
44 continue;
45 }
46 if (!IsWaterCanValid())
47 {
48 yield return Cancel();
49 }
50 bool fail = false;
51 yield return DoGoto(p, 1, ignoreConnection: false, delegate
52 {
53 fail = true;
54 return Status.Running;
55 });
56 if (fail)
57 {
58 continue;
59 }
60 if (!IsWaterCanValid())
61 {
62 yield return Cancel();
63 }
64 if (ShouldWater(p))
65 {
66 if (owner.Dist(dest) > 1)
67 {
68 yield return Cancel();
69 }
70 p.cell.isWatered = true;
71 if (!p.cell.blocked && EClass.rnd(5) == 0)
72 {
73 EClass._map.SetLiquid(p.x, p.z, 1);
74 }
75 if (p.cell.HasFire)
76 {
77 p.ModFire(-50, extinguish: true);
78 }
79 owner.PlaySound("water_farm");
80 owner.Say("water_farm", owner, p.cell.GetFloorName());
82 owner.ModExp(286, 15);
83 if (!IsWaterCanValid())
84 {
85 yield return Cancel();
86 }
87 yield return KeepRunning();
88 }
89 }
90 }
91
92 public static bool ShouldWater(Point p)
93 {
94 Cell cell = p.cell;
95 if (cell.HasFire)
96 {
97 return true;
98 }
99 if (cell.isWatered || cell.IsTopWater || cell.IsSnowTile || !p.IsFarmField)
100 {
101 return false;
102 }
103 if (p.cell.detail != null)
104 {
105 foreach (Thing thing in p.Things)
106 {
107 if (thing.trait is TraitSeed)
108 {
109 return true;
110 }
111 }
112 }
113 return p.growth != null;
114 }
115
116 public bool IsWaterCanValid(bool msg = true)
117 {
118 bool num = waterCan != null && waterCan.owner.c_charges > 0;
119 if (!num && msg)
120 {
121 Msg.Say("water_deplete");
122 }
123 return num;
124 }
125
126 public List<Point> ListPoints()
127 {
128 List<Point> list = new List<Point>();
130 {
131 if (ShouldWater(p))
132 {
133 list.Add(p.Copy());
134 }
135 });
136 return list;
137 }
138}
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
static Chara CC
Definition: ACT.cs:77
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5404
Trait trait
Definition: Card.cs:49
void ModCharge(int a, bool destroy=false)
Definition: Card.cs:3627
int Dist(Card c)
Definition: Card.cs:6777
void ModExp(string alias, int a)
Definition: Card.cs:2508
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6046
Definition: Cell.cs:7
bool IsSnowTile
Definition: Cell.cs:782
bool IsTopWater
Definition: Cell.cs:700
bool isWatered
Definition: Cell.cs:342
CellDetail detail
Definition: Cell.cs:92
string GetFloorName()
Definition: Cell.cs:1590
bool HasFire
Definition: Cell.cs:676
Definition: EClass.cs:5
static int rnd(int a)
Definition: EClass.cs:50
static Map _map
Definition: EClass.cs:18
void ForeachPoint(Action< Point > action)
Definition: MapBounds.cs:291
void SetLiquid(int x, int z, CellEffect effect=null)
Definition: Map.cs:1464
MapBounds bounds
Definition: Map.cs:52
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
Point Copy()
Definition: Point.cs:467
Point Set(int _x, int _z)
Definition: Point.cs:479
List< Thing > Things
Definition: Point.cs:314
int x
Definition: Point.cs:36
void ModFire(int value, bool extinguish=false)
Definition: Point.cs:897
int z
Definition: Point.cs:39
bool IsFarmField
Definition: Point.cs:127
int Distance(Point p)
Definition: Point.cs:953
Cell cell
Definition: Point.cs:51
static bool ShouldWater(Point p)
Definition: TaskWater.cs:92
TraitToolWaterCan waterCan
Definition: TaskWater.cs:7
override IEnumerable< Status > Run()
Definition: TaskWater.cs:32
override string GetText(string str="")
Definition: TaskWater.cs:9
bool IsWaterCanValid(bool msg=true)
Definition: TaskWater.cs:116
override bool CanManualCancel()
Definition: TaskWater.cs:27
override bool CanPerform()
Definition: TaskWater.cs:18
List< Point > ListPoints()
Definition: TaskWater.cs:126
Point dest
Definition: TaskWater.cs:5
Definition: Task.cs:4
override Status Cancel()
Definition: Task.cs:54
Definition: Thing.cs:8
Card owner
Definition: Trait.cs:26