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