DayZ 1.30
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 {
66 g_Game.RegisterNetworkStaticObject(this);
68 g_Game.GetCallQueue( CALL_CATEGORY_SYSTEM ).CallLater( ResetPanelUsed, 500);
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 #ifndef NO_GUI
168 if (color == ELEDColors.RED)
169 {
170 if (m_LedStateRed != state)
171 {
172 m_LedStateRed = state;
174 }
175 }
176 else
177 {
178 if (m_LedStateGreen != state)
179 {
180 m_LedStateGreen = state;
182 }
183 }
184 #endif
185 #endif
186 }
187
188 void SetBlinkingTimer(bool enable)
189 {
190 if (enable)
191 {
192 if (!m_FlipFlopTimer)
193 {
194 m_FlipFlopTimer = new Timer();
195 m_FlipFlopTimer.Run(0.1, this, "ToggleFlipFlop", NULL, true);
196 }
197 }
198 else
199 {
200 if (m_FlipFlopTimer)
201 {
202 m_FlipFlopTimer = null;
203 }
204 }
205 }
206
208 {
209 /*
210 Print("OnLEDStateChanged()");
211 Print("m_LedStateRed: " + m_LedStateRed);
212 Print("m_LedStateGreen: " + m_LedStateGreen);
213 */
214 if (m_LedStateRed == ELEDState.BLINKING || m_LedStateGreen == ELEDState.BLINKING)
215 {
216 SetBlinkingTimer(true);
217 }
218 else
219 {
220 SetBlinkingTimer(false);
221 }
222 //red
223 if (m_LedStateRed == ELEDState.ON)
224 {
226 }
227 else if (m_LedStateRed == ELEDState.OFF)
228 {
230 }
231 else if (m_LedStateRed == ELEDState.BLINKING)
232 {
234 {
236 }
237 else
238 {
240 }
241
242 //green
243 }
244 if (m_LedStateGreen == ELEDState.ON)
245 {
247 }
248 else if (m_LedStateGreen == ELEDState.OFF)
249 {
251 }
252 else if (m_LedStateGreen == ELEDState.BLINKING)
253 {
255 {
257 }
258 else
259 {
261 }
262
263 }
264 }
265
267 {
268 m_PanelWasUsed = false;
269 SetSynchDirty();
270 }
271
273 {
274 switch (GetLinkedDoorType())
275 {
276 case EUndegroundDoorType.MAIN:
277 {
278 if (newState >= EUndegroundEntranceState.CLOSED && newState < EUndegroundEntranceState.OPENING_G)
279 {
280 SetLEDState(ELEDColors.RED, ELEDState.ON);
281 }
282 else if (newState == EUndegroundEntranceState.OPENING_G)
283 {
284 SetLEDState(ELEDColors.RED, ELEDState.OFF);
285 }
286 else if (newState >= EUndegroundEntranceState.CLOSING_A)
287 {
288 SetLEDState(ELEDColors.RED, ELEDState.BLINKING);
289 }
290
291 if (newState == EUndegroundEntranceState.CLOSED)
292 {
293 SetLEDState(ELEDColors.GREEN, ELEDState.OFF);
294 }
295 else if (newState >= EUndegroundEntranceState.OPENING_A && newState < EUndegroundEntranceState.OPENING_G)
296 {
297 SetLEDState(ELEDColors.GREEN, ELEDState.BLINKING);
298 }
299 else if (newState >= EUndegroundEntranceState.OPENING_G)
300 {
301 SetLEDState(ELEDColors.GREEN, ELEDState.ON);
302 }
303 }
304 break;
305 case EUndegroundDoorType.SMALL:
306 {
307 if (newState == EUndegroundEntranceState.OPENING_A)
308 {
309 SetLEDState(ELEDColors.RED, ELEDState.ON);
310 SetLEDState(ELEDColors.GREEN, ELEDState.BLINKING);
311 }
312 else if (newState == EUndegroundEntranceState.OPENING_B)
313 {
314 SetLEDState(ELEDColors.RED, ELEDState.OFF);
315 SetLEDState(ELEDColors.GREEN, ELEDState.ON);
316 }
317 else if (newState == EUndegroundEntranceState.CLOSING_A)
318 {
319 SetLEDState(ELEDColors.RED, ELEDState.BLINKING);
320 SetLEDState(ELEDColors.GREEN, ELEDState.ON);
321 }
322 if (newState == EUndegroundEntranceState.CLOSING_B || newState == EUndegroundEntranceState.CLOSED)
323 {
324 SetLEDState(ELEDColors.RED, ELEDState.ON);
325 SetLEDState(ELEDColors.GREEN, ELEDState.OFF);
326 }
327 }
328 break;
329 }
330 }
331
332
333 protected void UpdateLED(string selection, string color)
334 {
335 int selectionIdx = GetHiddenSelectionIndex(selection);
336 SetObjectTexture(selectionIdx, color);
337 //Print("selection: " +selection + ", color: " + color +", selectionIdx: "+ selectionIdx);
338 }
339
345
347 {
348 PlaySoundSet( m_ActivationSound, "UndergroundDoor_PanelActivation_SoundSet", 0, 0 );
349 }
350
352 {
353 if (m_PanelWasUsed != m_PanelWasUsedPrev)
354 {
355 if (m_PanelWasUsed)
356 {
358 }
359 m_PanelWasUsedPrev = m_PanelWasUsed;
360 }
361 }
362
363}
class EconomyOutputStrings OFF
const int RED
Определения Colors.c:76
override void OnVariablesSynchronized()
Определения ContaminatedArea_Dynamic.c:94
DayZGame g_Game
Определения DayZGame.c:4074
@ 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:266
ELEDState m_LedStateRed
Определения Land_Underground_Panel.c:35
void Land_Underground_Panel()
Определения Land_Underground_Panel.c:38
void OnPanelUsedSynchronized()
Определения Land_Underground_Panel.c:346
EUndegroundDoorType GetLinkedDoorType()
Определения Land_Underground_Panel.c:128
void ToggleFlipFlop()
Определения Land_Underground_Panel.c:340
void OnDoorStateChangedClient(EUndegroundEntranceState newState, EUndegroundEntranceState prevState)
Определения Land_Underground_Panel.c:272
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:188
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:333
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:207
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
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
Определения CrashBase.c:2
bool CanManipulate(Param param=null)
Определения Land_Underground_Entrance.c:119
EUndegroundDoorType m_DoorType
Определения Land_Underground_Entrance.c:59
void Manipulate(Param param=null)
Определения Land_Underground_Entrance.c:124
Определения DayZPlayerImplement.c:39
static proto native float DistanceSq(vector v1, vector v2)
Returns the square distance between tips of two 3D vectors.
Определения EnConvert.c:119
enum ShapeType ErrorEx
vector GetPosition()
Get the world position of the Effect.
Определения Effect.c:473
const int CALL_CATEGORY_SYSTEM
Определения 3_Game/DayZ/tools/tools.c:8