DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
HudDebugWinHealth.c
См. документацию.
12
14{
15 protected bool m_IsInit;
16 protected bool m_IsModeSelf = true;
17 protected GridSpacerWidget m_WgtPanel;
18 protected ScrollWidget m_WgtPanelScroll;
20 protected ButtonWidget m_ButtonSelf;
21 protected ButtonWidget m_ButtonTarget;
23
25 protected PluginDeveloperSync m_DevSyncPlugin;
26
28 protected float m_ContenHeight;
29
30 //============================================
31 void HudDebugWinHealth(Widget widget_root)
32 {
33 m_WgtRoot = widget_root;
34 m_WgtPanel = GridSpacerWidget.Cast(m_WgtRoot.FindAnyWidget("HealthPanel") );
35 m_WgtPanelScroll = ScrollWidget.Cast(m_WgtRoot.FindAnyWidget("HealthPanelScroll") );
36 m_WgtHeader = m_WgtRoot.FindAnyWidget("header_Health");
37
40 {
41 vector pos = m_ConfigDebugProfile.GetHealthDebugPos();
42 if (m_WgtRoot && pos != vector.Zero)
43 {
44 float wx = pos[0];
45 float wy = pos[1];
46 m_WgtRoot.SetPos(wx, wy);
47 }
48 }
49 }
50
52 {
53 SetUpdate(false);
54 }
55
56 override void Update(float timeslice)
57 {
58 super.Update(timeslice);
59
60 if (m_IsDragging)
61 {
62 int x,y;
65 }
66 else
67 {
68 if (!m_IsInit)
69 InitDebug();
70
71 if (m_DevSyncPlugin.GetIsTargetChanged() || !m_TargetEntity)
72 {
73 m_DevSyncPlugin.SetTargetChanged(false);
75
76 if (m_IsModeSelf)
77 m_TargetEntity = g_Game.GetPlayer();
78 #ifdef DEVELOPER
79 else
80 m_TargetEntity = EntityAI.Cast(_item);
81 #endif
82
84 }
85
88 else
89 m_TargetDisplayNameW.SetText("No target selected");
90 }
91 }
92
93 override int GetType()
94 {
95 return HudDebug.HUD_WIN_HEALTH;
96 }
97
98 override void Show()
99 {
100 super.Show();
101 SetUpdate(true);
102
103 if (!m_DevSyncPlugin)
104 m_DevSyncPlugin = PluginDeveloperSync.Cast( GetPlugin( PluginDeveloperSync ) );
105 }
106
107 override void Hide()
108 {
109 super.Hide();
110
112 m_IsInit = false;
113 m_TargetEntity = null;
114 SetUpdate(false);
115 }
116
117 override void SetUpdate( bool state )
118 {
119 PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
120
121 if (g_Game.IsClient())
122 {
123 Param1<bool> params = new Param1<bool>( state );
124 if (player)
125 {
126 player.RPCSingleParam( ERPCs.DEV_HEALTH_UPDATE, params, true );
127 SetRPCSent();
128 }
129 }
130 else // set directly
131 {
132 if (m_DevSyncPlugin)
133 m_DevSyncPlugin.EnableUpdate( state, ERPCs.DEV_HEALTH_UPDATE, player );
134 }
135 }
136
138 {
139 if (!m_ButtonSelf)
140 m_ButtonSelf = ButtonWidget.Cast(m_WgtRoot.FindAnyWidget("ButtonSelf"));
141
142 if (!m_ButtonTarget)
143 m_ButtonTarget = ButtonWidget.Cast(m_WgtRoot.FindAnyWidget("ButtonTarget"));
144
146 m_TargetDisplayNameW = TextWidget.Cast(m_WgtRoot.FindAnyWidget("txt_TargetName"));
147
148 if (m_IsModeSelf) // initial RPC set so the server knows which mode is the deubg in
149 OnClick(m_ButtonSelf, 0, 0, 0);
150 else
151 OnClick(m_ButtonTarget, 0, 0, 0);
152
153 m_IsInit = true;
154 }
155
157 bool OnClick( Widget w, int x, int y, int button )
158 {
159 SetDragging(false);
160
161 if (!w)
162 return false;
163
164 HudDebugWinHealthEntry clickedEntry;
165
166 foreach (HudDebugWinHealthEntry entry : m_Entries)
167 {
168 if (entry.m_EntryRootW == w.GetParent())
169 clickedEntry = entry;
170 }
171
172 int buttonID;
173
174 if (w.GetName() == "ButtonMin")
175 {
176 buttonID = 0;
177 RunRPC(clickedEntry, buttonID);
178 return true;
179 }
180 else if (w.GetName() == "ButtonMax")
181 {
182 buttonID = 1;
183 RunRPC(clickedEntry, buttonID);
184 return true;
185 }
186 else if (w.GetName() == "ButtonAdd")
187 {
188 buttonID = 2;
189 RunRPC(clickedEntry, buttonID);
190 return true;
191 }
192 else if (w.GetName() == "ButtonSubtract")
193 {
194 buttonID = 3;
195 RunRPC(clickedEntry, buttonID);
196 return true;
197 }
198 else if (w == m_ButtonTarget)
199 {
200 #ifdef DEVELOPER
201 buttonID = 4;
202 HandleTargetState(false);
203 RunRPC(clickedEntry, buttonID);
204 return true;
205 #endif
206 }
207 else if (w == m_ButtonSelf)
208 {
209 buttonID = 5;
210 HandleTargetState(true);
211 RunRPC(clickedEntry, buttonID);
212 return true;
213 }
214
215 return false;
216 }
217
218 void RunRPC(HudDebugWinHealthEntry entry, int buttonID)
219 {
220 Param3<int , string, string> params;
221 if (entry)
222 params = new Param3<int , string, string>( buttonID, entry.m_Zone, entry.m_HealthMode);
223 else
224 params = new Param3<int , string, string>( buttonID, "", "");
225
226 PlayerBase player = PlayerBase.Cast( g_Game.GetPlayer() );
227 if ( player )
228 player.RPCSingleParam( ERPCs.DEV_RPC_HEALTH_SET, params, true );
229 }
230
231 // Self/target button visuals | true = self, false = target
232 void HandleTargetState(bool button)
233 {
234 if (button)
235 {
236 m_IsModeSelf = true;
237 m_ButtonSelf.SetTextColor(COLOR_YELLOW);
238 m_ButtonTarget.SetTextColor(0xFF808080); // grey
239 }
240 else
241 {
242 m_IsModeSelf = false;
243 m_ButtonTarget.SetTextColor(COLOR_YELLOW);
244 m_ButtonSelf.SetTextColor(0xFF808080); // grey
245 }
246 }
247
248 // Setup widgets for health zones
250 {
251 if (!m_TargetEntity)
252 return;
253
254 m_TargetDisplayNameW.SetText(m_TargetEntity.ClassName());
255
256 array<ref SyncedValue> healthSynched = m_DevSyncPlugin.GetHealthZonesSynched();
257
258 foreach (SyncedValue data : healthSynched)
259 {
260 InitEntry(data);
261 }
262
263 m_WgtPanel.Update();
264
265 float widthS, heightS;
266 m_WgtPanelScroll.GetSize(widthS, heightS);
267 m_WgtPanelScroll.SetSize(widthS, m_ContenHeight);
268 m_WgtPanelScroll.VScrollToPos(0);
269 }
270
272 {
274 entry.m_EntryRootW = g_Game.GetWorkspace().CreateWidgets( "gui/layouts/debug/day_z_hud_debug_health.layout", m_WgtPanel );
275 entry.m_EntryZoneW = TextWidget.Cast(entry.m_EntryRootW.FindAnyWidget("Name"));
276 entry.m_SpacerLine = entry.m_EntryRootW.FindAnyWidget("SpacerLine");
277
278 if (data.m_ValueNorm == 1)
279 entry.m_HealthMode = "Shock";
280 else if (data.m_ValueNorm == 2)
281 entry.m_HealthMode = "Blood";
282 else
283 entry.m_HealthMode = "Health";
284
285 entry.m_IsTitleEntry = data.m_State;
286
287 if (entry.m_IsTitleEntry) //title entry with disabled buttons
288 {
289 entry.m_EntryZoneW.SetText(entry.m_HealthMode);
290 entry.m_EntryZoneW.SetColor(0xFF00FFFF); // blue
291 entry.m_SpacerLine.Show(true);
292
293 entry.m_EntryRootW.FindAnyWidget("Value").Show(false);
294 entry.m_EntryRootW.FindAnyWidget("Value").Enable(false);
295 entry.m_EntryRootW.FindAnyWidget("ButtonMin").Show(false);
296 entry.m_EntryRootW.FindAnyWidget("ButtonMin").Enable(false);
297 entry.m_EntryRootW.FindAnyWidget("ButtonMax").Show(false);
298 entry.m_EntryRootW.FindAnyWidget("ButtonMax").Enable(false);
299 entry.m_EntryRootW.FindAnyWidget("ButtonAdd").Show(false);
300 entry.m_EntryRootW.FindAnyWidget("ButtonAdd").Enable(false);
301 entry.m_EntryRootW.FindAnyWidget("ButtonSubtract").Show(false);
302 entry.m_EntryRootW.FindAnyWidget("ButtonSubtract").Enable(false);
303 }
304 else
305 {
306 entry.m_EntryZoneW.SetText(data.m_Name);
307 entry.m_Zone = data.m_Name;
308 entry.m_EntryValueW = TextWidget.Cast(entry.m_EntryRootW.FindAnyWidget("Value"));
309 }
310
311 float width, height;
312 entry.m_EntryRootW.GetSize(width, height);
313 m_ContenHeight += height;
314
315 m_Entries.Insert(entry);
316 }
317
319 {
320 if (m_Entries.Count() == 0 || !m_TargetEntity)
321 return;
322
323 array<ref SyncedValue> healthSynched = m_DevSyncPlugin.GetHealthZonesSynched();
324 float roundedHealth, zoneMax;
325
326 foreach (int i, SyncedValue value : healthSynched)
327 {
328 HudDebugWinHealthEntry entry = m_Entries.Get(i);
329
330 if (entry.m_IsTitleEntry)
331 continue;
332
333 if (entry.m_Zone == "Global")
334 zoneMax = m_TargetEntity.GetMaxHealth("", entry.m_HealthMode);
335 else
336 zoneMax = m_TargetEntity.GetMaxHealth(entry.m_Zone, entry.m_HealthMode);
337
338 roundedHealth = Math.Round(value.m_Value * 100) * 0.01;
339 entry.m_EntryValueW.SetText(roundedHealth.ToString() + "/" + zoneMax.ToString());
340
341 if (roundedHealth == zoneMax)
342 entry.m_EntryValueW.SetColor(COLOR_GREEN);
343 else if (roundedHealth < zoneMax * 0.3)
344 entry.m_EntryValueW.SetColor(COLOR_RED);
345 else
346 entry.m_EntryValueW.SetColor(COLOR_YELLOW);
347 }
348 }
349
351 {
352 foreach (HudDebugWinHealthEntry entry : m_Entries)
353 {
354 entry.m_EntryRootW.Unlink();
355 }
356
357 m_Entries.Clear();
358 m_ContenHeight = 0;
359 }
360
361 bool OnMouseButtonDown(Widget w, int x, int y, int button)
362 {
363 if (button == 0 && (w == m_WgtRoot || w == m_WgtHeader))
364 {
365 SetDragging(true);
366 return true;
367 }
368
369 return false;
370 }
371
372 bool OnMouseButtonUp(Widget w, int x, int y, int button)
373 {
374 if (button == 0 && m_IsDragging)
375 {
376 SetDragging(false);
377 return true;
378 }
379
380 return false;
381 }
382
383 override void OnDraggingEnd()
384 {
385 float wx, wy;
386 m_WgtRoot.GetScreenPos(wx,wy);
388 {
389 m_ConfigDebugProfile.SetHealthDebugPos(Vector(wx,wy,0));
390 }
391 }
392}
DayZGame g_Game
Определения DayZGame.c:4074
ERPCs
Определения ERPCs.c:2
void HudDebug()
Определения HudDebug.c:93
Widget m_WgtRoot
Определения HudDebug.c:80
Widget m_WgtHeader
Определения HudDebugWinCharAgents.c:74
void UpdateZones()
Определения HudDebugWinHealth.c:318
void RunRPC(HudDebugWinHealthEntry entry, int buttonID)
Определения HudDebugWinHealth.c:218
PluginDeveloperSync m_DevSyncPlugin
Определения HudDebugWinHealth.c:25
void HudDebugWinHealth(Widget widget_root)
Определения HudDebugWinHealth.c:31
void InitEntry(SyncedValue data)
Определения HudDebugWinHealth.c:271
GridSpacerWidget m_WgtPanel
Определения HudDebugWinHealth.c:17
float m_ContenHeight
Определения HudDebugWinHealth.c:28
void HandleTargetState(bool button)
Определения HudDebugWinHealth.c:232
TextWidget m_TargetDisplayNameW
Определения HudDebugWinHealth.c:19
class HudDebugWinHealthEntry m_IsInit
void InitDebug()
Определения HudDebugWinHealth.c:137
void ~HudDebugWinHealth()
Определения HudDebugWinHealth.c:51
void InitEntityEntries()
Определения HudDebugWinHealth.c:249
ScrollWidget m_WgtPanelScroll
Определения HudDebugWinHealth.c:18
bool m_IsModeSelf
Определения HudDebugWinHealth.c:16
ButtonWidget m_ButtonSelf
Определения HudDebugWinHealth.c:20
void CleanupEntries()
Определения HudDebugWinHealth.c:350
ref array< ref HudDebugWinHealthEntry > m_Entries
Определения HudDebugWinHealth.c:27
ButtonWidget m_ButtonTarget
Определения HudDebugWinHealth.c:21
EntityAI m_TargetEntity
Определения HudDebugWinHealth.c:24
Icon x
Icon y
PluginConfigDebugProfile m_ConfigDebugProfile
Определения PluginItemDiagnostic.c:58
bool m_IsDragging
Определения PluginItemDiagnostic.c:57
vector m_DraggingOffset
Определения PluginItemDiagnostic.c:72
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:326
bool OnMouseButtonUp(Widget w, int x, int y, int button)
Определения HudDebugWinCharStats.c:285
void SetDragging(bool enable)
Определения HudDebugWinBase.c:100
void Show()
Определения HudDebugWinBase.c:52
void SetRPCSent()
Определения HudDebugWinBase.c:43
bool OnClick(Widget w, int x, int y, int button)
Определения HudDebugWinCharStats.c:201
void Hide()
Определения HudDebugWinBase.c:61
void OnDraggingEnd()
void SetUpdate(bool state)
int GetType()
Определения HudDebugWinBase.c:22
bool OnMouseButtonDown(Widget w, int x, int y, int button)
Определения HudDebugWinCharStats.c:274
Определения HudDebugWinBase.c:2
Widget m_SpacerLine
Определения HudDebugWinHealth.c:10
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)
static const vector Zero
Определения EnConvert.c:123
Определения EnConvert.c:119
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
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
static proto float Round(float f)
Returns mathematical round of value.
proto void GetMousePos(out int x, out int y)
proto native volatile void Update()
Определения PlayerSoundManager.c:125