Elin Decompiled Documentation EA 23.324 Nightly
Loading...
Searching...
No Matches
TaskPourWater.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2
4{
6
7 public override int destDist => 1;
8
9 public override bool CanPressRepeat => true;
10
11 public override bool Loop => CanProgress();
12
13 public override bool CanProgress()
14 {
15 if (base.CanProgress() && !pos.HasBridge && pos.cell.sourceSurface.alias != "floor_water_deep" && pot.owner.c_charges > 0)
16 {
17 return owner.Tool == pot.owner;
18 }
19 return false;
20 }
21
22 public override bool CanManualCancel()
23 {
24 return true;
25 }
26
27 public override void OnCreateProgress(Progress_Custom p)
28 {
29 p.textHint = Name;
30 p.maxProgress = 6;
31 p.onProgressBegin = delegate
32 {
33 if (owner.Tool != null)
34 {
35 owner.Say("pourWater_start", owner, owner.Tool);
36 }
37 };
38 p.onProgress = delegate
39 {
40 (pos.cell.HasBridge ? pos.cell.matBridge : pos.cell.matFloor).PlayHitEffect(pos);
41 owner.PlaySound(MATERIAL.sourceWaterSea.GetSoundImpact());
42 };
43 p.onProgressComplete = delegate
44 {
45 owner.PlaySound("water_farm");
46 int num = owner.Tool?.Evalue(770) ?? 0;
47 num = ((num <= 0) ? 1 : (2 + num / 10));
48 if (num > 1)
49 {
50 List<Point> list = EClass._map.ListPointsInSquare(pos, num - 1);
51 list.Sort((Point a, Point b) => a.Distance(pos) - b.Distance(pos));
52 {
53 foreach (Point item in list)
54 {
55 if (owner == null || owner.isDead)
56 {
57 break;
58 }
59 Pour(item);
60 }
61 return;
62 }
63 }
64 Pour(pos);
65 };
66 void Pour(Point p)
67 {
68 if (pot.owner.c_charges > 0 && GetHitResult(p) != HitResult.Invalid)
69 {
70 if (pot.owner.DyeMat == null)
71 {
73 }
74 switch ((p.HasBridge ? p.sourceBridge : p.sourceFloor).alias)
75 {
76 case "floor_water_shallow2":
77 ChangeFloor("floor_water_shallow");
78 break;
79 case "floor_water_shallow":
80 ChangeFloor("floor_water");
81 break;
82 case "floor_water":
83 ChangeFloor("floor_water_deep");
84 break;
85 default:
86 ChangeFloor("floor_water_shallow2");
87 break;
88 }
89 Effect.Get("mine").Play(p).SetParticleColor(p.cell.HasBridge ? pos.matBridge.GetColor() : p.matFloor.GetColor())
90 .Emit(10 + EClass.rnd(10));
91 p.Animate(AnimeID.Dig, animeBlock: true);
93 if (pot.owner.c_charges <= 0)
94 {
95 pot.owner.Dye(EClass.sources.materials.alias["void"]);
96 }
97 owner.elements.ModExp(286, 5f);
98 if (EClass.rnd(3) == 0)
99 {
100 owner.stamina.Mod(-1);
101 }
102 }
103 void ChangeFloor(string id)
104 {
106 if (p.HasBridge)
107 {
108 p.cell._bridge = (byte)row.id;
109 p.cell._bridgeMat = (byte)pot.owner.DyeMat.id;
110 }
111 else
112 {
113 p.cell._floor = (byte)row.id;
114 p.cell._floorMat = (byte)pot.owner.DyeMat.id;
115 }
116 EClass._map.SetLiquid(p.x, p.z);
118 }
119 }
120 }
121
122 public override HitResult GetHitResult()
123 {
124 if (pos.HasBridge || pos.HasObj || pos.cell.HasFullBlock || (!pos.cell.sourceSurface.tag.Contains("soil") && !pos.cell.IsTopWater) || pos.cell.sourceSurface.alias == "floor_water_deep")
125 {
126 return HitResult.Invalid;
127 }
128 return HitResult.Valid;
129 }
130}
AnimeID
Definition: AnimeID.cs:2
HitResult
Definition: HitResult.cs:2
new Chara owner
Definition: AIAct.cs:14
virtual new string Name
Definition: AIAct.cs:68
ElementContainerCard elements
Definition: Card.cs:42
SourceMaterial.Row DyeMat
Definition: Card.cs:1992
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6594
Thing Tool
Definition: Card.cs:2480
void Dye(string idMat)
Definition: Card.cs:6427
void ModCharge(int a, bool destroy=false)
Definition: Card.cs:4124
int Evalue(int ele)
Definition: Card.cs:2704
int c_charges
Definition: Card.cs:1309
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7272
bool HasBridge
Definition: Cell.cs:679
byte _floorMat
Definition: Cell.cs:38
byte _bridgeMat
Definition: Cell.cs:50
bool IsTopWater
Definition: Cell.cs:708
SourceMaterial.Row matFloor
Definition: Cell.cs:1040
SourceFloor.Row sourceSurface
Definition: Cell.cs:1069
bool HasFullBlock
Definition: Cell.cs:825
Stats stamina
Definition: Chara.cs:1205
bool isDead
Definition: Chara.cs:393
Definition: EClass.cs:6
static Map _map
Definition: EClass.cs:19
static int rnd(long a)
Definition: EClass.cs:59
static SourceManager sources
Definition: EClass.cs:43
Definition: Effect.cs:7
static Effect Get(Effect original)
Definition: Effect.cs:80
void Play(float delay, Point from, float fixY=0f, Point to=null, Sprite sprite=null)
Definition: Effect.cs:100
void ModExp(int ele, float a, bool chain=false)
int id
Definition: ELEMENT.cs:257
static SourceMaterial.Row sourceWaterSea
Definition: MATERIAL.cs:49
void SetLiquid(int x, int z, CellEffect effect=null)
Definition: Map.cs:1522
List< Point > ListPointsInSquare(Point center, int radius, bool mustBeWalkable=true, bool los=true)
Definition: Map.cs:2336
Definition: Point.cs:9
SourceMaterial.Row matFloor
Definition: Point.cs:57
bool HasBridge
Definition: Point.cs:221
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
SourceMaterial.Row matBridge
Definition: Point.cs:59
SourceFloor.Row sourceFloor
Definition: Point.cs:65
bool HasObj
Definition: Point.cs:137
void RefreshNeighborTiles()
Definition: Point.cs:1282
int Distance(Point p)
Definition: Point.cs:995
Cell cell
Definition: Point.cs:51
void Animate(AnimeID id, bool animeBlock=false)
Definition: Point.cs:1308
SourceFloor.Row sourceBridge
Definition: Point.cs:67
SourceMaterial materials
SourceFloor floors
virtual void Mod(int a)
Definition: Stats.cs:135
Point pos
Definition: TaskPoint.cs:11
override bool CanManualCancel()
override void OnCreateProgress(Progress_Custom p)
override bool Loop
override bool CanPressRepeat
Definition: TaskPourWater.cs:9
override int destDist
Definition: TaskPourWater.cs:7
override bool CanProgress()
TraitToolWaterPot pot
Definition: TaskPourWater.cs:5
override HitResult GetHitResult()
int id
Definition: TileRow.cs:8
Card owner
Definition: Trait.cs:28