DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
UndergroundTriggerEditorMenu.c
См. документацию.
1#ifdef DIAG_DEVELOPER
2class UndergroundTriggerEditorMenu : UIScriptedMenu
3{
4 private static const int POPUP_ID_NONE = -1;
5 private static const int POPUP_ID_DIALOG_RELOAD = 0;
6 private static const int POPUP_ID_DIALOG_RENAME = 1;
7
8 private static const int POPUP_ID_DIALOG_DISCARD_BREADCRUMB = 2;
9 private static const int POPUP_ID_DIALOG_RENAME_BREADCRUMB = 3;
10
11 private int m_ActivePopup;
13
14 private Widget m_ScenePanel;
15 private WrapSpacerWidget m_TriggersListWidget;
16 private ScrollWidget m_TriggersListScrollWidget;
17 private ButtonWidget m_TriggerRenameButton;
18 private ButtonWidget m_TriggerExportButton;
19 private ButtonWidget m_TriggerDeleteButton;
20 private ButtonWidget m_TriggerReloadButton;
21 private ButtonWidget m_TriggerEditBreadcrumbsButton;
22
23 private Widget m_TriggersSection;
24 private Widget m_BreadcrumbEditPanel;
25 private TextWidget m_BreadcrumbEditHeader;
26 private WrapSpacerWidget m_BreadcrumbsListWidget;
27 private ScrollWidget m_BreadcrumbsListScrollWidget;
28 private ButtonWidget m_BreadcrumbRenameButton;
29 private ButtonWidget m_BreadcrumbDeleteButton;
30 private ButtonWidget m_BreadcrumbSaveButton;
31 private ButtonWidget m_BreadcrumbBackButton;
32 private ButtonWidget m_BreadcrumbApplyButton;
33
34 private Widget m_BreadcrumbParamsSection;
35 private ButtonWidget m_BreadcrumbParamsHeader;
36 private Widget m_BreadcrumbParamsContent;
37 private EditBoxWidget m_BreadcrumbParamsEyeAcc;
38 private CheckBoxWidget m_BreadcrumbParamsUseRaycast;
39 private EditBoxWidget m_BreadcrumbParamsRadius;
40 private CheckBoxWidget m_BreadcrumbParamsLightLerp;
41
42
43 private PluginUndergroundTriggerManager m_UndergroundTriggerManager;
44
45 private ref map<Widget, ref UndergroundTriggerEditorCustomListElement> m_TriggersListElements;
46 private ref map<Widget, UndergroundTriggerHandle> m_TriggersList;
47 private ref map<Widget, UndergroundBreadcrumbHandle> m_BreadcrumbsList;
48 private ref map<Widget, ref UndergroundTriggerEditorCustomListElement> m_BreadcrumbsListElements;
49
50 private bool m_IsInputActive;
51
52 // --------------------------------------------------------------------------------
53
54 void UndergroundTriggerEditorMenu()
55 {
57 m_TriggersList = new map<Widget, UndergroundTriggerHandle>();
58 m_BreadcrumbsList = new map<Widget, UndergroundBreadcrumbHandle>();
59 m_BreadcrumbsListElements = new map<Widget, ref UndergroundTriggerEditorCustomListElement>();
60
61 m_UndergroundTriggerManager = PluginUndergroundTriggerManager.Cast(GetPlugin(PluginUndergroundTriggerManager));
62 m_UndergroundTriggerManager.OnUIEditorOpened();
63
64 m_ActivePopup = POPUP_ID_NONE;
66 m_Popups.Insert(POPUP_ID_DIALOG_RELOAD, new UndergroundTriggerEditorReloadDialog(layoutRoot));
67 m_Popups.Insert(POPUP_ID_DIALOG_RENAME, new UndergroundTriggerEditorRenameDialog(layoutRoot));
68 m_Popups.Insert(POPUP_ID_DIALOG_DISCARD_BREADCRUMB, new UndergroundTriggerEditorDiscardBreadcrumbsDialog(layoutRoot));
69 m_Popups.Insert(POPUP_ID_DIALOG_RENAME_BREADCRUMB, new UndergroundTriggerEditorRenameBreadcrumbDialog(layoutRoot));
70
71 m_UndergroundTriggerManager.Event_OnUpdateData().Insert(OnUpdateData);
72 m_UndergroundTriggerManager.Event_OnSelectTrigger().Insert(OnSelectTrigger);
73 m_UndergroundTriggerManager.Event_OnDeleteTrigger().Insert(OnDeleteTrigger);
74 m_UndergroundTriggerManager.Event_OnSelectBreadcrumb().Insert(OnSelectBreadcrumb);
75 m_UndergroundTriggerManager.Event_OnDeleteBreadcrumb().Insert(OnDeleteBreadcrumb);
76 m_UndergroundTriggerManager.Event_OnBreadcrumbEditModeChanged().Insert(OnBreadcrumbEditModeChanged);
77 }
78
79 // --------------------------------------------------------------------------------
80
81 void ~UndergroundTriggerEditorMenu()
82 {
83 RemovePopup();
84
85 if (IsModuleExist(PluginUndergroundTriggerManager))
86 {
87 m_UndergroundTriggerManager.ExitBreadcrumbEditMode(false);
88
89 m_UndergroundTriggerManager.SelectTrigger(null);
90
91 m_UndergroundTriggerManager.Event_OnUpdateData().Remove(OnUpdateData);
92 m_UndergroundTriggerManager.Event_OnSelectTrigger().Remove(OnSelectTrigger);
93 m_UndergroundTriggerManager.Event_OnDeleteTrigger().Remove(OnDeleteTrigger);
94 m_UndergroundTriggerManager.Event_OnSelectBreadcrumb().Remove(OnSelectBreadcrumb);
95 m_UndergroundTriggerManager.Event_OnDeleteBreadcrumb().Remove(OnDeleteBreadcrumb);
96 m_UndergroundTriggerManager.Event_OnBreadcrumbEditModeChanged().Remove(OnBreadcrumbEditModeChanged);
97 m_UndergroundTriggerManager.OnUIEditorClosed();
98
99 m_UndergroundTriggerManager = null;
100 }
101 }
102
103 // --------------------------------------------------------------------------------
104
105 override bool UseMouse()
106 {
107 return true;
108 }
109
110 // --------------------------------------------------------------------------------
111
112 override bool UseKeyboard()
113 {
114 return true;
115 }
116
117 // --------------------------------------------------------------------------------
118
119 override Widget Init()
120 {
121 layoutRoot = g_Game.GetWorkspace().CreateWidgets("gui/layouts/underground_trigger_editor/day_z_underground_trigger_editor.layout");
122
123 m_TriggersListWidget = WrapSpacerWidget.Cast(layoutRoot.FindAnyWidget("triggers_list"));
124 m_TriggersListScrollWidget = ScrollWidget.Cast(layoutRoot.FindAnyWidget("triggers_list_scroll"));
125 m_ScenePanel = Widget.Cast(layoutRoot.FindAnyWidget("panel_scene"));
126
127 m_TriggerRenameButton = ButtonWidget.Cast(layoutRoot.FindAnyWidget("trigger_controls_rename"));
128 m_TriggerExportButton = ButtonWidget.Cast(layoutRoot.FindAnyWidget("trigger_controls_export"));
129 m_TriggerDeleteButton = ButtonWidget.Cast(layoutRoot.FindAnyWidget("trigger_controls_delete"));
130 m_TriggerReloadButton = ButtonWidget.Cast(layoutRoot.FindAnyWidget("trigger_controls_reload"));
131 m_TriggerEditBreadcrumbsButton = ButtonWidget.Cast(layoutRoot.FindAnyWidget("trigger_controls_edit_breadcrumbs"));
132
133 m_TriggersSection = Widget.Cast(layoutRoot.FindAnyWidget("triggers_section"));
134 m_BreadcrumbEditPanel = Widget.Cast(layoutRoot.FindAnyWidget("breadcrumb_edit_panel"));
135 m_BreadcrumbEditHeader = TextWidget.Cast(layoutRoot.FindAnyWidget("breadcrumb_edit_header"));
136 m_BreadcrumbsListWidget = WrapSpacerWidget.Cast(layoutRoot.FindAnyWidget("breadcrumbs_list"));
137 m_BreadcrumbsListScrollWidget = ScrollWidget.Cast(layoutRoot.FindAnyWidget("breadcrumbs_list_scroll"));
138 m_BreadcrumbRenameButton = ButtonWidget.Cast(layoutRoot.FindAnyWidget("breadcrumb_controls_rename"));
139 m_BreadcrumbDeleteButton = ButtonWidget.Cast(layoutRoot.FindAnyWidget("breadcrumb_controls_delete"));
140 m_BreadcrumbSaveButton = ButtonWidget.Cast(layoutRoot.FindAnyWidget("breadcrumb_controls_save"));
141 m_BreadcrumbBackButton = ButtonWidget.Cast(layoutRoot.FindAnyWidget("breadcrumb_controls_back"));
142
143 m_BreadcrumbParamsSection = Widget.Cast(layoutRoot.FindAnyWidget("breadcrumb_params_section"));
144 m_BreadcrumbParamsHeader = ButtonWidget.Cast(layoutRoot.FindAnyWidget("breadcrumb_params_header"));
145 m_BreadcrumbParamsContent = Widget.Cast(layoutRoot.FindAnyWidget("breadcrumb_params_content"));
146 m_BreadcrumbParamsEyeAcc = EditBoxWidget.Cast(layoutRoot.FindAnyWidget("breadcrumb_params_eye_acc"));
147 m_BreadcrumbParamsUseRaycast = CheckBoxWidget.Cast(layoutRoot.FindAnyWidget("breadcrumb_params_use_raycast"));
148 m_BreadcrumbParamsRadius = EditBoxWidget.Cast(layoutRoot.FindAnyWidget("breadcrumb_params_radius"));
149 m_BreadcrumbParamsLightLerp = CheckBoxWidget.Cast(layoutRoot.FindAnyWidget("breadcrumb_params_light_lerp"));
150 m_BreadcrumbApplyButton = ButtonWidget.Cast(layoutRoot.FindAnyWidget("breadcrumb_params_controls_apply"));
151
152 UpdateTriggersList();
153
154 GizmoApi gizmoApi = GetGizmoApi();
155 GizmoTransformMode currentTransform = gizmoApi.GetTransformMode();
156 if (currentTransform == GizmoTransformMode.NONE)
158
159 return layoutRoot;
160 }
161
162 // --------------------------------------------------------------------------------
163
164 override bool OnDoubleClick( Widget w, int x, int y, int button )
165 {
166 super.OnDoubleClick(w, x, y, button);
167
168 if (m_UndergroundTriggerManager.IsBreadcrumbEditMode())
169 return false;
170
171 UndergroundTriggerHandle handle = m_TriggersList.Get(w);
172 if (handle)
173 {
174 m_UndergroundTriggerManager.SelectTrigger(handle);
175 m_UndergroundTriggerManager.FocusOnObject();
176 return true;
177 }
178
179 return false;
180 }
181
182 // --------------------------------------------------------------------------------
183
184 override bool OnClick(Widget w, int x, int y, int button)
185 {
186 super.OnClick(w, x, y, button);
187
188 if (m_ActivePopup > POPUP_ID_NONE)
189 {
190 if (m_Popups.Get(m_ActivePopup).OnClick(w, x, y, button))
191 return true;
192 }
193
194 // --- Breadcrumb edit mode controls ---
195
196 if (w == m_BreadcrumbSaveButton)
197 {
198 m_UndergroundTriggerManager.SaveBreadcrumbs();
199 return true;
200 }
201
202 if (w == m_BreadcrumbBackButton)
203 {
204 if (m_UndergroundTriggerManager.IsBreadcrumbsDirty())
205 {
206 m_ActivePopup = POPUP_ID_DIALOG_DISCARD_BREADCRUMB;
207 UndergroundTriggerEditorDiscardBreadcrumbsDialog discardDialog = UndergroundTriggerEditorDiscardBreadcrumbsDialog.Cast(m_Popups.Get(m_ActivePopup));
208 discardDialog.SetMessage("Discard unsaved breadcrumb changes?");
209 discardDialog.Open();
210 }
211 else
212 {
213 m_UndergroundTriggerManager.ExitBreadcrumbEditMode(false);
214 }
215 return true;
216 }
217
218 if (w == m_BreadcrumbApplyButton)
219 {
220 ApplyBreadcrumbParams();
221 return true;
222 }
223
224 if (w == m_BreadcrumbParamsHeader)
225 {
226 ShowBreadcrumbParamsSection(!m_BreadcrumbParamsContent.IsVisible());
227 return true;
228 }
229
230 if (w == m_BreadcrumbDeleteButton)
231 {
232 UndergroundBreadcrumbHandle breadcrumbHandle = m_UndergroundTriggerManager.GetSelectedBreadcrumb();
233 if (breadcrumbHandle)
234 m_UndergroundTriggerManager.DeleteBreadcrumb(breadcrumbHandle);
235 return true;
236 }
237
238 if (w == m_BreadcrumbRenameButton)
239 {
240 UndergroundBreadcrumbHandle selectedBreadcrumb = m_UndergroundTriggerManager.GetSelectedBreadcrumb();
241 if (selectedBreadcrumb)
242 {
243 m_ActivePopup = POPUP_ID_DIALOG_RENAME_BREADCRUMB;
244 UndergroundTriggerEditorRenameBreadcrumbDialog renameDialogBreadcrumb = UndergroundTriggerEditorRenameBreadcrumbDialog.Cast(m_Popups.Get(m_ActivePopup));
245 renameDialogBreadcrumb.SetMessage("Rename breadcrumb");
246 renameDialogBreadcrumb.SetName(selectedBreadcrumb.GetHandleName());
247 renameDialogBreadcrumb.Open();
248 }
249 return true;
250 }
251
252 UndergroundBreadcrumbHandle breadcrumbListHandle = m_BreadcrumbsList.Get(w);
253 if (breadcrumbListHandle)
254 {
255 m_UndergroundTriggerManager.SelectBreadcrumb(breadcrumbListHandle);
256 return true;
257 }
258
259 // Block trigger interaction while in breadcrumb edit mode
260 if (m_UndergroundTriggerManager.IsBreadcrumbEditMode())
261 return false;
262
263 // --- Normal trigger controls ---
264
265 UndergroundTriggerHandle triggerHandle = m_TriggersList.Get(w);
266 if (w == m_TriggerDeleteButton)
267 {
268 triggerHandle = m_UndergroundTriggerManager.GetSelectedTrigger();
269 if (triggerHandle)
270 m_UndergroundTriggerManager.DeleteTrigger(triggerHandle);
271
272 return true;
273 }
274
275 if (triggerHandle)
276 {
277 m_UndergroundTriggerManager.SelectTrigger(triggerHandle);
278 return true;
279 }
280
281 if (w == m_TriggerEditBreadcrumbsButton)
282 {
283 m_UndergroundTriggerManager.EnterBreadcrumbEditMode();
284 return true;
285 }
286
287 if (w == m_TriggerExportButton)
288 {
289 m_UndergroundTriggerManager.ExportData();
290 return true;
291 }
292
293 if (w == m_TriggerReloadButton)
294 {
295 m_ActivePopup = POPUP_ID_DIALOG_RELOAD;
296 UndergroundTriggerEditorReloadDialog reloadDialog = UndergroundTriggerEditorReloadDialog.Cast(m_Popups.Get(m_ActivePopup));
297 reloadDialog.SetMessage("Unexported changes will be lost after reload from file.");
298 reloadDialog.Open();
299 return true;
300 }
301
302 if (w == m_TriggerRenameButton)
303 {
304 triggerHandle = m_UndergroundTriggerManager.GetSelectedTrigger();
305 if (triggerHandle)
306 {
307 m_ActivePopup = POPUP_ID_DIALOG_RENAME;
308 UndergroundTriggerEditorRenameDialog renameDialog = UndergroundTriggerEditorRenameDialog.Cast(m_Popups.Get(m_ActivePopup));
309 renameDialog.SetMessage("Rename trigger");
310 renameDialog.SetName(triggerHandle.GetHandleName());
311 renameDialog.Open();
312 return true;
313 }
314 return true;
315 }
316
317 if (w != m_ScenePanel)
318 {
319 if (m_UndergroundTriggerManager.IsBreadcrumbEditMode())
320 {
321 if (m_UndergroundTriggerManager.GetSelectedBreadcrumb())
322 m_UndergroundTriggerManager.SelectBreadcrumb(null);
323 }
324 else
325 {
326 if (m_UndergroundTriggerManager.GetSelectedTrigger())
327 m_UndergroundTriggerManager.SelectTrigger(null);
328 }
329 }
330
331 return false;
332 }
333
334 // --------------------------------------------------------------------------------
335
336 override bool OnKeyPress(Widget w, int x, int y, int key)
337 {
338 if (key == KeyCode.KC_F)
339 {
340 UndergroundTriggerHandle handle = m_UndergroundTriggerManager.GetSelectedTrigger();
341 if (handle)
342 {
343 m_UndergroundTriggerManager.FocusOnObject();
344 return true;
345 }
346 }
347
348 return false;
349 }
350
351 // --------------------------------------------------------------------------------
352
353 override void OnShow()
354 {
355 if (!m_IsInputActive)
356 {
357 g_Game.GetMission().AddActiveInputExcludes({"menu"});
358 g_Game.GetInput().ChangeGameFocus(1);
359 m_IsInputActive = true;
360 }
361 g_Game.GetUIManager().ShowUICursor(true);
362 }
363
364 // --------------------------------------------------------------------------------
365
366 override void OnHide()
367 {
368 if (m_IsInputActive)
369 {
370 if (g_Game.GetMission())
371 g_Game.GetMission().RemoveActiveInputExcludes({"menu"}, true);
372
373 g_Game.GetInput().ResetGameFocus(-1);
374 m_IsInputActive = false;
375 }
376 g_Game.GetUIManager().ShowUICursor(false);
377 }
378
379 // --------------------------------------------------------------------------------
380
381 private void OnUpdateData()
382 {
383 UpdateTriggersList();
384 UpdateTriggersDirtyIndicator();
385 if (m_UndergroundTriggerManager.IsBreadcrumbEditMode())
386 {
387 UpdateBreadcrumbsList();
388 UpdateBreadcrumbDirtyIndicator();
389 }
390 }
391
392 // --------------------------------------------------------------------------------
393
394 private void OnSelectTrigger(UndergroundTriggerHandle handle)
395 {
396 UpdateTriggersList();
397
398 foreach (Widget buttonWidget, UndergroundTriggerEditorCustomListElement element: m_TriggersListElements)
399 element.Deselect();
400
401 if (handle)
402 {
403 Widget key = Widget.Cast(m_TriggersList.GetKeyByValue(handle));
404
405 array<UndergroundTriggerHandle> existingTriggerHandles = m_TriggersList.GetValueArray();
406 int matchingHandleId = existingTriggerHandles.Find(handle);
407 if (matchingHandleId > INDEX_NOT_FOUND)
408 {
409 m_TriggersListElements[key].Select();
410 UpdateBreadcrumbsList();
411 }
412
413 // TODO@RR - does not work - needs to be rewritten to positional jump
414 m_TriggersListScrollWidget.VScrollToWidget(key);
415 }
416
417 m_TriggersListScrollWidget.Update();
418
419 UpdateEditBreadcrumbsButtonState();
420 }
421
422 // --------------------------------------------------------------------------------
423
424 private void OnDeleteTrigger(UndergroundTriggerHandle handle)
425 {
426 Widget key = Widget.Cast(m_TriggersList.GetKeyByValue(handle));
427 if (key)
428 {
429 auto element = UndergroundTriggerEditorCustomListElement.Cast(m_TriggersListElements[key]);
430 m_TriggersListWidget.RemoveChild(element.GetRoot());
431 m_TriggersListElements.Remove(key);
432 m_TriggersList.Remove(key);
433
434 m_TriggersListWidget.Update();
435 m_TriggersListScrollWidget.Update();
436 }
437
438 UpdateEditBreadcrumbsButtonState();
439 }
440
441 // --------------------------------------------------------------------------------
442
443 private void UpdateTriggersList()
444 {
445 array<UndergroundTriggerHandle> existingTriggerHandles = m_TriggersList.GetValueArray();
446 array<UndergroundTriggerHandle> triggerHandles = m_UndergroundTriggerManager.GetTriggersList();
447
448 foreach (auto triggerHandle : triggerHandles)
449 {
450 if (existingTriggerHandles.Find(triggerHandle) > INDEX_NOT_FOUND)
451 continue;
452
453 UndergroundTriggerEditorCustomListElement element = new UndergroundTriggerEditorCustomListElement(m_TriggersListWidget, triggerHandle.GetHandleName());
454 ButtonWidget buttonWidget = element.GetButton();
455 m_TriggersListWidget.AddChild(element.GetRoot());
456 m_TriggersListElements.Insert(buttonWidget, element);
457 m_TriggersList.Insert(buttonWidget, triggerHandle);
458 }
459
460 m_TriggersListWidget.Update();
461 m_TriggersListScrollWidget.Update();
462 }
463
464 // --------------------------------------------------------------------------------
465
466 private void OnSelectBreadcrumb(UndergroundBreadcrumbHandle handle)
467 {
468 Widget key = Widget.Cast(m_BreadcrumbsList.GetKeyByValue(handle));
469
470 foreach (Widget buttonWidget, UndergroundTriggerEditorCustomListElement element: m_BreadcrumbsListElements)
471 element.Deselect();
472
473 if (key)
474 {
475 m_BreadcrumbsListElements[key].Select();
476 m_BreadcrumbsListScrollWidget.VScrollToWidget(key);
477 m_BreadcrumbsListScrollWidget.Update();
478 }
479
480 if (handle)
481 {
482 ShowBreadcrumbParamsSection(true);
483 }
484 else
485 ShowBreadcrumbParamsSection(false);
486
487 SyncBreadcrumbParamsUI();
488 }
489
490 // --------------------------------------------------------------------------------
491
492 private void OnDeleteBreadcrumb(UndergroundBreadcrumbHandle handle)
493 {
494 Widget key = Widget.Cast(m_BreadcrumbsList.GetKeyByValue(handle));
495 if (key)
496 {
497 auto element = UndergroundTriggerEditorCustomListElement.Cast(m_BreadcrumbsListElements[key]);
498 m_BreadcrumbsListWidget.RemoveChild(element.GetRoot());
499 m_BreadcrumbsListElements.Remove(key);
500 m_BreadcrumbsList.Remove(key);
501
502 ShowBreadcrumbParamsSection(false);
503
504 m_BreadcrumbsListWidget.Update();
505 m_BreadcrumbsListScrollWidget.Update();
506 }
507 }
508
509 // --------------------------------------------------------------------------------
510
511 private void UpdateBreadcrumbsList()
512 {
513 // Clear existing list UI
514 Widget child = m_BreadcrumbsListWidget.GetChildren();
515 while (child)
516 {
517 Widget next = child.GetSibling();
518 m_BreadcrumbsListWidget.RemoveChild(child);
519 child = next;
520 }
521 m_BreadcrumbsListElements.Clear();
522 m_BreadcrumbsList.Clear();
523
524 // Populate from manager's current breadcrumb handles
525 array<UndergroundBreadcrumbHandle> breadcrumbHandles = m_UndergroundTriggerManager.GetBreadcrumbsList();
526 foreach (UndergroundBreadcrumbHandle breadcrumbHandle : breadcrumbHandles)
527 {
528 UndergroundTriggerEditorCustomListElement element = new UndergroundTriggerEditorCustomListElement(m_BreadcrumbsListWidget, breadcrumbHandle.GetHandleName());
529 ButtonWidget buttonWidget = element.GetButton();
530 m_BreadcrumbsListWidget.AddChild(element.GetRoot());
531 m_BreadcrumbsListElements.Insert(buttonWidget, element);
532 m_BreadcrumbsList.Insert(buttonWidget, breadcrumbHandle);
533 }
534
535 // Reapply selection state for the currently selected breadcrumb
536 UndergroundBreadcrumbHandle selectedBreadcrumb = m_UndergroundTriggerManager.GetSelectedBreadcrumb();
537 if (selectedBreadcrumb)
538 {
539 Widget selectedKey = Widget.Cast(m_BreadcrumbsList.GetKeyByValue(selectedBreadcrumb));
540 if (selectedKey)
541 m_BreadcrumbsListElements[selectedKey].Select();
542 }
543
544 m_BreadcrumbsListWidget.Update();
545 m_BreadcrumbsListScrollWidget.Update();
546 }
547
548 // --------------------------------------------------------------------------------
549
550 private void OnBreadcrumbEditModeChanged(bool active)
551 {
552 m_TriggersSection.Show(!active);
553 m_BreadcrumbEditPanel.Show(active);
554
555 if (active)
556 {
557 UpdateBreadcrumbsList();
558 UpdateBreadcrumbDirtyIndicator();
559 }
560 else
561 {
562 // Clear breadcrumb list UI on exit
563 Widget child = m_BreadcrumbsListWidget.GetChildren();
564 while (child)
565 {
566 m_BreadcrumbsListWidget.RemoveChild(child);
567 child = child.GetSibling();
568 }
569 m_BreadcrumbsListElements.Clear();
570 m_BreadcrumbsList.Clear();
571 }
572
573 m_BreadcrumbsListWidget.Update();
574 m_BreadcrumbsListScrollWidget.Update();
575 }
576
577 // --------------------------------------------------------------------------------
578
579 private void UpdateTriggersDirtyIndicator()
580 {
581 if (m_UndergroundTriggerManager.IsTriggersDirty())
582 m_TriggerExportButton.SetText("Export *");
583 else
584 m_TriggerExportButton.SetText("Export");
585 }
586
587 // --------------------------------------------------------------------------------
588
589 private void UpdateBreadcrumbDirtyIndicator()
590 {
591 bool dirty = m_UndergroundTriggerManager.IsBreadcrumbsDirty();
592
593 if (dirty)
594 {
595 m_BreadcrumbEditHeader.SetText("Breadcrumbs *");
596 m_BreadcrumbEditHeader.SetColor(ARGB(255, 255, 0, 0));
597 m_BreadcrumbSaveButton.SetText("Save *");
598 }
599 else
600 {
601 m_BreadcrumbEditHeader.SetText("Breadcrumbs");
602 m_BreadcrumbEditHeader.SetColor(ARGB(255, 255, 255, 0));
603 m_BreadcrumbSaveButton.SetText("Save");
604 }
605 }
606
607 // --------------------------------------------------------------------------------
608
609 private void ShowBreadcrumbParamsSection(bool show)
610 {
611 m_BreadcrumbParamsContent.Show(show);
612 if (show)
613 m_BreadcrumbParamsHeader.SetText("Parameters ^");
614 else
615 m_BreadcrumbParamsHeader.SetText("Parameters v");
616 }
617
618 private void SyncBreadcrumbParamsUI()
619 {
620 UndergroundBreadcrumbHandle handle = m_UndergroundTriggerManager.GetSelectedBreadcrumb();
621 if (!handle || !handle.m_Data)
622 return;
623
624 m_BreadcrumbParamsEyeAcc.SetText(handle.m_Data.EyeAccommodation.ToString());
625 m_BreadcrumbParamsUseRaycast.SetChecked(handle.m_Data.UseRaycast);
626 m_BreadcrumbParamsRadius.SetText(handle.m_Data.Radius.ToString());
627 m_BreadcrumbParamsLightLerp.SetChecked(handle.m_Data.LightLerp);
628 }
629
630 private void ApplyBreadcrumbParams()
631 {
632 UndergroundBreadcrumbHandle handle = m_UndergroundTriggerManager.GetSelectedBreadcrumb();
633 if (!handle || !handle.m_Data)
634 return;
635
636 string eyeAccText = m_BreadcrumbParamsEyeAcc.GetText();
637 if (eyeAccText.Length() > 0)
638 {
639 handle.m_Data.EyeAccommodation = Math.Clamp(eyeAccText.ToFloat(), 0.0, 1.0);
640 m_BreadcrumbParamsEyeAcc.Update();
641 }
642
643 handle.m_Data.UseRaycast = m_BreadcrumbParamsUseRaycast.IsChecked();
644
645 string radiusText = m_BreadcrumbParamsRadius.GetText();
646 if (radiusText.Length() > 0)
647 {
648 handle.m_Data.Radius = Math.Clamp(radiusText.ToFloat(), -1.0, 100.0);
649 m_BreadcrumbParamsRadius.Update();
650 }
651
652 handle.m_Data.LightLerp = m_BreadcrumbParamsLightLerp.IsChecked();
653
654 SyncBreadcrumbParamsUI();
655
656 m_UndergroundTriggerManager.MarkBreadcrumbsDirty();
657 }
658
659 void DiscardBreadcrumbs()
660 {
661 m_UndergroundTriggerManager.ExitBreadcrumbEditMode(false);
662 }
663
664 // --------------------------------------------------------------------------------
665
666 private void UpdateEditBreadcrumbsButtonState()
667 {
668 bool hasSelection = (m_UndergroundTriggerManager.GetSelectedTrigger() != null);
669 m_TriggerEditBreadcrumbsButton.Enable(hasSelection);
670 }
671
672 // --------------------------------------------------------------------------------
673
674 void OnPopupClose()
675 {
676 RemovePopup();
677 }
678
679 // --------------------------------------------------------------------------------
680
681 void RemovePopup()
682 {
683 if (m_ActivePopup > POPUP_ID_NONE)
684 {
685 m_Popups.Get(m_ActivePopup).Close();
686 m_ActivePopup = POPUP_ID_NONE;
687 }
688 }
689
690 // --------------------------------------------------------------------------------
691
692 void ReloadDataFromFile()
693 {
694 m_UndergroundTriggerManager.DeleteAllTrigers();
695 m_UndergroundTriggerManager.DeleteAllBreadcrumbs();
696
697 Widget child = m_TriggersListWidget.GetChildren();
698 while (child)
699 {
700 m_TriggersListWidget.RemoveChild(child);
701 child = child.GetSibling();
702 }
703
704 m_TriggersListElements.Clear();
705 m_TriggersList.Clear();
706
707 m_BreadcrumbsList.Clear();
708 m_BreadcrumbsListElements.Clear();
709
710 m_UndergroundTriggerManager.LoadDataFromFile();
711 UpdateTriggersList();
712 UpdateBreadcrumbsList();
713 }
714
715 void RenameTrigger(string name)
716 {
717 UndergroundTriggerHandle handle = m_UndergroundTriggerManager.GetSelectedTrigger();
718 handle.SetHandleName(name);
719 m_UndergroundTriggerManager.MarkTriggersDirty();
720 OnDeleteTrigger(handle);
721 UpdateTriggersList();
722 UpdateBreadcrumbsList();
723 }
724
725 void RenameBreadcrumb(string name)
726 {
727 UndergroundBreadcrumbHandle handle = m_UndergroundTriggerManager.GetSelectedBreadcrumb();
728 if (!handle)
729 return;
730
731 handle.SetHandleName(name);
732 m_UndergroundTriggerManager.MarkBreadcrumbsDirty();
733 UpdateBreadcrumbsList();
734 }
735
736 // --------------------------------------------------------------------------------
737}
738
739
740class UndergroundTriggerEditorCustomListElement : ScriptedWidgetEventHandler
741{
742 private bool m_IsSelected;
743
744 protected Widget m_Root;
745
746 protected ButtonWidget m_ContextButton;
747 protected TextWidget m_ButtonText;
748
749 void UndergroundTriggerEditorCustomListElement(Widget parent, string name)
750 {
751 m_Root = g_Game.GetWorkspace().CreateWidgets("gui/layouts/underground_trigger_editor/day_z_underground_trigger_editor_list_item.layout", parent);
752 m_ContextButton = ButtonWidget.Cast(m_Root.FindAnyWidget("button"));
753 m_ButtonText = TextWidget.Cast(m_Root.FindAnyWidget("text"));
754 m_ButtonText.SetText(name);
755
756 m_Root.SetHandler(this);
757 }
758
760 {
761 return m_Root;
762 }
763
764 ButtonWidget GetButton()
765 {
766 return m_ContextButton;
767 }
768
769 void Select()
770 {
771 m_ButtonText.SetColor(ARGB(255, 255, 0, 0));
772 m_IsSelected = true;
773 }
774
775 void Deselect()
776 {
777 m_ButtonText.SetColor(ARGB(255, 255, 255, 255));
778 m_IsSelected = false;
779 }
780}
781
782class UndergroundTriggerEditorPopupBase : ScriptedWidgetEventHandler
783{
784 protected Widget m_Root;
785
786 protected ref UndergroundTriggerEditorMenu m_Menu;
787
788 void UndergroundTriggerEditorPopupBase()
789 {
790 }
791
792 void Open()
793 {
794 m_Menu = UndergroundTriggerEditorMenu.Cast(g_Game.GetUIManager().GetMenu());
795 m_Root.Show(true);
796 }
797
798 void Close()
799 {
800 m_Root.Show(false);
801 }
802
803 protected void OnPopupClose()
804 {
805 UndergroundTriggerEditorMenu menu = UndergroundTriggerEditorMenu.Cast(g_Game.GetUIManager().GetMenu());
806 menu.OnPopupClose();
807 }
808}
809
810class UndergroundTriggerEditorDialog : UndergroundTriggerEditorPopupBase
811{
812 protected ButtonWidget m_OKButton;
813 protected ButtonWidget m_CancelButton;
814 protected RichTextWidget m_Message;
815
816 void UndergroundTriggerEditorDialog(Widget parent)
817 {
818 m_Root = g_Game.GetWorkspace().CreateWidgets("gui/layouts/underground_trigger_editor/day_z_underground_trigger_editor_popup_dialog.layout", parent);
819 m_Root.Show(false);
820
821 m_OKButton = ButtonWidget.Cast(m_Root.FindAnyWidget("button_ok"));
822 m_CancelButton = ButtonWidget.Cast(m_Root.FindAnyWidget("button_cancel"));
823 m_Message = RichTextWidget.Cast(m_Root.FindAnyWidget("message"));
824
825 m_Root.SetHandler(this);
826 }
827
828 void SetMessage(string message)
829 {
830 m_Message.SetText(message);
831 }
832}
833
834class UndergroundTriggerEditorReloadDialog : UndergroundTriggerEditorDialog
835{
836 override bool OnClick(Widget w, int x, int y, int button)
837 {
838 if (w == m_OKButton)
839 {
840 Close();
841 m_Menu.ReloadDataFromFile();
842 OnPopupClose();
843 return true;
844 }
845 else if (w == m_CancelButton)
846 {
847 Close();
848 OnPopupClose();
849 return true;
850 }
851
852 return super.OnClick(w, x, y, button);
853 }
854}
855
856class UndergroundTriggerEditorDiscardBreadcrumbsDialog : UndergroundTriggerEditorDialog
857{
858 override bool OnClick(Widget w, int x, int y, int button)
859 {
860 if (w == m_OKButton)
861 {
862 Close();
863 m_Menu.DiscardBreadcrumbs();
864 OnPopupClose();
865 return true;
866 }
867 else if (w == m_CancelButton)
868 {
869 Close();
870 OnPopupClose();
871 return true;
872 }
873
874 return super.OnClick(w, x, y, button);
875 }
876}
877
878class UndergroundTriggerEditorRenameDialog : UndergroundTriggerEditorDialog
879{
880 private EditBoxWidget m_Name;
881
882 void UndergroundTriggerEditorRenameDialog(Widget parent)
883 {
884 m_Root = g_Game.GetWorkspace().CreateWidgets("gui/layouts/underground_trigger_editor/day_z_underground_trigger_editor_popup_dialog_input.layout", parent);
885 m_Root.Show(false);
886
887 m_OKButton = ButtonWidget.Cast(m_Root.FindAnyWidget("button_ok"));
888 m_CancelButton = ButtonWidget.Cast(m_Root.FindAnyWidget("button_cancel"));
889 m_Message = RichTextWidget.Cast(m_Root.FindAnyWidget("message"));
890 m_Name = EditBoxWidget.Cast(m_Root.FindAnyWidget("name"));
891
892 m_Root.SetHandler(this);
893 }
894
895 void SetName(string name)
896 {
897 m_Name.SetText(name);
898 }
899
900 override bool OnClick(Widget w, int x, int y, int button)
901 {
902 if (w == m_OKButton)
903 {
904 Close();
905 m_Menu.RenameTrigger(m_Name.GetText());
906 OnPopupClose();
907 return true;
908 }
909 else if (w == m_CancelButton)
910 {
911 Close();
912 OnPopupClose();
913 return true;
914 }
915
916 return super.OnClick(w, x, y, button);
917 }
918}
919
920class UndergroundTriggerEditorRenameBreadcrumbDialog : UndergroundTriggerEditorDialog
921{
922 private EditBoxWidget m_Name;
923
924 void UndergroundTriggerEditorRenameBreadcrumbDialog(Widget parent)
925 {
926 m_Root = g_Game.GetWorkspace().CreateWidgets("gui/layouts/underground_trigger_editor/day_z_underground_trigger_editor_popup_dialog_input.layout", parent);
927 m_Root.Show(false);
928
929 m_OKButton = ButtonWidget.Cast(m_Root.FindAnyWidget("button_ok"));
930 m_CancelButton = ButtonWidget.Cast(m_Root.FindAnyWidget("button_cancel"));
931 m_Message = RichTextWidget.Cast(m_Root.FindAnyWidget("message"));
932 m_Name = EditBoxWidget.Cast(m_Root.FindAnyWidget("name"));
933
934 m_Root.SetHandler(this);
935 }
936
937 void SetName(string name)
938 {
939 m_Name.SetText(name);
940 }
941
942 override bool OnClick(Widget w, int x, int y, int button)
943 {
944 if (w == m_OKButton)
945 {
946 Close();
947 m_Menu.RenameBreadcrumb(m_Name.GetText());
948 OnPopupClose();
949 return true;
950 }
951 else if (w == m_CancelButton)
952 {
953 Close();
954 OnPopupClose();
955 return true;
956 }
957
958 return super.OnClick(w, x, y, button);
959 }
960}
961#endif
string m_Name
Определения 3_Game/DayZ/InventoryItemType.c:34
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
map
Определения ControlsXboxNew.c:4
DayZGame g_Game
Определения DayZGame.c:4074
override bool OnClick(Widget w, int x, int y, int button)
buttons clicks
Определения DayZGame.c:160
proto GizmoApi GetGizmoApi()
GizmoTransformMode
Определения GizmoApi.c:2
Icon x
Icon y
void Close()
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:326
bool IsModuleExist(typename plugin_type)
Определения PluginManager.c:362
ServerBrowserMenuNew m_Menu
Определения ServerBrowserTab.c:37
Widget m_Root
Определения SizeToChild.c:91
proto GizmoTransformMode GetTransformMode()
proto void SetTransformMode(GizmoTransformMode mode)
void Select()
Определения CTEvent.c:123
void Close()
Определения DropdownPrefab.c:94
Widget GetRoot()
Определения InventoryGrid.c:355
Deprecated.
Определения EnWidgets.c:657
override void OnShow()
Определения CameraToolsMenu.c:99
override bool UseMouse()
Определения GesturesMenu.c:274
override bool OnDoubleClick(Widget w, int x, int y, int button)
Определения SceneEditorMenu.c:487
override bool OnKeyPress(Widget w, int x, int y, int key)
Определения CameraToolsMenu.c:969
override void OnHide()
Определения CameraToolsMenu.c:109
override bool UseKeyboard()
Определения ChatInputMenu.c:24
override Widget Init()
Определения BookMenu.c:11
override bool OnClick(Widget w, int x, int y, int button)
Определения BookMenu.c:34
Определения DayZGame.c:64
void Update(float timeslice)
Определения KeybindingsContainer.c:250
const int INDEX_NOT_FOUND
Определения gameplay.c:13
KeyCode
Определения EnSystem.c:157
proto native int Length()
Returns length of string.
proto native float ToFloat()
Converts string to float.
proto native void Clear()
proto native void SetName(string name)
proto native void SetText(string text, bool immedUpdate=true)
WorkspaceWidget Widget
Defined in code.
int ARGB(int a, int r, int g, int b)
Определения proto.c:322