DayZ 1.29
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
HudDebugWinHealth.c
См. документацию.
11
13{
14 protected bool m_IsInit;
15 protected bool m_IsModeSelf = true;
16 protected Widget m_WgtPanel;
17 protected ScrollWidget m_WgtPanelScroll;
19 protected ButtonWidget m_ButtonSelf;
20 protected ButtonWidget m_ButtonTarget;
21
23 protected PluginDeveloperSync m_DevSyncPlugin;
24
26
27 //============================================
28 void HudDebugWinHealth(Widget widget_root)
29 {
30 m_WgtRoot = widget_root;
31 m_WgtPanel = Widget.Cast(m_WgtRoot.FindAnyWidget("HealthPanel") );
32 m_WgtPanelScroll = ScrollWidget.Cast(m_WgtRoot.FindAnyWidget("HealthPanelScroll") );
33 }
34
36 {
37 SetUpdate(false);
38 }
39
40 override void Update()
41 {
42 super.Update();
43
44 if (!m_IsInit)
45 InitDebug();
46
47 if (m_DevSyncPlugin.GetIsTargetChanged() || !m_TargetEntity)
48 {
49 m_DevSyncPlugin.SetTargetChanged(false);
51
52 if (m_IsModeSelf)
53 m_TargetEntity = g_Game.GetPlayer();
54 #ifdef DEVELOPER
55 else
56 m_TargetEntity = EntityAI.Cast(_item);
57 #endif
58
60 }
61
64 else
65 m_TargetDisplayNameW.SetText("No target selected");
66 }
67
68 override int GetType()
69 {
70 return HudDebug.HUD_WIN_HEALTH;
71 }
72
73 override void Show()
74 {
75 super.Show();
76 SetUpdate(true);
77
78 if (!m_DevSyncPlugin)
79 m_DevSyncPlugin = PluginDeveloperSync.Cast( GetPlugin( PluginDeveloperSync ) );
80 }
81
82 override void Hide()
83 {
84 super.Hide();
85
87 m_IsInit = false;
88 m_TargetEntity = null;
89 SetUpdate(false);
90 }
91
92 override void SetUpdate( bool state )
93 {
94 PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
95
96 if (g_Game.IsClient())
97 {
98 Param1<bool> params = new Param1<bool>( state );
99 if (player)
100 {
101 player.RPCSingleParam( ERPCs.DEV_HEALTH_UPDATE, params, true );
102 SetRPCSent();
103 }
104 }
105 else // set directly
106 {
107 if (m_DevSyncPlugin)
108 m_DevSyncPlugin.EnableUpdate( state, ERPCs.DEV_HEALTH_UPDATE, player );
109 }
110 }
111
113 {
114 if (!m_ButtonSelf)
115 m_ButtonSelf = ButtonWidget.Cast(m_WgtRoot.FindAnyWidget("ButtonSelf"));
116
117 if (!m_ButtonTarget)
118 m_ButtonTarget = ButtonWidget.Cast(m_WgtRoot.FindAnyWidget("ButtonTarget"));
119
121 m_TargetDisplayNameW = TextWidget.Cast(m_WgtRoot.FindAnyWidget("txt_TargetName"));
122
123 if (m_IsModeSelf) // initial RPC set so the server knows which mode is the deubg in
124 OnClick(m_ButtonSelf, 0, 0, 0);
125 else
126 OnClick(m_ButtonTarget, 0, 0, 0);
127
128 m_IsInit = true;
129 }
130
132 bool OnClick( Widget w, int x, int y, int button )
133 {
134 if (!w)
135 return false;
136
137 HudDebugWinHealthEntry clickedEntry;
138
139 foreach (HudDebugWinHealthEntry entry : m_Entries)
140 {
141 if (entry.m_EntryRootW == w.GetParent())
142 clickedEntry = entry;
143 }
144
145 int buttonID;
146
147 if (w.GetName() == "ButtonMin")
148 {
149 buttonID = 0;
150 RunRPC(clickedEntry, buttonID);
151 return true;
152 }
153 else if (w.GetName() == "ButtonMax")
154 {
155 buttonID = 1;
156 RunRPC(clickedEntry, buttonID);
157 return true;
158 }
159 else if (w.GetName() == "ButtonAdd")
160 {
161 buttonID = 2;
162 RunRPC(clickedEntry, buttonID);
163 return true;
164 }
165 else if (w.GetName() == "ButtonSubtract")
166 {
167 buttonID = 3;
168 RunRPC(clickedEntry, buttonID);
169 return true;
170 }
171 else if (w == m_ButtonTarget)
172 {
173 #ifdef DEVELOPER
174 buttonID = 4;
175 HandleTargetState(false);
176 RunRPC(clickedEntry, buttonID);
177 return true;
178 #endif
179 }
180 else if (w == m_ButtonSelf)
181 {
182 buttonID = 5;
183 HandleTargetState(true);
184 RunRPC(clickedEntry, buttonID);
185 return true;
186 }
187
188 return false;
189 }
190
191 void RunRPC(HudDebugWinHealthEntry entry, int buttonID)
192 {
194 if (entry)
195 params = new Param3<int , string, string>( buttonID, entry.m_Zone, entry.m_HealthMode);
196 else
197 params = new Param3<int , string, string>( buttonID, "", "");
198
199 PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
200 if ( player )
201 player.RPCSingleParam( ERPCs.DEV_RPC_HEALTH_SET, params, true );
202 }
203
204 // Self/target button visuals | true = self, false = target
205 void HandleTargetState(bool button)
206 {
207 if (button)
208 {
209 m_IsModeSelf = true;
210 m_ButtonSelf.SetTextColor(COLOR_YELLOW);
211 m_ButtonTarget.SetTextColor(0xFF808080); // grey
212 }
213 else
214 {
215 m_IsModeSelf = false;
216 m_ButtonTarget.SetTextColor(COLOR_YELLOW);
217 m_ButtonSelf.SetTextColor(0xFF808080); // grey
218 }
219 }
220
221 // Setup widgets for health zones
223 {
224 if (!m_TargetEntity)
225 return;
226
227 m_TargetDisplayNameW.SetText(m_TargetEntity.ClassName());
228
229 array<ref SyncedValue> healthSynched = m_DevSyncPlugin.GetHealthZonesSynched();
230
231 foreach (SyncedValue data : healthSynched)
232 {
233 InitEntry(data);
234 }
235
236 AutoHeightSpacer WgtModifiersContent_panel_script;
237 m_WgtPanel.GetScript( WgtModifiersContent_panel_script );
238 WgtModifiersContent_panel_script.Update();
239 m_WgtPanelScroll.VScrollToPos(0);
240 }
241
243 {
245 entry.m_EntryRootW = g_Game.GetWorkspace().CreateWidgets( "gui/layouts/debug/day_z_hud_debug_health.layout", m_WgtPanel );
246 entry.m_EntryZoneW = TextWidget.Cast(entry.m_EntryRootW.FindAnyWidget("Name"));
247
248 if (data.m_ValueNorm == 1)
249 entry.m_HealthMode = "Shock";
250 else if (data.m_ValueNorm == 2)
251 entry.m_HealthMode = "Blood";
252 else
253 entry.m_HealthMode = "Health";
254
255 entry.m_IsTitleEntry = data.m_State;
256
257 if (entry.m_IsTitleEntry) //title entry with disabled buttons
258 {
259 entry.m_EntryZoneW.SetText(entry.m_HealthMode);
260 entry.m_EntryZoneW.SetColor(0xFFABABAB); // grey
261
262 entry.m_EntryRootW.FindAnyWidget("Value").Show(false);
263 entry.m_EntryRootW.FindAnyWidget("Value").Enable(false);
264 entry.m_EntryRootW.FindAnyWidget("ButtonMin").Show(false);
265 entry.m_EntryRootW.FindAnyWidget("ButtonMin").Enable(false);
266 entry.m_EntryRootW.FindAnyWidget("ButtonMax").Show(false);
267 entry.m_EntryRootW.FindAnyWidget("ButtonMax").Enable(false);
268 entry.m_EntryRootW.FindAnyWidget("ButtonAdd").Show(false);
269 entry.m_EntryRootW.FindAnyWidget("ButtonAdd").Enable(false);
270 entry.m_EntryRootW.FindAnyWidget("ButtonSubtract").Show(false);
271 entry.m_EntryRootW.FindAnyWidget("ButtonSubtract").Enable(false);
272 }
273 else
274 {
275 entry.m_EntryZoneW.SetText(data.m_Name);
276 entry.m_Zone = data.m_Name;
277 entry.m_EntryValueW = TextWidget.Cast(entry.m_EntryRootW.FindAnyWidget("Value"));
278 }
279
280 m_Entries.Insert(entry);
281 }
282
284 {
285 if (m_Entries.Count() == 0)
286 return;
287
288 array<ref SyncedValue> healthSynched = m_DevSyncPlugin.GetHealthZonesSynched();
289 float roundedHealth, zoneMax;
290
291 foreach (int i, SyncedValue value : healthSynched)
292 {
293 HudDebugWinHealthEntry entry = m_Entries.Get(i);
294
295 if (entry.m_IsTitleEntry)
296 continue;
297
298 if (entry.m_Zone == "Global")
299 zoneMax = m_TargetEntity.GetMaxHealth("", entry.m_HealthMode);
300 else
301 zoneMax = m_TargetEntity.GetMaxHealth(entry.m_Zone, entry.m_HealthMode);
302
303 roundedHealth = Math.Round(value.m_Value * 100) * 0.01;
304 entry.m_EntryValueW.SetText(roundedHealth.ToString() + "/" + zoneMax.ToString());
305
306 if (roundedHealth == zoneMax)
307 entry.m_EntryValueW.SetColor(COLOR_GREEN);
308 else if (roundedHealth < zoneMax * 0.3)
309 entry.m_EntryValueW.SetColor(COLOR_RED);
310 else
311 entry.m_EntryValueW.SetColor(COLOR_YELLOW);
312 }
313 }
314
316 {
317 foreach (HudDebugWinHealthEntry entry : m_Entries)
318 {
319 entry.m_EntryRootW.Unlink();
320 }
321
322 m_Entries.Clear();
323 }
324}
DayZGame g_Game
Определения DayZGame.c:3942
ERPCs
Определения ERPCs.c:2
void HudDebug()
Определения HudDebug.c:108
Widget m_WgtRoot
Определения HudDebug.c:94
void UpdateZones()
Определения HudDebugWinHealth.c:283
void RunRPC(HudDebugWinHealthEntry entry, int buttonID)
Определения HudDebugWinHealth.c:191
Widget m_WgtPanel
Определения HudDebugWinHealth.c:16
PluginDeveloperSync m_DevSyncPlugin
Определения HudDebugWinHealth.c:23
void HudDebugWinHealth(Widget widget_root)
Определения HudDebugWinHealth.c:28
void InitEntry(SyncedValue data)
Определения HudDebugWinHealth.c:242
void HandleTargetState(bool button)
Определения HudDebugWinHealth.c:205
TextWidget m_TargetDisplayNameW
Определения HudDebugWinHealth.c:18
class HudDebugWinHealthEntry m_IsInit
void InitDebug()
Определения HudDebugWinHealth.c:112
void ~HudDebugWinHealth()
Определения HudDebugWinHealth.c:35
void InitEntityEntries()
Определения HudDebugWinHealth.c:222
ScrollWidget m_WgtPanelScroll
Определения HudDebugWinHealth.c:17
bool m_IsModeSelf
Определения HudDebugWinHealth.c:15
ButtonWidget m_ButtonSelf
Определения HudDebugWinHealth.c:19
void CleanupEntries()
Определения HudDebugWinHealth.c:315
ref array< ref HudDebugWinHealthEntry > m_Entries
Определения HudDebugWinHealth.c:25
ButtonWidget m_ButtonTarget
Определения HudDebugWinHealth.c:20
EntityAI m_TargetEntity
Определения HudDebugWinHealth.c:22
Icon x
Icon y
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:325
void Update()
Определения AutoHeightSpacer.c:11
void Show()
Определения HudDebugWinBase.c:48
void SetRPCSent()
Определения HudDebugWinBase.c:39
bool OnClick(Widget w, int x, int y, int button)
Определения HudDebugWinCharStats.c:200
void Hide()
Определения HudDebugWinBase.c:57
void SetUpdate(bool state)
int GetType()
Определения HudDebugWinBase.c:18
void Update()
Определения HudDebugWinBase.c:27
Определения HudDebugWinBase.c:2
TextWidget m_EntryZoneW
Определения HudDebugWinHealth.c:8
string m_HealthMode
Определения HudDebugWinHealth.c:4
TextWidget m_EntryValueW
Определения HudDebugWinHealth.c:9
bool m_IsTitleEntry
Определения HudDebugWinHealth.c:5
string m_Zone
Определения HudDebugWinHealth.c:3
Widget m_EntryRootW
Определения HudDebugWinHealth.c:7
Определения HudDebugWinHealth.c:2
Определения EnMath.c:7
Определения PlayerBaseClient.c:2
float m_ValueNorm
Определения SyncedValue.c:5
bool m_State
Определения SyncedValue.c:6
string m_Name
Определения SyncedValue.c:3
Определения SyncedValue.c:2
Определения EnWidgets.c:220
Определения EnWidgets.c:190
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto string ToString(bool simple=true)
const int COLOR_RED
Определения 1_Core/DayZ/constants.c:64
const int COLOR_GREEN
Определения 1_Core/DayZ/constants.c:65
const int COLOR_YELLOW
Определения 1_Core/DayZ/constants.c:67
static proto float Round(float f)
Returns mathematical round of value.