DayZ 1.27
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 m_Light = SpotlightLight.Cast(ScriptedLightBase.CreateLight(SpotlightLight, "0 0 0"));
108 #endif
109
111 }
112
113 override void OnWorkStop()
114 {
115 #ifndef SERVER
116 if (m_Light)
117 m_Light.FadeOut();
118 #endif
119
121 }
122
123 // Called when this device is picked up
124 override void OnItemLocationChanged(EntityAI old_owner, EntityAI new_owner)
125 {
126 super.OnItemLocationChanged(old_owner, new_owner);
127
128 //skips folding of currently deployed spotlight
130 {
131 m_EvaluateDeployment = false;
132 if (m_Light)
133 {
135 }
136
137 Unfold();
138
139 return;
140 }
141
142 // When the item is picked up by a player
143 PlayerBase player = PlayerBase.Cast(new_owner);
144 if (player && player.GetItemInHands() == this)
145 {
146 Fold(GetCompEM().IsPlugged());
147 }
148 }
149
150 override void OnIsPlugged(EntityAI source_device)
151 {
152 Unfold();
154 }
155
156 protected void UpdateAllSelections()
157 {
158 bool isPlugged = GetCompEM().IsPlugged();
159 PlayerBase player = PlayerBase.Cast(GetHierarchyRootPlayer());
160 bool isInHands = player && player.GetItemInHands() == this;
161 HideAllSelections();
162
163 m_LightLocalPosition = GetSelectionPositionLS("beamStart");
164
165 if (IsFolded() || isInHands)
166 {
167 HideSelection(SEL_REFLECTOR_COMP_U);
168
169 ShowSelection(SEL_INVENTORY);
170 ShowSelection(SEL_GLASS_F);
171 ShowSelection(SEL_REFLECTOR_F);
172
173 if (isPlugged)
174 {
175 ShowSelection(SEL_CORD_PLUGGED_F);
176 }
177 else
178 {
179 ShowSelection(SEL_CORD_FOLDED_F);
180 }
181
182 if (!IsHologram())
183 {
184 if (GetCompEM().IsWorking())
185 {
186 SetObjectMaterial(ID_GLASS_UNFOLDED, LIGHT_ON_GLASS);
187 SetObjectMaterial(ID_REFLECTOR_UNFOLDED, LIGHT_ON_REFLECTOR);
188 SetObjectMaterial(ID_GLASS_FOLDED, LIGHT_ON_GLASS);
189 SetObjectMaterial(ID_REFLECTOR_FOLDED, LIGHT_ON_REFLECTOR);
190 }
191 else
192 {
193 SetObjectMaterial(ID_GLASS_UNFOLDED, LIGHT_OFF_GLASS);
194 SetObjectMaterial(ID_REFLECTOR_UNFOLDED, LIGHT_OFF_REFLECTOR);
195 SetObjectMaterial(ID_GLASS_FOLDED, LIGHT_OFF_GLASS);
196 SetObjectMaterial(ID_REFLECTOR_FOLDED, LIGHT_OFF_REFLECTOR);
197 }
198 }
199 }
200 else
201 {
202 ShowSelection(SEL_PLACING);
203 ShowSelection(SEL_REFLECTOR_U);
204 ShowSelection(SEL_GLASS_U);
205 ShowSelection(SEL_REFLECTOR_COMP_U);
206
207 if (isPlugged)
208 {
209 ShowSelection(SEL_CORD_PLUGGED_U);
210 }
211 else
212 {
213 ShowSelection(SEL_CORD_FOLDED_U);
214 }
215
216 if (!IsHologram())
217 {
218 if (GetCompEM().IsWorking())
219 {
220 SetObjectMaterial(ID_GLASS_UNFOLDED, LIGHT_ON_GLASS);
221 SetObjectMaterial(ID_REFLECTOR_UNFOLDED, LIGHT_ON_REFLECTOR);
222 }
223 else
224 {
225 SetObjectMaterial(ID_GLASS_UNFOLDED, LIGHT_OFF_GLASS);
226 SetObjectMaterial(ID_REFLECTOR_UNFOLDED, LIGHT_OFF_REFLECTOR);
227 }
228 }
229 }
230 }
231
232 override void OnIsUnplugged(EntityAI last_energy_source)
233 {
234 Fold();
236 }
237
238 void Fold(bool keep_connected = false)
239 {
240 m_IsFolded = true;
241 if (!keep_connected)
242 {
243 GetCompEM().SwitchOff();
244 GetCompEM().UnplugThis();
245 }
246
248 SetSynchDirty();
249 }
250
251 void Unfold()
252 {
253 m_IsFolded = false;
255 SetSynchDirty();
256 }
257
259 {
260 super.OnStoreSave(ctx);
261
262 // Save folded/unfolded state
263 ctx.Write(m_IsFolded);
264 }
265
266 override bool OnStoreLoad(ParamsReadContext ctx, int version)
267 {
268 if (!super.OnStoreLoad(ctx, version))
269 return false;
270
271 // Load folded/unfolded state
272 bool b_is_folded = false;
273 if (!ctx.Read(b_is_folded))
274 b_is_folded = true;
275
276 if (b_is_folded)
277 {
278 Fold();
279 }
280 else
281 {
282 Unfold();
283 }
284
285 return true;
286 }
287
288 override bool CanPutInCargo(EntityAI parent)
289 {
290 if (!super.CanPutInCargo(parent))
291 return false;
292
293 return !GetCompEM().IsPlugged();
294 }
295
296 override bool CanPutIntoHands(EntityAI parent)
297 {
298 if (!super.CanPutIntoHands(parent))
299 {
300 return false;
301 }
302 // Commented out so Reposition action is possible to execute
303 return true;
304 }
305
306 bool IsFolded()
307 {
308 return m_IsFolded;
309 }
310
311 //================================================================
312 // SOUNDS
313 //================================================================
314 protected void SoundTurnOn()
315 {
316 PlaySoundSet(m_SoundTurnOn, SOUND_TURN_ON, 0, 0);
317 }
318
319 protected void SoundTurnOff()
320 {
321 PlaySoundSet(m_SoundTurnOff, SOUND_TURN_OFF, 0, 0);
322 }
323
324 //================================================================
325 // ADVANCED PLACEMENT
326 //================================================================
327 override void OnPlacementStarted(Man player)
328 {
329 super.OnPlacementStarted(player);
330
331 array<string> selections = {
334 };
335
336 PlayerBase playerPB = PlayerBase.Cast(player);
337 foreach (string selection : selections)
338 {
339 if (GetGame().IsMultiplayer() && GetGame().IsServer())
340 playerPB.GetHologramServer().SetSelectionToRefresh(selection);
341 else
342 playerPB.GetHologramLocal().SetSelectionToRefresh(selection);
343 }
344 }
345
346 override void OnPlacementComplete(Man player, vector position = "0 0 0", vector orientation = "0 0 0")
347 {
348 super.OnPlacementComplete(player, position, orientation);
349
350 Unfold();
352 }
353
354 override void OnPlacementCancelled(Man player)
355 {
356 super.OnPlacementCancelled(player);
357
358 Fold(true);
359 }
360
361 override bool IsDeployable()
362 {
363 return true;
364 }
365
366 override string GetDeploySoundset()
367 {
368 return "placeSpotlight_SoundSet";
369 }
370
371 override string GetLoopDeploySoundset()
372 {
373 return "spotlight_deploy_SoundSet";
374 }
375
376 override int GetViewIndex()
377 {
378 if (MemoryPointExists("invView2") && !m_IsFolded)
379 {
380 return 1;
381 }
382
383 return 0;
384 }
385
402
404 protected ref EffectSound m_DeployLoopSound; //DEPRECATED in favor of m_DeployLoopSoundEx
405
408}
PlaceObjectActionReciveData ActionReciveData ActionDeployObject()
Определения ActionDeployObject.c:9
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
void RemoveAction(typename actionName)
Определения AdvancedCommunication.c:252
override bool IsHologram()
Определения ItemBase.c:5753
override bool IsBeingPlaced()
Определения ItemBase.c:5737
ref EffectSound m_DeployLoopSound
DEPRECATED.
Определения TrapBase.c:692
Определения ActionPlugIn.c:2
Wrapper class for managing sound through SEffectManager.
Определения EffectSound.c:5
Определения Building.c:6
Определения 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:150
static const string SEL_REFLECTOR_COMP_U
Определения Spotlight.c:11
override bool OnStoreLoad(ParamsReadContext ctx, int version)
Определения Spotlight.c:266
EffectSound m_SoundTurnOff
Определения PortableGasLamp.c:15
override void OnWorkStart()
Определения Spotlight.c:103
override int GetViewIndex()
Определения Spotlight.c:376
void SoundTurnOn()
Определения PortableGasLamp.c:74
override void OnPlacementStarted(Man player)
Определения Spotlight.c:327
override void OnItemLocationChanged(EntityAI old_owner, EntityAI new_owner)
Определения Spotlight.c:124
override bool CanPutIntoHands(EntityAI parent)
Определения Spotlight.c:296
void Unfold()
Определения Spotlight.c:251
override bool IsElectricAppliance()
Определения Spotlight.c:49
bool m_IsFolded
Определения Spotlight.c:3
void PlayDeployLoopSound()
override void SetActions()
Определения Spotlight.c:386
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:366
void Fold()
Определения TrapSpawnBase.c:247
static const string SEL_GLASS_U
Определения Spotlight.c:20
override void OnWorkStop()
Определения Spotlight.c:113
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:258
const string SOUND_TURN_ON
Определения PortableGasLamp.c:10
override void OnPlacementCancelled(Man player)
Определения Spotlight.c:354
void Spotlight()
Определения Spotlight.c:42
static const string SEL_REFLECTOR_U
Определения Spotlight.c:22
bool m_EvaluateDeployment
Определения Spotlight.c:4
bool IsFolded()
Определения Spotlight.c:306
override void OnIsUnplugged(EntityAI last_energy_source)
Определения Spotlight.c:232
static const string SEL_REFLECTOR_F
Определения Spotlight.c:21
override void OnSwitchOff()
Определения Spotlight.c:90
override bool CanPutInCargo(EntityAI parent)
Определения Spotlight.c:288
static const int ID_GLASS_FOLDED
Определения Spotlight.c:26
void UpdateAllSelections()
Определения MetalWire.c:32
override string GetLoopDeploySoundset()
Определения Spotlight.c:371
override void OnPlacementComplete(Man player, vector position="0 0 0", vector orientation="0 0 0")
Определения Spotlight.c:346
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:238
static vector m_LightLocalOrientation
Определения Spotlight.c:8
void StopDeployLoopSound()
DEPRECATED.
static const string SEL_INVENTORY
Определения Spotlight.c:17
override bool IsDeployable()
Определения Spotlight.c:361
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
Определения InventoryItem.c:731
Определения 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:106
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
Serializer ParamsWriteContext
Определения gameplay.c:16