DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
IngameHudVisibility.c
См. документацию.
1// Corresponds to a widget within a HUD layout
13
14// Flag representing a visibility rule
15enum EHudContextFlags
16{
17 HUD_DISABLE = 1, // left/right hud disabled in options
18 HUD_HIDE = 2, // left/right hud hidden through hotkey
19 VEHICLE_DISABLE = 4, // vehicle hud disabled in options
20 DRIVER = 8, // is driver -> show veh hud
21 VEHICLE = 16, // in vehicle -> hide left stats
22 MENU_OPEN = 32, // another menu opened
23 NO_BADGE = 64, // no badges visible
24 QUICKBAR_DISABLE = 128, // quickbar hud disabled in options
25 QUICKBAR_HIDE = 256, // quickbar hud hidden through hotkey
26 QUICKBAR_GLOBAL = 512, // platform based visibility
27 INVENTORY_OPEN = 1024, // inventory is open -> HUD left/right should be always visible
28 UNCONSCIOUS = 2048 // player is unconscious
29}
30
31// Hud visibility manager for hud elements with more complex/overlapping visibility rules
32// This is meant for parents of widgets structures which are afected by multiple visibility rules, not small individual widgets
33class IngameHudVisibility : Managed
34{
35 // TODO visibility getters to replace the remaining API in IngameHud
36
37 protected EHudContextFlags m_CtxFlags;
38 protected ref map<EHudElement, Widget> m_ElementMap;
39 protected ref map< EHudContextFlags, ref array<EHudElement> > m_ElementLinkMap;
40
41 // !these dont work when const
42 EHudContextFlags QUICKBAR_HIDE_FLAGS = (EHudContextFlags.QUICKBAR_HIDE | EHudContextFlags.QUICKBAR_DISABLE | EHudContextFlags.QUICKBAR_GLOBAL);
43 static EHudContextFlags HUD_HIDE_FLAGS = (EHudContextFlags.HUD_DISABLE | EHudContextFlags.HUD_HIDE | EHudContextFlags.MENU_OPEN | EHudContextFlags.UNCONSCIOUS);
44
45 void Init(Widget panel)
46 {
47 m_ElementMap = new map<EHudElement, Widget>();
48 m_ElementLinkMap = new map< EHudContextFlags, ref array<EHudElement> >();
49
50 InitElementMap(panel);
51 LinkElementsToFlags();
52 }
53
54 protected void InitElementMap(Widget panel)
55 {
56 Widget leftHUDPanel = panel.FindAnyWidget("LeftHUDPanel");
57 m_ElementMap.Insert(EHudElement.LHUD_PRESENCE, leftHUDPanel.FindAnyWidget("PresencePanel"));
58 m_ElementMap.Insert(EHudElement.LHUD_STANCE, leftHUDPanel.FindAnyWidget("StancePanel"));
59 m_ElementMap.Insert(EHudElement.LHUD_PLAYER, leftHUDPanel.FindAnyWidget("PlayerPanel"));
60 m_ElementMap.Insert(EHudElement.LHUD_VEHICLE, leftHUDPanel.FindAnyWidget("VehicleHUDPanels"));
61 m_ElementMap.Insert(EHudElement.RHUD_BADGES, panel.FindAnyWidget("BadgesPanel"));
62 m_ElementMap.Insert(EHudElement.RHUD_DIVIDER, panel.FindAnyWidget("BadgeNotifierDivider"));
63 m_ElementMap.Insert(EHudElement.RHUD_NOTIFIERS, panel.FindAnyWidget("NotifiersPanel"));
64 m_ElementMap.Insert(EHudElement.QUICKBAR, panel.FindAnyWidget("QuickbarGrid"));
65 }
66
67 // Configures which elements are relevant to which flags
68 // When flag value changes, all relevant elements update visibility
69 protected void LinkElementsToFlags()
70 {
71 array <int> lHud = {EHudElement.LHUD_STANCE, EHudElement.LHUD_PLAYER, EHudElement.LHUD_PRESENCE};
72 array <int> hud = {EHudElement.LHUD_STANCE, EHudElement.LHUD_PLAYER, EHudElement.LHUD_PRESENCE, EHudElement.RHUD_BADGES, EHudElement.RHUD_DIVIDER, EHudElement.RHUD_NOTIFIERS};
73 array <int> hudVeh = {EHudElement.LHUD_STANCE, EHudElement.LHUD_PLAYER, EHudElement.LHUD_PRESENCE, EHudElement.RHUD_BADGES, EHudElement.RHUD_DIVIDER, EHudElement.RHUD_NOTIFIERS, EHudElement.LHUD_VEHICLE};
74
75 m_ElementLinkMap.Insert(EHudContextFlags.HUD_DISABLE, hud);
76 m_ElementLinkMap.Insert(EHudContextFlags.HUD_HIDE, hud);
77 m_ElementLinkMap.Insert(EHudContextFlags.VEHICLE_DISABLE, {EHudElement.LHUD_VEHICLE});
78 m_ElementLinkMap.Insert(EHudContextFlags.DRIVER, {EHudElement.LHUD_VEHICLE});
79 m_ElementLinkMap.Insert(EHudContextFlags.VEHICLE, lHud);
80 m_ElementLinkMap.Insert(EHudContextFlags.MENU_OPEN, hudVeh);
81 m_ElementLinkMap.Insert(EHudContextFlags.NO_BADGE, {EHudElement.RHUD_DIVIDER});
82 m_ElementLinkMap.Insert(EHudContextFlags.QUICKBAR_DISABLE, {EHudElement.QUICKBAR});
83 m_ElementLinkMap.Insert(EHudContextFlags.QUICKBAR_HIDE, {EHudElement.QUICKBAR});
84 m_ElementLinkMap.Insert(EHudContextFlags.QUICKBAR_GLOBAL, {EHudElement.QUICKBAR});
85 m_ElementLinkMap.Insert(EHudContextFlags.INVENTORY_OPEN, hud);
86 m_ElementLinkMap.Insert(EHudContextFlags.UNCONSCIOUS, hud);
87 }
88
89 // Set flag which changes HUD visibility
90 void SetContextFlag(EHudContextFlags flag, bool state, bool ignoreWidgetVisiblityState)
91 {
92 if (state)
93 m_CtxFlags |= flag;
94 else
95 m_CtxFlags &= ~flag;
96
97 array<EHudElement> affectedElements = m_ElementLinkMap.Get(flag);
98 foreach (EHudElement element : affectedElements)
99 {
100 UpdateElement(element, ignoreWidgetVisiblityState);
101 }
102 }
103
104 void SetContextFlag(EHudContextFlags flag, bool state)
105 {
106 SetContextFlag(flag, state, false);
107 }
108
109 // Check widget visibility
110 bool IsElementVisible(EHudElement element)
111 {
112 Widget widget = m_ElementMap.Get(element);
113 if (widget)
114 return widget.IsVisible();
115
116 return false;
117 }
118
119 // Check if specific visibility rules are active
120 bool IsContextFlagActive(EHudContextFlags flag)
121 {
122 if (m_CtxFlags & flag)
123 return true;
124
125 return false;
126 }
127
128 protected void UpdateElement(EHudElement element, bool ignoreWidgetVisiblityState)
129 {
130 bool visible = true;
131
132 switch (element)
133 {
134 // LHUD group
135 case EHudElement.LHUD_PRESENCE:
136 case EHudElement.LHUD_STANCE:
137 case EHudElement.LHUD_PLAYER:
138 if (m_CtxFlags & (HUD_HIDE_FLAGS | EHudContextFlags.VEHICLE) && (m_CtxFlags & EHudContextFlags.INVENTORY_OPEN) == 0)
139 visible = false;
140
141 break;
142
143 case EHudElement.LHUD_VEHICLE:
144 if ((m_CtxFlags & EHudContextFlags.DRIVER) == 0 || m_CtxFlags & (EHudContextFlags.VEHICLE_DISABLE | EHudContextFlags.MENU_OPEN | EHudContextFlags.UNCONSCIOUS))
145 visible = false;
146
147 break;
148
149 // RHUD group
150 case EHudElement.RHUD_DIVIDER:
151 if (m_CtxFlags & EHudContextFlags.NO_BADGE)
152 visible = false;
153
154 case EHudElement.RHUD_BADGES:
155 case EHudElement.RHUD_NOTIFIERS:
156 if (m_CtxFlags & HUD_HIDE_FLAGS && (m_CtxFlags & EHudContextFlags.INVENTORY_OPEN) == 0)
157 visible = false;
158
159 break;
160
161 case EHudElement.QUICKBAR:
162 if (m_CtxFlags & QUICKBAR_HIDE_FLAGS)
163 visible = false;
164
165 break;
166 }
167
168
169 UpdateVisibility(element, visible, ignoreWidgetVisiblityState);
170 }
171
172 protected void UpdateElement(EHudElement element)
173 {
174 UpdateElement(element, false);
175 }
176
177 protected void UpdateVisibility(EHudElement element, bool target, bool ignoreWidgetVisiblityState)
178 {
179 Widget widget = m_ElementMap.Get(element);
180 if (!widget)
181 return;
182
183 if (target)
184 {
185 if (!ignoreWidgetVisiblityState && widget.IsVisible())
186 return;
187
188 widget.Show(true);
189 }
190
191 if (!target)
192 {
193 if (!ignoreWidgetVisiblityState && !widget.IsVisible())
194 return;
195
196 widget.Show(false);
197 }
198 }
199
200 protected void UpdateVisibility(EHudElement element, bool target)
201 {
202 UpdateVisibility(element, target, false);
203 }
204}
map
Определения ControlsXboxNew.c:4
@ VEHICLE
Определения DayZPhysics.c:8
@ UNCONSCIOUS
Определения ECrewMemberState.c:5
@ QUICKBAR
Определения EDayZProfilesOptions.c:5
enum EHudElement VEHICLE_DISABLE
enum EHudElement DRIVER
enum EHudElement QUICKBAR_HIDE
enum EHudElement NO_BADGE
enum EHudElement MENU_OPEN
enum EHudElement HUD_DISABLE
enum EHudElement INVENTORY_OPEN
EHudElement
Определения IngameHudVisibility.c:3
@ RHUD_BADGES
Определения IngameHudVisibility.c:8
@ LHUD_VEHICLE
Определения IngameHudVisibility.c:7
@ LHUD_STANCE
Определения IngameHudVisibility.c:5
@ LHUD_PRESENCE
Определения IngameHudVisibility.c:4
@ RHUD_NOTIFIERS
Определения IngameHudVisibility.c:10
@ LHUD_PLAYER
Определения IngameHudVisibility.c:6
@ RHUD_DIVIDER
Определения IngameHudVisibility.c:9
enum EHudElement QUICKBAR_DISABLE
enum EHudElement HUD_HIDE
enum EHudElement QUICKBAR_GLOBAL
void UpdateVisibility(bool state)
Определения GEWidgetsMetaData.c:64
static void Init()
Определения PPERequesterBank.c:53
TODO doc.
Определения EnScript.c:118
WorkspaceWidget Widget
Defined in code.