DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ActionInfoGrids.c
См. документацию.
2{
3 protected bool m_UpdateTarget;
7 protected int m_IconVisibleCount;
8
9 void ActionInfoGridBase(LayoutHolder parent, Widget handledWidget)
10 {
11 InitInfoGrid(parent,handledWidget);
12 }
13
14 protected void InitInfoGrid(LayoutHolder parent, Widget handledWidget)
15 {
17
18 if (handledWidget)
19 {
20 m_MainWidget = handledWidget;
21 m_RootWidget = handledWidget;
22 }
23
24 //1. hide default margin cards
25 Widget child = m_MainWidget.GetChildren();
26 while (child)
27 {
28 child.Show(false);
29 child = child.GetSibling();
30 }
31 }
32
34 override void SetLayoutName()
35 {
36 m_LayoutName = "";
37 }
38
40 protected void CreateNewIcon(int idx = -1)
41 {
42 m_Icons.Insert(new GenericIconBase(this,null,idx,null));
43 }
44
46 {
47 m_ActionInfo = info;
48 m_Target = target;
49 }
50
51 void Cleanup()
52 {
54 m_ActionInfo = null;
55 m_Target = null;
56
57 foreach (GenericIconBase icon : m_Icons)
58 {
59 //icon.SetSlotID(InventorySlots.INVALID);
60 icon.ResetIconValues(); //reset extra values on full cleanup as appropriate
61 icon.Clear();
62 }
63 }
64
65 override void UpdateInterval()
66 {
67 bool visible = IsVisible();
68 bool shouldBe = m_IconVisibleCount > 0;
69 if (visible != shouldBe)
70 {
71 m_RootWidget.Show(shouldBe);
72
73 if (!shouldBe)
74 Cleanup();
75 }
76 }
77
79 override void SetParentWidget()
80 {
81 if (m_Parent)
82 m_ParentWidget = m_Parent.GetRootWidget().FindAnyWidget("MainGrid");
83 }
84}
85
86class ConstructionActionInfoGrid: ActionInfoGridBase
87{
89
90 override protected void CreateNewIcon(int idx = -1)
91 {
92 //m_Icons.Insert(new ConstructionInfoIcon(this,null,idx,null));
93 }
94
95 override void Cleanup()
96 {
97 super.Cleanup();
98
99 m_LastPart = null;
100 }
101}
102
103class ConstructionActionInfoToolsGrid: ConstructionActionInfoGrid
104{
105 protected int m_LastToolMask;
106 protected int m_LastPartMask;
107
108 override protected void InitInfoGrid(LayoutHolder parent, Widget handledWidget)
109 {
110 super.InitInfoGrid(parent,handledWidget);
111
112 //2. create default number of icons
113 for (int i = 1; i < EnumTools.GetEnumSize(EConstructionTools); ++i) //skipping the 'TOOL_NO_ACTION'
114 {
115 CreateNewIcon(1 << (i - 1)); //indexing by tool category bit value
116 }
117
118 m_LastToolMask = 0;
119 m_LastPartMask = 0;
120 }
121
122 override protected void CreateNewIcon(int idx = -1)
123 {
124 m_Icons.Insert(new ConstructionToolInfoIcon(this,null,idx,null));
125 }
126
127 override void UpdateInterval()
128 {
129 if (m_ActionInfo.m_InfoContextMask & EConstructionInfoCategories.TOOL_PRESENCE)
130 {
131 ActionInfoDataConstructionBase info = ActionInfoDataConstructionBase.Cast(m_ActionInfo);
132 ConstructionPart part = info.GetConstructionPart();
133 //int partActionMask = part.GetBuildActionTypeMask();
134 int partInfoMask = part.GetBuildIndicationTypeMask();
135 int toolActionMask = EConstructionTools.TOOL_HANDS; //hands as default
136 ItemBase tool;
137 if (Class.CastTo(tool, info.GetTool()))
138 {
139 //
140 string toolCfgPath = "cfgVehicles" + " " + tool.GetType() + " " + "build_action_type"; //TODO: cache later on tools (ItemBase sufficient?)
141 if (g_Game.ConfigIsExisting(toolCfgPath))
142 {
143 toolActionMask = g_Game.ConfigGetInt(toolCfgPath);
144 }
145 else
146 {
147 toolActionMask = EConstructionTools.TOOL_NO_ACTION;
148 }
149 //
150 }
151
152 if (partInfoMask != m_LastPartMask || part != m_LastPart || toolActionMask != m_LastToolMask)
153 {
154 m_IconVisibleCount = 0;
155
156 bool firstValidToolSet = false;
157 int maskOverlap = toolActionMask & partInfoMask;
158 //bool toolToDisplay = maskOverlap != EConstructionTools.TOOL_NO_ACTION;
159 //toolToDisplay |= EConstructionTools.TOOL_HANDS & partInfoMask;
160 int iconIdx;
162
163 //m_CrossedImage
164 foreach (GenericIconBase icon : m_Icons)
165 {
166 Class.CastTo(toolIcon,icon);
167 toolIcon.SetConstructionPart(part);
168 iconIdx = toolIcon.GetIconIndex();
169 bool validToolBool = iconIdx & maskOverlap;
170 //use first icon and hide the rest
171 if (maskOverlap)
172 {
173 if (validToolBool && !firstValidToolSet)
174 {
175 toolIcon.SetShowIcon(true);
176 toolIcon.SetTool(tool);
177 toolIcon.ToolCompatibilityWarning(false);
178 firstValidToolSet = true;
179 }
180 else
181 {
182 toolIcon.SetShowIcon(false);
183 toolIcon.SetTool(null);
184 }
185
186 toolIcon.UpdateInterval();
187 m_IconVisibleCount += toolIcon.IsVisible();
188 }
189 else //show all tool icons by sanitized part mask value (indicates required tools)
190 {
191 if (iconIdx == EConstructionTools.TOOL_HANDS)
192 {
193 toolIcon.ToolCompatibilityWarning(tool != null);
194 toolIcon.SetTool(tool);
195 }
196 else
197 {
198 toolIcon.SetTool(null);
199 }
200
201 toolIcon.SetShowIcon(iconIdx & partInfoMask);
202 toolIcon.UpdateInterval();
203 m_IconVisibleCount += toolIcon.IsVisible();
204 }
205 }
206
207 m_LastPartMask = partInfoMask;
208 m_LastToolMask = toolActionMask;
209 m_LastPart = part;
210 }
211 }
212 else
213 {
214 m_IconVisibleCount = 0;
215 }
216
217 super.UpdateInterval(); //handles grid widget visibility
218 }
219
220 override void Cleanup()
221 {
222 super.Cleanup();
223
224 m_LastPartMask = 0;
225 m_LastToolMask = 0;
226 }
227
229 override void SetParentWidget()
230 {
231 if (m_Parent)
232 m_ParentWidget = m_Parent.GetRootWidget().FindAnyWidget("SecondaryGrid0");
233 }
234}
235
236class ConstructionActionInfoMaterialsGrid: ConstructionActionInfoGrid
237{
238 const int DEFAULT_MATERIAL_ICON_COUNT = 5; //TODO: remove and replace by max material count (store somewhere on materials init)
239
240 override protected void InitInfoGrid(LayoutHolder parent, Widget handledWidget)
241 {
242 super.InitInfoGrid(parent,handledWidget);
243
244 //2. create default number of icons
245 for (int i = 0; i < DEFAULT_MATERIAL_ICON_COUNT; ++i)
246 {
247 CreateNewIcon(i); //indexing by part's material idx
248 }
249 }
250
251 override protected void CreateNewIcon(int idx = -1)
252 {
253 m_Icons.Insert(new ConstructionMaterialInfoIcon(this,null,idx,null));
254 }
255
256 override void UpdateInterval()
257 {
258 if (m_ActionInfo.m_InfoContextMask & EConstructionInfoCategories.MATERIALS_PRESENCE)
259 {
260 ActionInfoDataConstructionBase info = ActionInfoDataConstructionBase.Cast(m_ActionInfo);
261 ConstructionPart part = info.GetConstructionPart();
262
263 m_IconVisibleCount = 0;
264 ConstructionMaterialInfoIcon matIcon;
265 foreach (GenericIconBase icon : m_Icons)
266 {
267 Class.CastTo(matIcon,icon);
268
269 matIcon.SetConstructionPart(part);
270 matIcon.SetTargetEntity(EntityAI.Cast(m_Target.GetObject()));
271 //matIcon.InitMaterialInfo();
272 matIcon.UpdateInterval();
273 m_IconVisibleCount += matIcon.IsVisible();
274 }
275 }
276 else
277 {
278 m_IconVisibleCount = 0;
279 }
280
281 super.UpdateInterval(); //handles grid widget visibility
282 }
283
285 override void SetParentWidget()
286 {
287 if (m_Parent)
288 m_ParentWidget = m_Parent.GetRootWidget().FindAnyWidget("SecondaryGrid1");
289 }
290}
ref ActionTarget m_Target
Определения ActionBase.c:18
void CreateNewIcon(int idx=-1)
Определения ActionInfoGrids.c:90
override void UpdateInterval()
Определения ActionInfoGrids.c:256
void InitInfoGrid(LayoutHolder parent, Widget handledWidget)
Определения ActionInfoGrids.c:240
override void SetParentWidget()
parent to the second subgrid
Определения ActionInfoGrids.c:285
ActionInfoGridBase m_LastPart
ConstructionActionInfoToolsGrid DEFAULT_MATERIAL_ICON_COUNT
ActionInfoDataBase m_ActionInfo
Определения ActionInfoPanels.c:8
void ActionTarget(Object object, Object parent, int componentIndex, vector cursorHitPos, float utility, string surfaceName="")
Определения ActionTargets.c:125
static void Cleanup()
Определения AmmoTypes.c:134
Entity m_Parent
Определения CachedEquipmentStorageBase.c:17
EConstructionInfoCategories
Определения ConstructionConstants.c:2
DayZGame g_Game
Определения DayZGame.c:4074
ref Widget m_RootWidget[MAX_SIMULTANIOUS_PLAYERS]
Определения PluginRemotePlayerDebugClient.c:14
Widget m_ParentWidget
Определения UiHintPanel.c:318
override void SetLayoutName()
does not create unique layout, just a handler for an existing grid
Определения ActionInfoGrids.c:34
ActionInfoDataBase m_ActionInfo
Определения ActionInfoGrids.c:4
ActionTarget m_Target
Определения ActionInfoGrids.c:5
bool m_UpdateTarget
Определения ActionInfoGrids.c:3
void CreateNewIcon(int idx=-1)
We CAN add more icons during runtime if needed..
Определения ActionInfoGrids.c:40
int m_IconVisibleCount
Определения ActionInfoGrids.c:7
ref array< ref GenericIconBase > m_Icons
Определения ActionInfoGrids.c:6
void InitInfoGrid(LayoutHolder parent, Widget handledWidget)
Определения ActionInfoGrids.c:14
override void SetParentWidget()
parent to the main grid
Определения ActionInfoGrids.c:79
override void UpdateInterval()
Определения ActionInfoGrids.c:65
void SetInfoData(ActionInfoDataBase info, ActionTarget target)
Определения ActionInfoGrids.c:45
void ActionInfoGridBase(LayoutHolder parent, Widget handledWidget)
Определения ActionInfoGrids.c:9
void Cleanup()
Определения ActionInfoGrids.c:51
Super root of all classes in Enforce script.
Определения EnScript.c:11
override void Cleanup()
Определения ActionInfoGrids.c:220
void CreateNewIcon(int idx=-1)
Определения ActionInfoGrids.c:122
override void UpdateInterval()
Определения ActionInfoGrids.c:127
override void SetParentWidget()
parent to the first subgrid
Определения ActionInfoGrids.c:229
void InitInfoGrid(LayoutHolder parent, Widget handledWidget)
Определения ActionInfoGrids.c:108
int GetBuildIndicationTypeMask()
Определения ConstructionPart.c:336
Instanced construction part data classes for dynamic data, statics now stored on EntityType level in ...
Определения ConstructionPart.c:4
void SetTool(ItemBase tool)
Определения ConstructionInfoIcons.c:115
void ToolCompatibilityWarning(bool show)
Определения ConstructionInfoIcons.c:125
override void UpdateInterval()
Определения ConstructionInfoIcons.c:131
void SetShowIcon(bool show)
Определения ConstructionInfoIcons.c:120
static int GetEnumSize(typename e)
Return amount of values in enum.
Определения EnConvert.c:726
Определения EnConvert.c:688
Определения GenericIcon.c:2
Определения Container.c:2
Определения EnWidgets.c:190
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
proto native bool IsVisible()
Определения NewsCarousel.c:149