Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
TraitDoor.cs
Go to the documentation of this file.
1public class TraitDoor : Trait
2{
3 public int count;
4
5 public override bool CanBeOnlyBuiltInHome => true;
6
7 public override bool CanBuildInTown => false;
8
9 public override bool CanBeDisassembled => !owner.IsInstalled;
10
11 public override TileMode tileMode => TileMode.Door;
12
13 public override bool HaveUpdate => true;
14
15 public override bool IsOpenSight
16 {
17 get
18 {
19 if (!IsOpen())
20 {
21 return !IsValid(shouldLookGood: false);
22 }
23 return true;
24 }
25 }
26
27 public override bool IsDoor => true;
28
29 public override bool ShouldRefreshTile => true;
30
31 public virtual string idSound => "door1";
32
33 public override void Update()
34 {
36 }
37
38 public void ForceClose()
39 {
40 if (IsOpen())
41 {
42 ToggleDoor();
43 }
44 }
45
46 public void TryOpen(Chara c)
47 {
48 if (IsOpen())
49 {
50 return;
51 }
52 ToggleDoor();
53 c.Say("openDoor", c, owner);
54 if (owner.Cell.Front.FirstThing != null)
55 {
56 foreach (Thing thing in owner.Cell.Front.Things)
57 {
58 thing.trait.OnOpenDoor(c);
59 }
60 }
61 if (owner.Cell.Right.FirstThing == null)
62 {
63 return;
64 }
65 foreach (Thing thing2 in owner.Cell.Right.Things)
66 {
67 thing2.trait.OnOpenDoor(c);
68 }
69 }
70
71 public void TryAutoClose()
72 {
73 count++;
74 if (count > 5 && CanClose() && IsOpen())
75 {
76 ToggleDoor(sound: false);
77 }
78 }
79
80 public virtual bool CanClose()
81 {
82 int num = 0;
83 foreach (Thing thing in owner.pos.Things)
84 {
85 if (!thing.isRoofItem && !thing.isHidden && thing.TileType != TileType.Illumination)
86 {
87 num++;
88 if (num > 1)
89 {
90 return false;
91 }
92 }
93 }
94 return !owner.pos.HasChara;
95 }
96
97 public virtual bool IsOpen()
98 {
99 int dir = owner.dir;
100 Cell cell = owner.pos.cell;
101 if (dir == 0 || dir == 2)
102 {
104 {
105 return true;
106 }
107 }
109 {
110 return true;
111 }
112 return false;
113 }
114
115 public bool IsValid(bool shouldLookGood = true)
116 {
117 _ = owner.dir;
118 Cell cell = owner.pos.cell;
119 if (!cell.HasBlock)
120 {
121 return false;
122 }
123 if (shouldLookGood)
124 {
125 bool hasFullBlockOrWallOrFence = cell.Left.HasFullBlockOrWallOrFence;
126 bool hasFullBlockOrWallOrFence2 = cell.Right.HasFullBlockOrWallOrFence;
127 bool hasFullBlockOrWallOrFence3 = cell.Front.HasFullBlockOrWallOrFence;
128 bool hasFullBlockOrWallOrFence4 = cell.Back.HasFullBlockOrWallOrFence;
129 if (hasFullBlockOrWallOrFence && hasFullBlockOrWallOrFence2)
130 {
131 return true;
132 }
133 if (hasFullBlockOrWallOrFence3 && hasFullBlockOrWallOrFence4)
134 {
135 return true;
136 }
137 return false;
138 }
139 int num = (cell.Left.HasFullBlockOrWallOrFence ? 1 : 0) + (cell.Right.HasFullBlockOrWallOrFence ? 1 : 0) + (cell.Front.HasFullBlockOrWallOrFence ? 1 : 0) + (cell.Back.HasFullBlockOrWallOrFence ? 1 : 0);
140 if (num > 0)
141 {
142 return num < 3;
143 }
144 return false;
145 }
146
147 public virtual void ToggleDoor(bool sound = true, bool refresh = true)
148 {
149 if (sound)
150 {
152 }
153 RotateDoor();
154 count = 0;
155 if (refresh)
156 {
159 }
160 }
161
162 public void RotateDoor()
163 {
164 if (owner.dir == 0)
165 {
166 owner.dir = 1;
167 }
168 else if (owner.dir == 1)
169 {
170 owner.dir = 0;
171 }
172 else if (owner.dir == 2)
173 {
174 owner.dir = 3;
175 }
176 else
177 {
178 owner.dir = 2;
179 }
181 }
182
183 public override void TrySetAct(ActPlan p)
184 {
185 if (!owner.IsInstalled)
186 {
187 return;
188 }
189 if (owner.c_lockLv > 0)
190 {
192 {
193 target = owner.Thing
194 }, owner);
195 }
196 else if (!IsOpen())
197 {
198 p.TrySetAct("actOpen", delegate
199 {
200 EClass.pc.Say("openDoor", EClass.pc, owner);
201 ToggleDoor();
202 return true;
204 }
205 else if (CanClose() && p.altAction)
206 {
207 p.TrySetAct("actClose", delegate
208 {
209 EClass.pc.Say("close", EClass.pc, owner);
210 ToggleDoor();
211 return true;
213 }
214 }
215}
bool altAction
Definition: ActPlan.cs:155
bool TrySetAct(string lang, Func< bool > onPerform, Card tc, CursorInfo cursor=null, int dist=1, bool isHostileAct=false, bool localAct=true, bool canRepeat=false)
Definition: ActPlan.cs:344
void RefreshSprite()
bool isRoofItem
Definition: Card.cs:550
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5404
int c_lockLv
Definition: Card.cs:924
TileType TileType
Definition: Card.cs:2011
Point pos
Definition: Card.cs:55
Trait trait
Definition: Card.cs:49
bool IsInstalled
Definition: Card.cs:2241
bool isHidden
Definition: Card.cs:502
Cell Cell
Definition: Card.cs:1931
int dir
Definition: Card.cs:142
CardRenderer renderer
Definition: Card.cs:57
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6046
Definition: Cell.cs:7
bool HasBlock
Definition: Cell.cs:643
Cell Back
Definition: Cell.cs:153
Cell Front
Definition: Cell.cs:129
List< Thing > Things
Definition: Cell.cs:986
Cell Left
Definition: Cell.cs:165
Cell Right
Definition: Cell.cs:141
bool HasFullBlockOrWallOrFence
Definition: Cell.cs:820
Thing FirstThing
Definition: Cell.cs:962
Definition: Chara.cs:10
static CursorInfo Door
Definition: CursorSystem.cs:78
Definition: EClass.cs:5
static Map _map
Definition: EClass.cs:18
static Chara pc
Definition: EClass.cs:14
void RefreshSingleTile(int x, int z)
Definition: Map.cs:2081
void RefreshFOV(int x, int z, int radius=6, bool recalculate=false)
Definition: Map.cs:923
List< Thing > Things
Definition: Point.cs:314
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
Cell cell
Definition: Point.cs:51
bool HasChara
Definition: Point.cs:226
Definition: Thing.cs:8
static TileTypeIllumination Illumination
Definition: TileType.cs:83
override bool CanBuildInTown
Definition: TraitDoor.cs:7
int count
Definition: TraitDoor.cs:3
void TryAutoClose()
Definition: TraitDoor.cs:71
virtual bool IsOpen()
Definition: TraitDoor.cs:97
virtual void ToggleDoor(bool sound=true, bool refresh=true)
Definition: TraitDoor.cs:147
void ForceClose()
Definition: TraitDoor.cs:38
void TryOpen(Chara c)
Definition: TraitDoor.cs:46
override void TrySetAct(ActPlan p)
Definition: TraitDoor.cs:183
override bool CanBeDisassembled
Definition: TraitDoor.cs:9
override bool HaveUpdate
Definition: TraitDoor.cs:13
void RotateDoor()
Definition: TraitDoor.cs:162
override TileMode tileMode
Definition: TraitDoor.cs:11
override bool IsOpenSight
Definition: TraitDoor.cs:16
virtual bool CanClose()
Definition: TraitDoor.cs:80
override bool IsDoor
Definition: TraitDoor.cs:27
virtual string idSound
Definition: TraitDoor.cs:31
bool IsValid(bool shouldLookGood=true)
Definition: TraitDoor.cs:115
override void Update()
Definition: TraitDoor.cs:33
override bool CanBeOnlyBuiltInHome
Definition: TraitDoor.cs:5
override bool ShouldRefreshTile
Definition: TraitDoor.cs:29
Definition: Trait.cs:7
virtual void OnOpenDoor(Chara c)
Definition: Trait.cs:1034
TileMode
Definition: Trait.cs:9
Card owner
Definition: Trait.cs:26