DayZ 1.27
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)
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);
101 }
102 }
103
104 // Check widget visibility
105 bool IsElementVisible(EHudElement element)
106 {
107 Widget widget = m_ElementMap.Get(element);
108 if (widget)
109 return widget.IsVisible());
110
111 return false;
112 }
113
114 // Check if specific visibility rules are active
115 bool IsContextFlagActive(EHudContextFlags flag)
116 {
117 if (m_CtxFlags & flag)
118 return true;
119
120 return false;
121 }
122
123 protected void UpdateElement(EHudElement element)
124 {
125 bool visible = true;
126
127 switch (element)
128 {
129 // LHUD group
130 case EHudElement.LHUD_PRESENCE:
131 case EHudElement.LHUD_STANCE:
132 case EHudElement.LHUD_PLAYER:
133 if (m_CtxFlags & (HUD_HIDE_FLAGS | EHudContextFlags.VEHICLE) && (m_CtxFlags & EHudContextFlags.INVENTORY_OPEN) == 0)
134 visible = false;
135
136 break;
137
138 case EHudElement.LHUD_VEHICLE:
139 if ((m_CtxFlags & EHudContextFlags.DRIVER) == 0 || m_CtxFlags & (EHudContextFlags.VEHICLE_DISABLE | EHudContextFlags.MENU_OPEN | EHudContextFlags.UNCONSCIOUS))
140 visible = false;
141
142 break;
143
144 // RHUD group
145 case EHudElement.RHUD_DIVIDER:
146 if (m_CtxFlags & EHudContextFlags.NO_BADGE)
147 visible = false;
148
149 case EHudElement.RHUD_BADGES:
150 case EHudElement.RHUD_NOTIFIERS:
151 if (m_CtxFlags & HUD_HIDE_FLAGS && (m_CtxFlags & EHudContextFlags.INVENTORY_OPEN) == 0)
152 visible = false;
153
154 break;
155
156 case EHudElement.QUICKBAR:
157 if (m_CtxFlags & QUICKBAR_HIDE_FLAGS)
158 visible = false;
159
160 break;
161 }
162
163
164 UpdateVisibility(element, visible);
165 }
166
167 protected void UpdateVisibility(EHudElement element, bool target)
168 {
169 Widget widget = m_ElementMap.Get(element);
170 if (!widget)
171 return;
172
173 if (target && !widget.IsVisible())
174 {
175 widget.Show(true);
176 //Print(typename.EnumToString(EHudElement, element) + " SHOW");
177 }
178
179 if (!target && widget.IsVisible())
180 {
181 widget.Show(false);
182 //Print(typename.EnumToString(EHudElement, element) + " HIDE");
183 }
184 }
185}
map
Определения ControlsXboxNew.c:4
@ VEHICLE
Определения DayZPhysics.c:8
@ UNCONSCIOUS
Определения ECrewMemberState.c:4
@ 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:51
TODO doc.
Определения EnScript.c:118
WorkspaceWidget Widget
Defined in code.