Dayz Explorer 1.29.162510
Loading...
Searching...
No Matches
nvgoggles.c
Go to the documentation of this file.
1class NVGoggles extends PoweredOptic_Base
2{
3 bool m_IsLowered;
4 Clothing m_Strap;
5
6 void NVGoggles()
7 {
8 RotateGoggles(true);
9 }
10
11 override ECachedEquipmentItemCategory GetCachedEquipmentCategory()
12 {
14 }
15
16 override void SetActions()
17 {
18 super.SetActions();
19
22 }
23
24 override void EEItemAttached(EntityAI item, string slot_name)
25 {
26 super.EEItemAttached(item, slot_name);
27
28 if (GetCompEM().CanWork() && m_IsLowered)
29 GetCompEM().SwitchOn();
30 }
31
32 override void EEItemDetached(EntityAI item, string slot_name)
33 {
34 super.EEItemDetached(item, slot_name);
35
36 RotateGoggles(true);
37
38 PlayerBase player;
39 if (m_Strap && PlayerBase.CastTo(player, GetHierarchyRootPlayer()))
40 m_Strap.UpdateNVGStatus(player, false, true);
41 }
42
43 override void OnWasAttached(EntityAI parent, int slot_id)
44 {
45 super.OnWasAttached(parent, slot_id);
46
47 RotateGoggles(true);
48 m_Strap = Clothing.Cast(parent);
49 }
50
51 override void OnWasDetached(EntityAI parent, int slot_id)
52 {
53 super.OnWasDetached(parent, slot_id);
54
55 RotateGoggles(true);
56 SetPlayer(null);
57
58 PlayerBase player;
59 if (m_Strap == parent && PlayerBase.CastTo(player, parent.GetHierarchyRootPlayer()))
60 {
61 if (parent && Clothing.Cast(parent))
62 Clothing.Cast(parent).UpdateNVGStatus(player, false, true);
63 }
64
65 m_Strap = null;
66 }
67
68 override void OnWorkStart()
69 {
70 super.OnWorkStart();
71
72 PlayerBase player;
73 EntityAI headgear;
74 EntityAI glasses;
75 if (m_Strap && PlayerBase.CastTo(player, m_Strap.GetHierarchyParent()))
76 {
77 headgear = player.FindAttachmentBySlotName("Headgear");
78 glasses = player.FindAttachmentBySlotName("Eyewear");
79
80 //adjust on load - ComponentEnergyManager stores the 'working' state independently
81 if (!m_IsLowered)
82 RotateGoggles(false);
83
84 if (!g_Game.IsServer() || !g_Game.IsMultiplayer())
85 {
86 if ((headgear == m_Strap || glasses == m_Strap))
87 m_Strap.UpdateNVGStatus(player);
88 }
89 }
90 }
91
92 override void OnWorkStop()
93 {
94 super.OnWorkStop();
95
96 PlayerBase player;
97 EntityAI headgear;
98 EntityAI glasses;
99 if (m_Strap && PlayerBase.CastTo(player, m_Strap.GetHierarchyParent()))
100 {
101 headgear = player.FindAttachmentBySlotName("Headgear");
102 glasses = player.FindAttachmentBySlotName("Eyewear");
103
104 if (!g_Game.IsServer() || !g_Game.IsMultiplayer())
105 {
106 if ((headgear == m_Strap || glasses == m_Strap))
107 m_Strap.UpdateNVGStatus(player);
108 }
109 }
110 }
111
112 override void OnWork(float consumed_energy)
113 {
114 //adjust on load - ComponentEnergyManager stores the 'working' state independently
115 if (!m_IsLowered)
116 RotateGoggles(false);
117
118 PlayerBase player;
119 EntityAI headgear;
120 EntityAI glasses;
121 if (m_Strap && PlayerBase.CastTo(player, m_Strap.GetHierarchyParent()))
122 {
123 headgear = player.FindAttachmentBySlotName("Headgear");
124 glasses = player.FindAttachmentBySlotName("Eyewear");
125
126 if (!g_Game.IsServer() || !g_Game.IsMultiplayer()) // Client side
127 {
128 if ((headgear == m_Strap || glasses == m_Strap) && player.IsControlledPlayer())
129 player.AddActiveNV(GetCurrentNVType());
130 }
131 }
132 }
133
134 void RotateGoggles(bool state)
135 {
136 if (!m_Strap && !state) // disable non default rotation while not strapped
137 return;
138
139 SetAnimationPhase("rotate", !state);
140 m_IsLowered = !state;
141
142 PlayerBase player;
143 int slotId;
144 string slotName;
145 if (m_Strap && m_Strap.GetInventory().GetCurrentAttachmentSlotInfo(slotId, slotName) && PlayerBase.CastTo(player, m_Strap.GetHierarchyParent()))
146 m_Strap.UpdateNVGStatus(player);
147
148 if (GetCompEM())
149 {
150 if (!state && GetCompEM().CanWork())
151 GetCompEM().SwitchOn();
152 else
153 GetCompEM().SwitchOff();
154 }
155 }
156
157 override int GetCurrentNVType()
158 {
159 if (IsWorking())
160 {
161 if (IsUsingOptics2DModel())
162 return NVTypes.NV_GOGGLES_2D;
163
164 return NVTypes.NV_GOGGLES; //omits the widget occluder
165 }
166 else
167 {
168 return NVTypes.NV_GOGGLES_OFF;
169 }
170 }
171
172 override bool IsNVG()
173 {
174 return true;
175 }
176
180
181 ref Timer m_WorkCheckTimer = new Timer();
182
184 void LoweredCheck()
185 {
186 if (GetAnimationPhase("rotate") != m_IsLowered)
187 {
188 m_IsLowered = GetAnimationPhase("rotate");
189 }
190 }
191
192 void SwitchOnNVGCheck()
193 {
194 GetCompEM().SwitchOn();
195 if (GetCompEM().IsSwitchedOn())
196 m_WorkCheckTimer.Stop();
197 }
198}
void AddAction(typename actionName)
void RemoveAction(typename actionName)
override void EEItemDetached(EntityAI item, string slot_name)
override void EEItemAttached(EntityAI item, string slot_name)
PlayerSpawnPreset slotName
override void OnWasDetached(EntityAI parent, int slot_id)
override void SetActions()
override void OnWorkStop()
Definition rangefinder.c:66
override void OnWorkStart()
Definition rangefinder.c:49
DayZGame g_Game
Definition dayzgame.c:3942
override int GetCurrentNVType()
Definition optics.c:59
void SetPlayer(Man player)
override void OnWasDetached(EntityAI parent, int slot_id)
override void OnWork(float consumed_energy)