Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_BaseHeadingDisplay.c
Go to the documentation of this file.
1class SCR_BaseHeadingDisplay : SCR_InfoDisplayExtended
2{
3 [Attribute("9", desc: "The amount of azimuth Widgets that will be created. Should always be an uneven number and should be at least 2 more then actually needed.")]
4 protected int m_iMaxShownDegrees;
5
6 [Attribute(defvalue: "6400", desc: "Mils in full 360 degrees angle \nSoviet: 6000\nNATO: 6400")]
7 protected float m_fMils;
8
9 [Attribute("0.5", UIWidgets.Slider, "Time in seconds after which the Display should fade in", "0 100 0.1")]
10 protected float m_fFadeInDelay;
11
12 [Attribute("1")]
13 protected bool m_bShowMils;
14
15 [Attribute("1")]
16 protected bool m_bShowDegrees;
17
18 [Attribute("m_HeadingTableHolder", "Scroll widget, that holds all the heading notches.")]
20
21 [Attribute("DegreeText", "TestWidget below the notch, where the heading is gonna be displayed.")]
23
24 [Attribute("m_TxtMils", "Text widget where the current heading in mils will be shown.")]
25 protected string m_sMilsTextWidgetName;
26
27 [Attribute("m_TxtDegrees", "Text widget where the current heading in degrees will be shown.")]
28 protected string m_sDegreeTextWidgetName;
29
30 [Attribute(desc: "SizeLayoutWidgets to which the padding gets applied, to have the correct distance between 2 degrees.")]
31 protected ref array<string> m_aPaddingWidgetNames;
32
33 [Attribute(desc: "Widgets defined in 'Padding Widget Names' that should only have half the padding then the others.")]
34 protected ref array<string> m_aHalfPaddingWidgetNames;
35
39 protected float m_fSliderPosX;
40 protected float m_fSliderPosY;
41 protected float m_fCurrentFOV;
42 // Used to know how many pixels are between 2 degree Widgets
43 protected float m_fDegreeWidgetSize;
44
45 // Store the last full degree to know when we moved 1 degree
46 protected int m_iLastStoredHeading;
47 protected int m_iCurrentHeading;
48
49 protected CameraManager m_CameraManager;
50 protected CameraBase m_Camera;
51
56
58
59 protected ref array<TextWidget> m_aHeadingTextWidgets = {};
60 protected ref array<SizeLayoutWidget> m_aHeadingPaddingWidgets = {};
61
62 //------------------------------------------------------------------------------------------------
63 override void Show(bool show, float speed = UIConstants.FADE_RATE_INSTANT, EAnimationCurve curve = EAnimationCurve.LINEAR)
64 {
65 speed = UIConstants.FADE_RATE_DEFAULT;
66
67 // If it can be shown, do so after a delay to prevent it from fading in to early
68 if (m_bCanShow)
69 GetGame().GetCallqueue().CallLater(ShowDelay, m_fFadeInDelay * 1000, false, show, speed);
70 else
71 super.Show(show, speed);
72 }
73
74 //------------------------------------------------------------------------------------------------
78 protected void ShowDelay(bool show, float speed = UIConstants.FADE_RATE_INSTANT)
79 {
80 super.Show(show, speed);
81 }
82
83 //------------------------------------------------------------------------------------------------
86 protected void UpdateFOV(float fov)
87 {
88 if (fov <= 0)
89 return;
90
91 WorkspaceWidget workspace = GetGame().GetWorkspace();
92
93 float screenW, screenH;
94 workspace.GetScreenSize(screenW, screenH);
95 screenH = workspace.DPIUnscale(screenH);
96
97 float pixelsPerDegree = screenH / fov;
98 float padding = pixelsPerDegree - m_fDegreeWidgetDefaultSize;
99
101 {
102 if (m_aHalfPaddingWidgetNames.Contains(w.GetName()))
103 {
104 w.SetWidthOverride(padding * 0.5);
105 w.SetHeightOverride(padding * 0.5);
106 }
107 else
108 {
109 w.SetWidthOverride(padding);
110 w.SetHeightOverride(padding);
111 }
112 }
113
115 }
116
117 //------------------------------------------------------------------------------------------------
121 {
122 BaseWeaponManagerComponent weaponManager = m_TurretController.GetWeaponManager();
123 if (!weaponManager)
124 return vector.Zero;
125
126 vector transform[4];
127 weaponManager.GetCurrentMuzzleTransform(transform);
128
129 return transform[2];
130 }
131
132 //------------------------------------------------------------------------------------------------
136 {
137 m_wHeadingTableHolderWidget.SetSliderPos(0.5, 0.5);
139 m_fSliderPosX = GetGame().GetWorkspace().DPIUnscale(m_fSliderPosX);
140 m_fSliderPosY = GetGame().GetWorkspace().DPIUnscale(m_fSliderPosY);
141 }
142
143 //------------------------------------------------------------------------------------------------
146 void CalculateScreenSize(Widget degreeWidget)
147 {
148 if (!degreeWidget)
149 return;
150
154 }
155
156 //------------------------------------------------------------------------------------------------
160 protected void SetupHeadingWidgets(ResourceName headingHolderLayout = string.Empty, ResourceName headingNotchLayout = string.Empty)
161 {
162 WorkspaceWidget workspaceWidget = GetGame().GetWorkspace();
163 Widget elevationNotchHolder = workspaceWidget.CreateWidgets(headingHolderLayout, m_wHeadingTableHolderWidget);
164
165 if (!elevationNotchHolder)
166 return;
167
168 m_aHeadingTextWidgets.Clear();
170
171 SizeLayoutWidget paddingWidget;
172
173 // Check if there are some Padding widgets on the root to also apply the correct padding to them.
174 foreach (string widgetName : m_aPaddingWidgetNames)
175 {
176 paddingWidget = SizeLayoutWidget.Cast(m_wRoot.FindAnyWidget(widgetName));
177
178 if (paddingWidget)
179 m_aHeadingPaddingWidgets.Insert(paddingWidget);
180 }
181
182 Widget widget;
183 TextWidget degreeTextWidget;
184
185 for (int i = 0; i < m_iMaxShownDegrees; i++)
186 {
187 widget = workspaceWidget.CreateWidgets(headingNotchLayout, elevationNotchHolder);
188
189 if (!widget)
190 continue;
191
192 degreeTextWidget = TextWidget.Cast(widget.FindAnyWidget(m_sTxtHeadingDegreeNotchWidgetName));
193
194 if (degreeTextWidget)
195 m_aHeadingTextWidgets.Insert(degreeTextWidget);
196
197 foreach (string widgetName : m_aPaddingWidgetNames)
198 {
199 paddingWidget = SizeLayoutWidget.Cast(widget.FindAnyWidget(widgetName));
200
201 if (paddingWidget)
202 m_aHeadingPaddingWidgets.Insert(paddingWidget);
203 }
204 }
205
206 m_wSavedHeadingWidget = widget;
207
208 // Needs to run 1 frame later so the size of the widget is the correct one.
209 GetGame().GetCallqueue().Call(CalculateScreenSize, widget);
210 }
211
212 //------------------------------------------------------------------------------------------------
213 override void DisplayUpdate(IEntity owner, float timeSlice)
214 {
215 // Only valid if there is main camera
216 if (!m_Camera)
217 return;
218
219 float fov = m_Camera.GetVerticalFOV();
220
221 // Only update everything if needed
222 if (fov != m_fCurrentFOV)
223 {
224 UpdateFOV(fov);
225 m_fCurrentFOV = fov;
226 }
227 }
228
229 //------------------------------------------------------------------------------------------------
230 override void DisplayStartDraw(IEntity owner)
231 {
232 if (!m_wRoot)
233 return;
234
236
239
241 m_wMilsTextWidget.SetVisible(false);
242
244 m_wDegreesTextWidget.SetVisible(false);
245
247
248 m_CameraManager = GetGame().GetCameraManager();
249
250 if (m_CameraManager)
251 m_Camera = m_CameraManager.CurrentCamera();
252 }
253
254 //------------------------------------------------------------------------------------------------
255 override void DisplayStopDraw(IEntity owner)
256 {
257 if (m_wRoot)
258 m_wRoot.RemoveFromHierarchy();
259 }
260
261}
ArmaReforgerScripted GetGame()
Definition game.c:1398
Widget m_wRoot
bool m_bCanShow
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
EAnimationCurve
proto external Managed FindComponent(typename typeName)
void ShowDelay(bool show, float speed=UIConstants.FADE_RATE_INSTANT)
ScrollLayoutWidget m_wHeadingTableHolderWidget
void CalculateScreenSize(Widget degreeWidget)
TurretControllerComponent m_TurretController
ref array< string > m_aHalfPaddingWidgetNames
override void DisplayUpdate(IEntity owner, float timeSlice)
override void DisplayStartDraw(IEntity owner)
override void DisplayStopDraw(IEntity owner)
override void Show(bool show, float speed=UIConstants.FADE_RATE_INSTANT, EAnimationCurve curve=EAnimationCurve.LINEAR)
ref array< string > m_aPaddingWidgetNames
ref array< SizeLayoutWidget > m_aHeadingPaddingWidgets
void SetupHeadingWidgets(ResourceName headingHolderLayout=string.Empty, ResourceName headingNotchLayout=string.Empty)
void CalculateWidgetScreenSizeUnscaled(Widget widget)
ref array< TextWidget > m_aHeadingTextWidgets
SCR_FieldOfViewSettings Attribute