Elin Decompiled Documentation EA 23.348.1 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 virtual int height => 1;
36
37 public override void Update()
38 {
40 }
41
42 public void ForceClose()
43 {
44 if (IsOpen())
45 {
46 ToggleDoor();
47 }
48 }
49
50 public void TryOpen(Chara c)
51 {
52 if (IsOpen())
53 {
54 return;
55 }
56 ToggleDoor();
57 c.Say("openDoor", c, owner);
58 if (owner.Cell.Front.FirstThing != null)
59 {
60 foreach (Thing thing in owner.Cell.Front.Things)
61 {
62 thing.trait.OnOpenDoor(c);
63 }
64 }
65 if (owner.Cell.Right.FirstThing == null)
66 {
67 return;
68 }
69 foreach (Thing thing2 in owner.Cell.Right.Things)
70 {
71 thing2.trait.OnOpenDoor(c);
72 }
73 }
74
75 public void TryAutoClose()
76 {
77 count++;
78 if (count > 5 && CanClose() && IsOpen())
79 {
80 ToggleDoor(sound: false);
81 }
82 }
83
84 public virtual bool CanClose()
85 {
86 int num = 0;
87 foreach (Thing thing in owner.pos.Things)
88 {
89 if (!thing.isRoofItem && !thing.isHidden && thing.TileType != TileType.Illumination)
90 {
91 num++;
92 if (num > 1)
93 {
94 return false;
95 }
96 }
97 }
98 return !owner.pos.HasChara;
99 }
100
101 public virtual bool IsOpen()
102 {
103 if (owner.isRoofItem)
104 {
105 return false;
106 }
107 int dir = owner.dir;
108 Cell cell = owner.pos.cell;
109 if (dir == 0 || dir == 2)
110 {
112 {
113 return true;
114 }
115 }
117 {
118 return true;
119 }
120 return false;
121 }
122
123 public bool IsValid(bool shouldLookGood = true)
124 {
125 _ = owner.dir;
126 Cell cell = owner.pos.cell;
127 if (!cell.HasBlock)
128 {
129 return false;
130 }
131 if (shouldLookGood)
132 {
133 bool hasFullBlockOrWallOrFence = cell.Left.HasFullBlockOrWallOrFence;
134 bool hasFullBlockOrWallOrFence2 = cell.Right.HasFullBlockOrWallOrFence;
135 bool hasFullBlockOrWallOrFence3 = cell.Front.HasFullBlockOrWallOrFence;
136 bool hasFullBlockOrWallOrFence4 = cell.Back.HasFullBlockOrWallOrFence;
137 if (hasFullBlockOrWallOrFence && hasFullBlockOrWallOrFence2)
138 {
139 return true;
140 }
141 if (hasFullBlockOrWallOrFence3 && hasFullBlockOrWallOrFence4)
142 {
143 return true;
144 }
145 return false;
146 }
147 int num = (cell.Left.HasFullBlockOrWallOrFence ? 1 : 0) + (cell.Right.HasFullBlockOrWallOrFence ? 1 : 0) + (cell.Front.HasFullBlockOrWallOrFence ? 1 : 0) + (cell.Back.HasFullBlockOrWallOrFence ? 1 : 0);
148 if (num > 0)
149 {
150 return num < 3;
151 }
152 return false;
153 }
154
155 public virtual void ToggleDoor(bool sound = true, bool refresh = true)
156 {
157 if (sound)
158 {
160 }
161 RotateDoor();
162 count = 0;
163 if (refresh)
164 {
167 }
168 }
169
170 public void RotateDoor()
171 {
172 if (owner.dir == 0)
173 {
174 owner.dir = 1;
175 }
176 else if (owner.dir == 1)
177 {
178 owner.dir = 0;
179 }
180 else if (owner.dir == 2)
181 {
182 owner.dir = 3;
183 }
184 else
185 {
186 owner.dir = 2;
187 }
189 }
190
191 public override void TrySetAct(ActPlan p)
192 {
193 if (!owner.IsInstalled)
194 {
195 return;
196 }
197 if (owner.c_lockLv > 0)
198 {
200 {
201 target = owner.Thing
202 }, owner);
203 }
204 else if (!IsOpen())
205 {
206 p.TrySetAct("actOpen", delegate
207 {
208 EClass.pc.Say("openDoor", EClass.pc, owner);
209 ToggleDoor();
210 return true;
212 }
213 else if (CanClose() && p.altAction)
214 {
215 p.TrySetAct("actClose", delegate
216 {
217 EClass.pc.Say("close", EClass.pc, owner);
218 ToggleDoor();
219 return true;
221 }
222 }
223}
bool altAction
Definition: ActPlan.cs:158
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:372
void RefreshSprite()
bool isRoofItem
Definition: Card.cs:581
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6645
int c_lockLv
Definition: Card.cs:991
TileType TileType
Definition: Card.cs:2189
Point pos
Definition: Card.cs:60
Trait trait
Definition: Card.cs:54
bool IsInstalled
Definition: Card.cs:2451
bool isHidden
Definition: Card.cs:533
Cell Cell
Definition: Card.cs:2107
int dir
Definition: Card.cs:149
CardRenderer renderer
Definition: Card.cs:64
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7324
Definition: Cell.cs:7
bool HasBlock
Definition: Cell.cs:679
Cell Back
Definition: Cell.cs:175
Cell Front
Definition: Cell.cs:151
List< Thing > Things
Definition: Cell.cs:1022
Cell Left
Definition: Cell.cs:187
Cell Right
Definition: Cell.cs:163
bool HasFullBlockOrWallOrFence
Definition: Cell.cs:856
Thing FirstThing
Definition: Cell.cs:998
Definition: Chara.cs:10
static CursorInfo Door
Definition: CursorSystem.cs:78
Definition: EClass.cs:6
static Map _map
Definition: EClass.cs:19
static Chara pc
Definition: EClass.cs:15
void RefreshSingleTile(int x, int z)
Definition: Map.cs:2243
void RefreshFOV(int x, int z, int radius=6, bool recalculate=false)
Definition: Map.cs:1035
List< Thing > Things
Definition: Point.cs:338
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
Cell cell
Definition: Point.cs:51
bool HasChara
Definition: Point.cs:238
Definition: Thing.cs:8
static TileTypeIllumination Illumination
Definition: TileType.cs:93
override bool CanBuildInTown
Definition: TraitDoor.cs:7
int count
Definition: TraitDoor.cs:3
void TryAutoClose()
Definition: TraitDoor.cs:75
virtual bool IsOpen()
Definition: TraitDoor.cs:101
virtual int height
Definition: TraitDoor.cs:35
virtual void ToggleDoor(bool sound=true, bool refresh=true)
Definition: TraitDoor.cs:155
void ForceClose()
Definition: TraitDoor.cs:42
void TryOpen(Chara c)
Definition: TraitDoor.cs:50
override void TrySetAct(ActPlan p)
Definition: TraitDoor.cs:191
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:170
override TileMode tileMode
Definition: TraitDoor.cs:13
override bool IsOpenSight
Definition: TraitDoor.cs:18
virtual bool CanClose()
Definition: TraitDoor.cs:84
override bool IsDoor
Definition: TraitDoor.cs:29
virtual string idSound
Definition: TraitDoor.cs:33
bool IsValid(bool shouldLookGood=true)
Definition: TraitDoor.cs:123
override void Update()
Definition: TraitDoor.cs:37
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:1285
TileMode
Definition: Trait.cs:9
Card owner
Definition: Trait.cs:28