Elin Decompiled Documentation EA 23.167 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 CanBeTeleported => false;
10
11 public override bool CanBeDisassembled => !owner.IsInstalled;
12
13 public override TileMode tileMode => TileMode.Door;
14
15 public override bool HaveUpdate => true;
16
17 public override bool IsOpenSight
18 {
19 get
20 {
21 if (!IsOpen())
22 {
23 return !IsValid(shouldLookGood: false);
24 }
25 return true;
26 }
27 }
28
29 public override bool IsDoor => true;
30
31 public override bool ShouldRefreshTile => true;
32
33 public virtual string idSound => "door1";
34
35 public override void Update()
36 {
38 }
39
40 public void ForceClose()
41 {
42 if (IsOpen())
43 {
44 ToggleDoor();
45 }
46 }
47
48 public void TryOpen(Chara c)
49 {
50 if (IsOpen())
51 {
52 return;
53 }
54 ToggleDoor();
55 c.Say("openDoor", c, owner);
56 if (owner.Cell.Front.FirstThing != null)
57 {
58 foreach (Thing thing in owner.Cell.Front.Things)
59 {
60 thing.trait.OnOpenDoor(c);
61 }
62 }
63 if (owner.Cell.Right.FirstThing == null)
64 {
65 return;
66 }
67 foreach (Thing thing2 in owner.Cell.Right.Things)
68 {
69 thing2.trait.OnOpenDoor(c);
70 }
71 }
72
73 public void TryAutoClose()
74 {
75 count++;
76 if (count > 5 && CanClose() && IsOpen())
77 {
78 ToggleDoor(sound: false);
79 }
80 }
81
82 public virtual bool CanClose()
83 {
84 int num = 0;
85 foreach (Thing thing in owner.pos.Things)
86 {
87 if (!thing.isRoofItem && !thing.isHidden && thing.TileType != TileType.Illumination)
88 {
89 num++;
90 if (num > 1)
91 {
92 return false;
93 }
94 }
95 }
96 return !owner.pos.HasChara;
97 }
98
99 public virtual bool IsOpen()
100 {
101 int dir = owner.dir;
102 Cell cell = owner.pos.cell;
103 if (dir == 0 || dir == 2)
104 {
106 {
107 return true;
108 }
109 }
111 {
112 return true;
113 }
114 return false;
115 }
116
117 public bool IsValid(bool shouldLookGood = true)
118 {
119 _ = owner.dir;
120 Cell cell = owner.pos.cell;
121 if (!cell.HasBlock)
122 {
123 return false;
124 }
125 if (shouldLookGood)
126 {
127 bool hasFullBlockOrWallOrFence = cell.Left.HasFullBlockOrWallOrFence;
128 bool hasFullBlockOrWallOrFence2 = cell.Right.HasFullBlockOrWallOrFence;
129 bool hasFullBlockOrWallOrFence3 = cell.Front.HasFullBlockOrWallOrFence;
130 bool hasFullBlockOrWallOrFence4 = cell.Back.HasFullBlockOrWallOrFence;
131 if (hasFullBlockOrWallOrFence && hasFullBlockOrWallOrFence2)
132 {
133 return true;
134 }
135 if (hasFullBlockOrWallOrFence3 && hasFullBlockOrWallOrFence4)
136 {
137 return true;
138 }
139 return false;
140 }
141 int num = (cell.Left.HasFullBlockOrWallOrFence ? 1 : 0) + (cell.Right.HasFullBlockOrWallOrFence ? 1 : 0) + (cell.Front.HasFullBlockOrWallOrFence ? 1 : 0) + (cell.Back.HasFullBlockOrWallOrFence ? 1 : 0);
142 if (num > 0)
143 {
144 return num < 3;
145 }
146 return false;
147 }
148
149 public virtual void ToggleDoor(bool sound = true, bool refresh = true)
150 {
151 if (sound)
152 {
154 }
155 RotateDoor();
156 count = 0;
157 if (refresh)
158 {
161 }
162 }
163
164 public void RotateDoor()
165 {
166 if (owner.dir == 0)
167 {
168 owner.dir = 1;
169 }
170 else if (owner.dir == 1)
171 {
172 owner.dir = 0;
173 }
174 else if (owner.dir == 2)
175 {
176 owner.dir = 3;
177 }
178 else
179 {
180 owner.dir = 2;
181 }
183 }
184
185 public override void TrySetAct(ActPlan p)
186 {
187 if (!owner.IsInstalled)
188 {
189 return;
190 }
191 if (owner.c_lockLv > 0)
192 {
194 {
195 target = owner.Thing
196 }, owner);
197 }
198 else if (!IsOpen())
199 {
200 p.TrySetAct("actOpen", delegate
201 {
202 EClass.pc.Say("openDoor", EClass.pc, owner);
203 ToggleDoor();
204 return true;
206 }
207 else if (CanClose() && p.altAction)
208 {
209 p.TrySetAct("actClose", delegate
210 {
211 EClass.pc.Say("close", EClass.pc, owner);
212 ToggleDoor();
213 return true;
215 }
216 }
217}
bool altAction
Definition: ActPlan.cs:156
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:345
void RefreshSprite()
bool isRoofItem
Definition: Card.cs:562
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5776
int c_lockLv
Definition: Card.cs:936
TileType TileType
Definition: Card.cs:2071
Point pos
Definition: Card.cs:55
Trait trait
Definition: Card.cs:49
bool IsInstalled
Definition: Card.cs:2317
bool isHidden
Definition: Card.cs:514
Cell Cell
Definition: Card.cs:1991
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:6423
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:2088
void RefreshFOV(int x, int z, int radius=6, bool recalculate=false)
Definition: Map.cs:923
List< Thing > Things
Definition: Point.cs:326
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:87
override bool CanBuildInTown
Definition: TraitDoor.cs:7
int count
Definition: TraitDoor.cs:3
void TryAutoClose()
Definition: TraitDoor.cs:73
virtual bool IsOpen()
Definition: TraitDoor.cs:99
virtual void ToggleDoor(bool sound=true, bool refresh=true)
Definition: TraitDoor.cs:149
void ForceClose()
Definition: TraitDoor.cs:40
void TryOpen(Chara c)
Definition: TraitDoor.cs:48
override void TrySetAct(ActPlan p)
Definition: TraitDoor.cs:185
override bool CanBeDisassembled
Definition: TraitDoor.cs:11
override bool HaveUpdate
Definition: TraitDoor.cs:15
override bool CanBeTeleported
Definition: TraitDoor.cs:9
void RotateDoor()
Definition: TraitDoor.cs:164
override TileMode tileMode
Definition: TraitDoor.cs:13
override bool IsOpenSight
Definition: TraitDoor.cs:18
virtual bool CanClose()
Definition: TraitDoor.cs:82
override bool IsDoor
Definition: TraitDoor.cs:29
virtual string idSound
Definition: TraitDoor.cs:33
bool IsValid(bool shouldLookGood=true)
Definition: TraitDoor.cs:117
override void Update()
Definition: TraitDoor.cs:35
override bool CanBeOnlyBuiltInHome
Definition: TraitDoor.cs:5
override bool ShouldRefreshTile
Definition: TraitDoor.cs:31
Definition: Trait.cs:7
virtual void OnOpenDoor(Chara c)
Definition: Trait.cs:1075
TileMode
Definition: Trait.cs:9
Card owner
Definition: Trait.cs:27