DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Spotlight.c
См. документацию.
1class Spotlight extends ItemBase
2{
3 private bool m_IsFolded;
4 private bool m_EvaluateDeployment;
5 SpotlightLight m_Light;
6
9
10 // Spotlight can be extended and compressed
11 static const string SEL_REFLECTOR_COMP_U = "reflector";
12 static const string SEL_CORD_FOLDED_U = "cord_folded";
13 static const string SEL_CORD_PLUGGED_U = "cord_plugged";
14 static const string SEL_CORD_PLUGGED_F = "spotlight_folded_cord_plugged";
15 static const string SEL_CORD_FOLDED_F = "spotlight_folded_cord_folded";
16
17 static const string SEL_INVENTORY = "inventory";
18 static const string SEL_PLACING = "placing";
19 static const string SEL_GLASS_F = "glass_folded";
20 static const string SEL_GLASS_U = "glass_unfolded";
21 static const string SEL_REFLECTOR_F = "reflector_folded";
22 static const string SEL_REFLECTOR_U = "reflector_unfolded";
23
24 static const int ID_GLASS_UNFOLDED = 3;
25 static const int ID_REFLECTOR_UNFOLDED = 4;
26 static const int ID_GLASS_FOLDED = 5;
27 static const int ID_REFLECTOR_FOLDED = 6;
28
29 static string LIGHT_OFF_GLASS = "dz\\gear\\camping\\Data\\spotlight_glass.rvmat";
30 static string LIGHT_OFF_REFLECTOR = "dz\\gear\\camping\\Data\\spotlight.rvmat";
31 static string LIGHT_ON_GLASS = "dz\\gear\\camping\\Data\\spotlight_glass_on.rvmat";
32 static string LIGHT_ON_REFLECTOR = "dz\\gear\\camping\\Data\\spotlight_glass_on.rvmat";
33
34 //sound
35 const string SOUND_TURN_ON = "spotlight_turn_on_SoundSet";
36 const string SOUND_TURN_OFF = "spotlight_turn_off_SoundSet";
37
38 protected EffectSound m_SoundTurnOn;
40
41 //Spotlight, folded and unfolded
42 void Spotlight()
43 {
45
46 RegisterNetSyncVariableBool("m_IsFolded");
47 }
48
49 override bool IsElectricAppliance()
50 {
51 return true;
52 }
53
54 override void OnInitEnergy()
55 {
56 if (GetCompEM().IsPlugged())
57 {
58 if (!GetHierarchyRoot())
59 Unfold();
60 else
61 Fold(true);
62 }
63 else
64 Fold();
65
67 }
68
69 override void EOnInit(IEntity other, int extra)
70 {
71 if (!IsHologram())
72 {
74 HideSelection(SEL_CORD_FOLDED_F);
75 }
76 else
77 {
78 Unfold();
79 }
80 }
81
82 //--- POWER EVENTS
83 override void OnSwitchOn()
84 {
85 super.OnSwitchOn();
86
88 }
89
90 override void OnSwitchOff()
91 {
92 super.OnSwitchOff();
93
95
96 if (m_Light)
97 {
98 m_Light.FadeOut(0.05);
99 m_Light = null;
100 }
101 }
102
103 override void OnWorkStart()
104 {
105 #ifndef SERVER
106 #ifndef NO_GUI
107 m_Light = SpotlightLight.Cast(ScriptedLightBase.CreateLight(SpotlightLight, "0 0 0"));
109 #endif
110 #endif
111
113 }
114
115 override void OnWorkStop()
116 {
117 #ifndef SERVER
118 #ifndef NO_GUI
119 if (m_Light)
120 m_Light.FadeOut();
121 #endif
122 #endif
123
125 }
126
127 // Called when this device is picked up
128 override void OnItemLocationChanged(EntityAI old_owner, EntityAI new_owner)
129 {
130 super.OnItemLocationChanged(old_owner, new_owner);
131
132 //skips folding of currently deployed spotlight
134 {
135 m_EvaluateDeployment = false;
136 if (m_Light)
137 {
139 }
140
141 Unfold();
142
143 return;
144 }
145
146 // When the item is picked up by a player
147 PlayerBase player = PlayerBase.Cast(new_owner);
148 if (player && player.GetItemInHands() == this)
149 {
150 Fold(GetCompEM().IsPlugged());
151 }
152 }
153
154 override void OnIsPlugged(EntityAI source_device)
155 {
156 Unfold();
158 }
159
160 protected void UpdateAllSelections()
161 {
162 bool isPlugged = GetCompEM().IsPlugged();
163 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
164 bool isInHands = player && player.GetItemInHands() == this;
165 HideAllSelections();
166
167 m_LightLocalPosition = GetSelectionPositionLS("beamStart");
168
169 if (IsFolded() || isInHands)
170 {
171 HideSelection(SEL_REFLECTOR_COMP_U);
172
173 ShowSelection(SEL_INVENTORY);
174 ShowSelection(SEL_GLASS_F);
175 ShowSelection(SEL_REFLECTOR_F);
176
177 if (isPlugged)
178 {
179 ShowSelection(SEL_CORD_PLUGGED_F);
180 }
181 else
182 {
183 ShowSelection(SEL_CORD_FOLDED_F);
184 }
185
186 if (!IsHologram())
187 {
188 if (GetCompEM().IsWorking())
189 {
190 SetObjectMaterial(ID_GLASS_UNFOLDED, LIGHT_ON_GLASS);
191 SetObjectMaterial(ID_REFLECTOR_UNFOLDED, LIGHT_ON_REFLECTOR);
192 SetObjectMaterial(ID_GLASS_FOLDED, LIGHT_ON_GLASS);
193 SetObjectMaterial(ID_REFLECTOR_FOLDED, LIGHT_ON_REFLECTOR);
194 }
195 else
196 {
197 SetObjectMaterial(ID_GLASS_UNFOLDED, LIGHT_OFF_GLASS);
198 SetObjectMaterial(ID_REFLECTOR_UNFOLDED, LIGHT_OFF_REFLECTOR);
199 SetObjectMaterial(ID_GLASS_FOLDED, LIGHT_OFF_GLASS);
200 SetObjectMaterial(ID_REFLECTOR_FOLDED, LIGHT_OFF_REFLECTOR);
201 }
202 }
203 }
204 else
205 {
206 ShowSelection(SEL_PLACING);
207 ShowSelection(SEL_REFLECTOR_U);
208 ShowSelection(SEL_GLASS_U);
209 ShowSelection(SEL_REFLECTOR_COMP_U);
210
211 if (isPlugged)
212 {
213 ShowSelection(SEL_CORD_PLUGGED_U);
214 }
215 else
216 {
217 ShowSelection(SEL_CORD_FOLDED_U);
218 }
219
220 if (!IsHologram())
221 {
222 if (GetCompEM().IsWorking())
223 {
224 SetObjectMaterial(ID_GLASS_UNFOLDED, LIGHT_ON_GLASS);
225 SetObjectMaterial(ID_REFLECTOR_UNFOLDED, LIGHT_ON_REFLECTOR);
226 }
227 else
228 {
229 SetObjectMaterial(ID_GLASS_UNFOLDED, LIGHT_OFF_GLASS);
230 SetObjectMaterial(ID_REFLECTOR_UNFOLDED, LIGHT_OFF_REFLECTOR);
231 }
232 }
233 }
234 }
235
236 override void OnIsUnplugged(EntityAI last_energy_source)
237 {
238 Fold();
240 }
241
242 void Fold(bool keep_connected = false)
243 {
244 m_IsFolded = true;
245 if (!keep_connected)
246 {
247 GetCompEM().SwitchOff();
248 GetCompEM().UnplugThis();
249 }
250
252 SetSynchDirty();
253 }
254
255 void Unfold()
256 {
257 m_IsFolded = false;
259 SetSynchDirty();
260 }
261
263 {
264 super.OnStoreSave(ctx);
265
266 // Save folded/unfolded state
267 ctx.Write(m_IsFolded);
268 }
269
270 override bool OnStoreLoad(ParamsReadContext ctx, int version)
271 {
272 if (!super.OnStoreLoad(ctx, version))
273 return false;
274
275 // Load folded/unfolded state
276 bool b_is_folded = false;
277 if (!ctx.Read(b_is_folded))
278 b_is_folded = true;
279
280 if (b_is_folded)
281 {
282 Fold();
283 }
284 else
285 {
286 Unfold();
287 }
288
289 return true;
290 }
291
292 override bool CanPutInCargo(EntityAI parent)
293 {
294 if (!super.CanPutInCargo(parent))
295 return false;
296
297 return !GetCompEM().IsPlugged();
298 }
299
300 override bool CanPutIntoHands(EntityAI parent)
301 {
302 if (!super.CanPutIntoHands(parent))
303 {
304 return false;
305 }
306 // Commented out so Reposition action is possible to execute
307 return true;
308 }
309
310 bool IsFolded()
311 {
312 return m_IsFolded;
313 }
314
315 //================================================================
316 // SOUNDS
317 //================================================================
318 protected void SoundTurnOn()
319 {
320 PlaySoundSet(m_SoundTurnOn, SOUND_TURN_ON, 0, 0);
321 }
322
323 protected void SoundTurnOff()
324 {
325 PlaySoundSet(m_SoundTurnOff, SOUND_TURN_OFF, 0, 0);
326 }
327
328 //================================================================
329 // ADVANCED PLACEMENT
330 //================================================================
331 override void OnPlacementStarted(Man player)
332 {
333 super.OnPlacementStarted(player);
334
335 array<string> selections = {
338 };
339
340 PlayerBase playerPB = PlayerBase.Cast(player);
341 foreach (string selection : selections)
342 {
343 if (g_Game.IsMultiplayer() && g_Game.IsServer())
344 playerPB.GetHologramServer().SetSelectionToRefresh(selection);
345 else
346 playerPB.GetHologramLocal().SetSelectionToRefresh(selection);
347 }
348 }
349
350 override void OnPlacementComplete(Man player, vector position = "0 0 0", vector orientation = "0 0 0")
351 {
352 super.OnPlacementComplete(player, position, orientation);
353
354 Unfold();
356 }
357
358 override void OnPlacementCancelled(Man player)
359 {
360 super.OnPlacementCancelled(player);
361
362 Fold(true);
363 }
364
365 override bool IsDeployable()
366 {
367 return true;
368 }
369
370 override string GetDeploySoundset()
371 {
372 return "placeSpotlight_SoundSet";
373 }
374
375 override string GetLoopDeploySoundset()
376 {
377 return "spotlight_deploy_SoundSet";
378 }
379
380 override int GetViewIndex()
381 {
382 if (MemoryPointExists("invView2") && !m_IsFolded)
383 {
384 return 1;
385 }
386
387 return 0;
388 }
389
406
408 protected ref EffectSound m_DeployLoopSound; //DEPRECATED in favor of m_DeployLoopSoundEx
409
412}
PlaceObjectActionReciveData ActionReciveData ActionDeployObject()
Определения ActionDeployObject.c:9
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
void RemoveAction(typename actionName)
Определения AdvancedCommunication.c:252
DayZGame g_Game
Определения DayZGame.c:4074
vector position
Определения DustKickupEffects.c:20
vector orientation
Определения DustKickupEffects.c:21
override bool IsHologram()
Определения ItemBase.c:920
override bool IsBeingPlaced()
Определения ItemBase.c:904
ref EffectSound m_DeployLoopSound
DEPRECATED.
Определения TrapBase.c:732
Определения ActionPlugIn.c:2
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
Определения EnEntity.c:165
override void OnSwitchOn()
Определения Spotlight.c:83
static const int ID_REFLECTOR_FOLDED
Определения Spotlight.c:27
EffectSound m_SoundTurnOn
Определения PortableGasLamp.c:14
override void OnIsPlugged(EntityAI source_device)
Определения Spotlight.c:154
static const string SEL_REFLECTOR_COMP_U
Определения Spotlight.c:11
override bool OnStoreLoad(ParamsReadContext ctx, int version)
Определения Spotlight.c:270
EffectSound m_SoundTurnOff
Определения PortableGasLamp.c:15
override void OnWorkStart()
Определения Spotlight.c:103
override int GetViewIndex()
Определения Spotlight.c:380
void SoundTurnOn()
Определения PortableGasLamp.c:74
override void OnPlacementStarted(Man player)
Определения Spotlight.c:331
override void OnItemLocationChanged(EntityAI old_owner, EntityAI new_owner)
Определения Spotlight.c:128
override bool CanPutIntoHands(EntityAI parent)
Определения Spotlight.c:300
void Unfold()
Определения Spotlight.c:255
override bool IsElectricAppliance()
Определения Spotlight.c:49
bool m_IsFolded
Определения Spotlight.c:3
void PlayDeployLoopSound()
override void SetActions()
Определения Spotlight.c:390
override void OnInitEnergy()
Определения Spotlight.c:54
static const string SEL_CORD_PLUGGED_U
Определения Spotlight.c:13
static string LIGHT_OFF_REFLECTOR
Определения Flashlight.c:9
BlowtorchLight m_Light
Определения Blowtorch.c:7
static const string SEL_CORD_FOLDED_F
Определения Spotlight.c:15
static const string SEL_GLASS_F
Определения Spotlight.c:19
void SoundTurnOff()
Определения PortableGasLamp.c:79
static const int ID_REFLECTOR_UNFOLDED
Определения Spotlight.c:25
static const string SEL_PLACING
Определения Spotlight.c:18
override string GetDeploySoundset()
Определения Spotlight.c:370
void Fold()
Определения TrapSpawnBase.c:247
static const string SEL_GLASS_U
Определения Spotlight.c:20
override void OnWorkStop()
Определения Spotlight.c:115
static const int ID_GLASS_UNFOLDED
Определения Spotlight.c:24
static vector m_LightLocalPosition
Определения Spotlight.c:7
const string SOUND_TURN_OFF
Определения PortableGasLamp.c:11
override void OnStoreSave(ParamsWriteContext ctx)
Определения Spotlight.c:262
const string SOUND_TURN_ON
Определения PortableGasLamp.c:10
override void OnPlacementCancelled(Man player)
Определения Spotlight.c:358
void Spotlight()
Определения Spotlight.c:42
static const string SEL_REFLECTOR_U
Определения Spotlight.c:22
bool m_EvaluateDeployment
Определения Spotlight.c:4
bool IsFolded()
Определения Spotlight.c:310
override void OnIsUnplugged(EntityAI last_energy_source)
Определения Spotlight.c:236
static const string SEL_REFLECTOR_F
Определения Spotlight.c:21
override void OnSwitchOff()
Определения Spotlight.c:90
override bool CanPutInCargo(EntityAI parent)
Определения Spotlight.c:292
static const int ID_GLASS_FOLDED
Определения Spotlight.c:26
void UpdateAllSelections()
Определения MetalWire.c:32
override string GetLoopDeploySoundset()
Определения Spotlight.c:375
override void OnPlacementComplete(Man player, vector position="0 0 0", vector orientation="0 0 0")
Определения Spotlight.c:350
static string LIGHT_ON_GLASS
Определения Flashlight.c:10
static const string SEL_CORD_PLUGGED_F
Определения Spotlight.c:14
void Fold(bool keep_connected=false)
Определения Spotlight.c:242
static vector m_LightLocalOrientation
Определения Spotlight.c:8
void StopDeployLoopSound()
DEPRECATED.
static const string SEL_INVENTORY
Определения Spotlight.c:17
override bool IsDeployable()
Определения Spotlight.c:365
override void EOnInit(IEntity other, int extra)
Определения Spotlight.c:69
static string LIGHT_ON_REFLECTOR
Определения Flashlight.c:11
static const string SEL_CORD_FOLDED_U
Определения Spotlight.c:12
static string LIGHT_OFF_GLASS
Определения Flashlight.c:8
Определения PlayerBaseClient.c:2
proto bool Write(void value_out)
proto bool Read(void value_in)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Определения EnConvert.c:119
Serializer ParamsReadContext
Определения gameplay.c:15
Serializer ParamsWriteContext
Определения gameplay.c:16