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