Elin Decompiled Documentation EA 23.226 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 if (owner.isRoofItem)
102 {
103 return false;
104 }
105 int dir = owner.dir;
106 Cell cell = owner.pos.cell;
107 if (dir == 0 || dir == 2)
108 {
110 {
111 return true;
112 }
113 }
115 {
116 return true;
117 }
118 return false;
119 }
120
121 public bool IsValid(bool shouldLookGood = true)
122 {
123 _ = owner.dir;
124 Cell cell = owner.pos.cell;
125 if (!cell.HasBlock)
126 {
127 return false;
128 }
129 if (shouldLookGood)
130 {
131 bool hasFullBlockOrWallOrFence = cell.Left.HasFullBlockOrWallOrFence;
132 bool hasFullBlockOrWallOrFence2 = cell.Right.HasFullBlockOrWallOrFence;
133 bool hasFullBlockOrWallOrFence3 = cell.Front.HasFullBlockOrWallOrFence;
134 bool hasFullBlockOrWallOrFence4 = cell.Back.HasFullBlockOrWallOrFence;
135 if (hasFullBlockOrWallOrFence && hasFullBlockOrWallOrFence2)
136 {
137 return true;
138 }
139 if (hasFullBlockOrWallOrFence3 && hasFullBlockOrWallOrFence4)
140 {
141 return true;
142 }
143 return false;
144 }
145 int num = (cell.Left.HasFullBlockOrWallOrFence ? 1 : 0) + (cell.Right.HasFullBlockOrWallOrFence ? 1 : 0) + (cell.Front.HasFullBlockOrWallOrFence ? 1 : 0) + (cell.Back.HasFullBlockOrWallOrFence ? 1 : 0);
146 if (num > 0)
147 {
148 return num < 3;
149 }
150 return false;
151 }
152
153 public virtual void ToggleDoor(bool sound = true, bool refresh = true)
154 {
155 if (sound)
156 {
158 }
159 RotateDoor();
160 count = 0;
161 if (refresh)
162 {
165 }
166 }
167
168 public void RotateDoor()
169 {
170 if (owner.dir == 0)
171 {
172 owner.dir = 1;
173 }
174 else if (owner.dir == 1)
175 {
176 owner.dir = 0;
177 }
178 else if (owner.dir == 2)
179 {
180 owner.dir = 3;
181 }
182 else
183 {
184 owner.dir = 2;
185 }
187 }
188
189 public override void TrySetAct(ActPlan p)
190 {
191 if (!owner.IsInstalled)
192 {
193 return;
194 }
195 if (owner.c_lockLv > 0)
196 {
198 {
199 target = owner.Thing
200 }, owner);
201 }
202 else if (!IsOpen())
203 {
204 p.TrySetAct("actOpen", delegate
205 {
206 EClass.pc.Say("openDoor", EClass.pc, owner);
207 ToggleDoor();
208 return true;
210 }
211 else if (CanClose() && p.altAction)
212 {
213 p.TrySetAct("actClose", delegate
214 {
215 EClass.pc.Say("close", EClass.pc, owner);
216 ToggleDoor();
217 return true;
219 }
220 }
221}
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:366
void RefreshSprite()
bool isRoofItem
Definition: Card.cs:578
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6038
int c_lockLv
Definition: Card.cs:964
TileType TileType
Definition: Card.cs:2123
Point pos
Definition: Card.cs:59
Trait trait
Definition: Card.cs:53
bool IsInstalled
Definition: Card.cs:2369
bool isHidden
Definition: Card.cs:530
Cell Cell
Definition: Card.cs:2043
int dir
Definition: Card.cs:146
CardRenderer renderer
Definition: Card.cs:61
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6690
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:2103
void RefreshFOV(int x, int z, int radius=6, bool recalculate=false)
Definition: Map.cs:929
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:153
void ForceClose()
Definition: TraitDoor.cs:40
void TryOpen(Chara c)
Definition: TraitDoor.cs:48
override void TrySetAct(ActPlan p)
Definition: TraitDoor.cs:189
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:168
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:121
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:1081
TileMode
Definition: Trait.cs:9
Card owner
Definition: Trait.cs:27