DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Land_Underground_Panel.c
См. документацию.
7
8enum ELEDColors
9{
12}
13
15{
16 static ref set<Land_Underground_EntranceBase> m_Entrances;
17 static ref set<Land_Underground_Panel> m_Panels;
18
20
21 const string COLOR_LED_OFF = "#(argb,8,8,3)color(0,0,0,1.0,co)";
22 const string COLOR_LED_GREEN = "#(argb,8,8,3)color(0,1,0,1.0,co)";
23 const string COLOR_LED_RED = "#(argb,8,8,3)color(1,0,0,1.0,co)";
24
25 const string SELECTION_NAME_LED_RED = "LED_Red";
26 const string SELECTION_NAME_LED_GREEN = "LED_Green";
27
28 bool m_PanelWasUsed
32
34
37
39 {
40 RegisterNetSyncVariableBool("m_PanelWasUsed");
41 RegisterPanel(this);
42 SetLEDState(ELEDColors.RED, ELEDState.ON);
43 SetLEDState(ELEDColors.GREEN, ELEDState.OFF);
44 }
45
47 {
48 UnregisterPanel(this);
49 }
50
52 {
54 if (door)
55 {
57 }
58 return false;
59 }
60
61 void Interact()
62 {
64 if (door)
65 {
69 m_PanelWasUsed = true;
70 SetSynchDirty();
71 }
72 else
73 {
74 ErrorEx("Can't find the instance of entrance the panel is linkined to");
75 }
76 }
77
79 {
80 if (!m_Entrances)
81 {
82 m_Entrances = new set<Land_Underground_EntranceBase>();
83 }
84 m_Entrances.Insert(entrance);
85 }
86
88 {
89 if (m_Entrances)
90 {
91 int index = m_Entrances.Find(entrance);
92 if (index != -1)
93 {
94 m_Entrances.Remove(index);
95 }
96 else
97 {
98 ErrorEx("Attempted to unregistered non-registered entrance");
99 }
100 }
101 }
102
104 {
105 if (!m_Panels)
106 {
107 m_Panels = new set<Land_Underground_Panel>;
108 }
109 m_Panels.Insert(panel);
110 }
111
113 {
114 if (m_Panels)
115 {
116 int index = m_Panels.Find(panel);
117 if (index != -1)
118 {
119 m_Panels.Remove(index);
120 }
121 else
122 {
123 ErrorEx("Attempted to unregistered non-registered panel");
124 }
125 }
126 }
127
128 EUndegroundDoorType GetLinkedDoorType()
129 {
130 return GetLinkedDoor().m_DoorType;
131 }
132
139
141 {
142 if (!m_Entrances)
143 {
144 return null;
145 }
146
147 float closestDst = float.MAX;
149 vector thisPos = GetPosition();
150
152 {
153 float dist = vector.DistanceSq(thisPos, obj.GetPosition());
154 if (dist < closestDst)
155 {
156 closestDst = dist;
157 closestObj = obj;
158 }
159 }
160
161 return closestObj;
162 }
163
164 void SetLEDState(ELEDColors color, ELEDState state)
165 {
166 #ifndef SERVER
167 if (color == ELEDColors.RED)
168 {
169 if (m_LedStateRed != state)
170 {
171 m_LedStateRed = state;
173 }
174 }
175 else
176 {
177 if (m_LedStateGreen != state)
178 {
179 m_LedStateGreen = state;
181 }
182 }
183 #endif
184 }
185
186 void SetBlinkingTimer(bool enable)
187 {
188 if (enable)
189 {
190 if (!m_FlipFlopTimer)
191 {
192 m_FlipFlopTimer = new Timer();
193 m_FlipFlopTimer.Run(0.1, this, "ToggleFlipFlop", NULL, true);
194 }
195 }
196 else
197 {
198 if (m_FlipFlopTimer)
199 {
200 m_FlipFlopTimer = null;
201 }
202 }
203 }
204
206 {
207 /*
208 Print("OnLEDStateChanged()");
209 Print("m_LedStateRed: " + m_LedStateRed);
210 Print("m_LedStateGreen: " + m_LedStateGreen);
211 */
212 if (m_LedStateRed == ELEDState.BLINKING || m_LedStateGreen == ELEDState.BLINKING)
213 {
214 SetBlinkingTimer(true);
215 }
216 else
217 {
218 SetBlinkingTimer(false);
219 }
220 //red
221 if (m_LedStateRed == ELEDState.ON)
222 {
224 }
225 else if (m_LedStateRed == ELEDState.OFF)
226 {
228 }
229 else if (m_LedStateRed == ELEDState.BLINKING)
230 {
232 {
234 }
235 else
236 {
238 }
239
240 //green
241 }
242 if (m_LedStateGreen == ELEDState.ON)
243 {
245 }
246 else if (m_LedStateGreen == ELEDState.OFF)
247 {
249 }
250 else if (m_LedStateGreen == ELEDState.BLINKING)
251 {
253 {
255 }
256 else
257 {
259 }
260
261 }
262 }
263
265 {
266 m_PanelWasUsed = false;
267 SetSynchDirty();
268 }
269
271 {
272 switch (GetLinkedDoorType())
273 {
274 case EUndegroundDoorType.MAIN:
275 {
276 if (newState >= EUndegroundEntranceState.CLOSED && newState < EUndegroundEntranceState.OPENING_G)
277 {
278 SetLEDState(ELEDColors.RED, ELEDState.ON);
279 }
280 else if (newState == EUndegroundEntranceState.OPENING_G)
281 {
282 SetLEDState(ELEDColors.RED, ELEDState.OFF);
283 }
284 else if (newState >= EUndegroundEntranceState.CLOSING_A)
285 {
286 SetLEDState(ELEDColors.RED, ELEDState.BLINKING);
287 }
288
289 if (newState == EUndegroundEntranceState.CLOSED)
290 {
291 SetLEDState(ELEDColors.GREEN, ELEDState.OFF);
292 }
293 else if (newState >= EUndegroundEntranceState.OPENING_A && newState < EUndegroundEntranceState.OPENING_G)
294 {
295 SetLEDState(ELEDColors.GREEN, ELEDState.BLINKING);
296 }
297 else if (newState >= EUndegroundEntranceState.OPENING_G)
298 {
299 SetLEDState(ELEDColors.GREEN, ELEDState.ON);
300 }
301 }
302 break;
303 case EUndegroundDoorType.SMALL:
304 {
305 if (newState == EUndegroundEntranceState.OPENING_A)
306 {
307 SetLEDState(ELEDColors.RED, ELEDState.ON);
308 SetLEDState(ELEDColors.GREEN, ELEDState.BLINKING);
309 }
310 else if (newState == EUndegroundEntranceState.OPENING_B)
311 {
312 SetLEDState(ELEDColors.RED, ELEDState.OFF);
313 SetLEDState(ELEDColors.GREEN, ELEDState.ON);
314 }
315 else if (newState == EUndegroundEntranceState.CLOSING_A)
316 {
317 SetLEDState(ELEDColors.RED, ELEDState.BLINKING);
318 SetLEDState(ELEDColors.GREEN, ELEDState.ON);
319 }
320 if (newState == EUndegroundEntranceState.CLOSING_B || newState == EUndegroundEntranceState.CLOSED)
321 {
322 SetLEDState(ELEDColors.RED, ELEDState.ON);
323 SetLEDState(ELEDColors.GREEN, ELEDState.OFF);
324 }
325 }
326 break;
327 }
328 }
329
330
331 protected void UpdateLED(string selection, string color)
332 {
333 int selectionIdx = GetHiddenSelectionIndex(selection);
334 SetObjectTexture(selectionIdx, color);
335 //Print("selection: " +selection + ", color: " + color +", selectionIdx: "+ selectionIdx);
336 }
337
343
345 {
346 PlaySoundSet( m_ActivationSound, "UndergroundDoor_PanelActivation_SoundSet", 0, 0 );
347 }
348
350 {
351 if (m_PanelWasUsed != m_PanelWasUsedPrev)
352 {
353 if (m_PanelWasUsed)
354 {
356 }
357 m_PanelWasUsedPrev = m_PanelWasUsed;
358 }
359 }
360
361}
override void OnVariablesSynchronized()
Определения AnniversaryMusicSource.c:42
class EconomyOutputStrings OFF
const int RED
Определения Colors.c:74
@ BLINKING
Определения DisplayStatus.c:6
EUndegroundEntranceState
Определения Land_Underground_Entrance.c:2
enum ELEDState GREEN
const string SELECTION_NAME_LED_RED
Определения Land_Underground_Panel.c:25
static void UnregisterPanel(Land_Underground_Panel panel)
Определения Land_Underground_Panel.c:112
void ~Land_Underground_Panel()
Определения Land_Underground_Panel.c:46
static void RegisterEntrance(Land_Underground_EntranceBase entrance)
Определения Land_Underground_Panel.c:78
const string COLOR_LED_OFF
Определения Land_Underground_Panel.c:21
static void RegisterPanel(Land_Underground_Panel panel)
Определения Land_Underground_Panel.c:103
void ResetPanelUsed()
Определения Land_Underground_Panel.c:264
ELEDState m_LedStateRed
Определения Land_Underground_Panel.c:35
void Land_Underground_Panel()
Определения Land_Underground_Panel.c:38
void OnPanelUsedSynchronized()
Определения Land_Underground_Panel.c:344
EUndegroundDoorType GetLinkedDoorType()
Определения Land_Underground_Panel.c:128
void ToggleFlipFlop()
Определения Land_Underground_Panel.c:338
void OnDoorStateChangedClient(EUndegroundEntranceState newState, EUndegroundEntranceState prevState)
Определения Land_Underground_Panel.c:270
const string SELECTION_NAME_LED_GREEN
Определения Land_Underground_Panel.c:26
const string COLOR_LED_GREEN
Определения Land_Underground_Panel.c:22
ELEDState
Определения Land_Underground_Panel.c:2
@ ON
Определения Land_Underground_Panel.c:5
static ref set< Land_Underground_Panel > m_Panels
Определения Land_Underground_Panel.c:17
void SetBlinkingTimer(bool enable)
Определения Land_Underground_Panel.c:186
bool m_PanelWasUsed bool m_PanelWasUsedPrev
Определения Land_Underground_Panel.c:29
enum ELEDState m_Entrances
bool CanInteract()
Определения Land_Underground_Panel.c:51
void UpdateLED(string selection, string color)
Определения Land_Underground_Panel.c:331
void Interact()
Определения Land_Underground_Panel.c:61
ELEDState m_LedStateGreen
Определения Land_Underground_Panel.c:36
EffectSound m_ActivationSound
Определения Land_Underground_Panel.c:33
Land_Underground_EntranceBase m_LinkedDoor
Определения Land_Underground_Panel.c:19
Land_Underground_EntranceBase GetClosestDoor()
Определения Land_Underground_Panel.c:140
static void UnregisterEntrance(Land_Underground_EntranceBase entrance)
Определения Land_Underground_Panel.c:87
void OnLEDStateChanged()
Определения Land_Underground_Panel.c:205
void SetLEDState(ELEDColors color, ELEDState state)
Определения Land_Underground_Panel.c:164
Land_Underground_EntranceBase GetLinkedDoor()
Определения Land_Underground_Panel.c:133
const string COLOR_LED_RED
Определения Land_Underground_Panel.c:23
ref Timer m_FlipFlopTimer
Определения Land_Underground_Panel.c:31
bool m_BlinkingFlipFlop
Определения Land_Underground_Panel.c:30
override ScriptCallQueue GetCallQueue(int call_category)
Определения DayZGame.c:1187
proto native bool RegisterNetworkStaticObject(Object object)
Static objects cannot be replicated by default (there are too many objects on the map)....
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
Определения CrashBase.c:2
bool CanManipulate(Param param=null)
Определения Land_Underground_Entrance.c:98
EUndegroundDoorType m_DoorType
Определения Land_Underground_Entrance.c:59
void Manipulate(Param param=null)
Определения Land_Underground_Entrance.c:103
proto void CallLater(func fn, int delay=0, bool repeat=false, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
adds call into the queue with given parameters and arguments (arguments are held in memory until the ...
Определения DayZPlayerImplement.c:63
static proto native float DistanceSq(vector v1, vector v2)
Returns the square distance between tips of two 3D vectors.
Определения EnConvert.c:106
proto native CGame GetGame()
enum ShapeType ErrorEx
class JsonUndergroundAreaTriggerData GetPosition
Определения UndergroundAreaLoader.c:9
const int CALL_CATEGORY_SYSTEM
Определения tools.c:8