Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_PIPSightsComponent.c
Go to the documentation of this file.
1[EntityEditorProps(category: "GameScripted/Weapon/Sights/Picture in Picture Sights", description: "", color: "0 0 255 255")]
3{
4 [Attribute("{EF091399D840192D}UI/layouts/Sights/PictureInPictureSightsLayout.layout", UIWidgets.ResourceNamePicker, "The layout used for this PIP component", params: "layout")]
6
7 [Attribute("RTTexture0", UIWidgets.EditBox, "Name of RTTexture widget within provided layout")]
8 protected string m_sRTTextureWidgetName;
9
10 [Attribute("RenderTarget0", UIWidgets.EditBox, "Name of RenderTarget widget within provided layout")]
11 protected string m_sRTargetWidgetName;
12
13 [Attribute("1", UIWidgets.Slider, "Camera index used for this PIP component", params: "0 31 1")]
14 protected int m_iCameraIndex;
15
16 [Attribute("12.5", UIWidgets.Slider, "Camera field of view used by this PIP component", params: "0 89.9 0.1")]
17 protected float m_fCameraFOV;
18
19 [Attribute("0.2", UIWidgets.Slider, "Camera near clipping plane", params: "0 1000 0.01")]
20 protected float m_fNearPlane;
21
22 [Attribute("1500", UIWidgets.Slider, "Camera field of view used by this PIP component", params: "0 5000 1")]
23 protected float m_fFarPlane;
24
25 // Point info?
26 [Attribute("1.0", UIWidgets.EditBox, "Scale of resolution used by the PIP", params: "0.1 1 0.1")]
27 protected float m_fResolutionScale;
28
29 // Point info?
30 [Attribute("0 0 0", UIWidgets.EditBox, "Camera offset used for this PIP")]
32
33 //------------------------------------------------------------------------------------------------
38
39 //------------------------------------------------------------------------------------------------
41 {
43 }
44
45 //------------------------------------------------------------------------------------------------
47 {
49 }
50
51 //------------------------------------------------------------------------------------------------
53 {
54 return m_iCameraIndex;
55 }
56
57 //------------------------------------------------------------------------------------------------
59 {
60 return m_fCameraFOV;
61 }
62
63 //------------------------------------------------------------------------------------------------
65 {
66 return m_fNearPlane;
67 }
68
69 //------------------------------------------------------------------------------------------------
71 {
72 return m_fFarPlane;
73 }
74
75 //------------------------------------------------------------------------------------------------
77 {
78 return m_fResolutionScale;
79 }
80
81 //------------------------------------------------------------------------------------------------
83 {
84 return m_vCameraPoint;
85 }
86};
87
88//------------------------------------------------------------------------------------------------
89class SCR_PIPSightsComponent : ScriptedSightsComponent
90{
92 protected ref Widget m_wRoot;
93
95 protected IEntity m_pOwner;
96
99
102
105
107 protected bool m_bIsEnabled;
108
109 // Prefab data getters
110
112 {
114 return data.GetLayoutResource();
115 }
116
117 protected string GetRTTextureWidgetName()
118 {
120 return data.GetRTTextureWidgetName();
121 }
122
123 protected string GetRTargetWidgetName()
124 {
126 return data.GetRTargetWidgetName();
127 }
128
129 protected int GetCameraIndex()
130 {
132 return data.GetCameraIndex();
133 }
134
135 protected float GetCameraFOV()
136 {
138 return data.GetCameraFOV();
139 }
140
141 protected float GetNearPlane()
142 {
144 return data.GetNearPlane();
145 }
146
147 protected float GetFarPlane()
148 {
150 return data.GetFarPlane();
151 }
152
153 protected float GetResolutionScale()
154 {
156 return data.GetResolutionScale();
157 }
158
160 {
162 return data.GetCameraPoint();
163 }
164
165 #ifdef WORKBENCH
166 //------------------------------------------------------------------------------------------------
167 override int _WB_GetAfterWorldUpdateSpecs(IEntity owner, IEntitySource src)
168 {
169 return EEntityFrameUpdateSpecs.CALL_WHEN_ENTITY_VISIBLE;
170 }
171
172 //------------------------------------------------------------------------------------------------
173 protected override void _WB_AfterWorldUpdate(IEntity owner, float timeSlice)
174 {
175 const float axisLength = 0.1;
176
177 vector origin = owner.GetOrigin() + GetCameraPoint();
178 vector right = origin + owner.GetTransformAxis(0) * axisLength;
179 vector up = origin + owner.GetTransformAxis(1) * axisLength;
180 vector fwd = origin + owner.GetTransformAxis(2) * axisLength;
181
182 ref auto rightArrow = Shape.CreateArrow(origin, right, 0.01, ARGB(240,255,0,0), ShapeFlags.ONCE);
183 ref auto upArrow = Shape.CreateArrow(origin, up, 0.01, ARGB(240,0,255,0), ShapeFlags.ONCE);
184 ref auto fwdArrow = Shape.CreateArrow(origin, fwd, 0.01, ARGB(240,0,0,255), ShapeFlags.ONCE);
185 }
186 #endif
187
188 //------------------------------------------------------------------------------------------------
189 void SetEnabled(bool enabled)
190 {
191 // A component without an owner shouldnt exist
192 if (!m_pOwner)
193 return;
194
195 // disabled->enabled
196 // Create neccessary items
197 if (enabled && !m_bIsEnabled)
198 {
200
201 // Try to create UI for PIP,
202 // output params are either set to valid ones,
203 // or root itself is set to null and destroyed
205 m_wRoot = CreateUI(data.GetLayoutResource(), data.GetRTTextureWidgetName(), data.GetRTargetWidgetName(), m_wRenderTargetTextureWidget, m_wRenderTargetWidget);
206
207 if (!m_wRoot)
208 {
209 Print("Could not create PIP layout!");
210 return;
211 }
212
213 // Create PIP camera
214 if (!m_PIPCamera)
215 m_PIPCamera = CreateCamera(m_pOwner, data.GetCameraPoint(), data.GetCameraIndex(), data.GetCameraFOV(), data.GetNearPlane(), data.GetFarPlane());
216
217 // Set camera index of render target widget
218 BaseWorld baseWorld = m_pOwner.GetWorld();
219 m_wRenderTargetWidget.SetWorld(baseWorld, data.GetCameraIndex());
220
221 // Set resolution scale
222 m_wRenderTargetWidget.SetResolutionScale(data.GetResolutionScale(), data.GetResolutionScale());
223
224 // Set RTT on parent
225 m_wRenderTargetTextureWidget.SetRenderTarget(m_pOwner);
226
227 m_bIsEnabled = true;
228 return;
229 }
230
231 // enabled -> disabled
232 if (!enabled && m_bIsEnabled)
233 {
234 Destroy();
235
236 m_bIsEnabled = false;
237 return;
238 }
239 }
240
241 //------------------------------------------------------------------------------------------------
242 protected Widget CreateUI(string layout, string rtTextureName, string rtName, out RTTextureWidget RTTexture, out RenderTargetWidget RTWidget)
243 {
244 // Empty layout, cannot create any widget
245 if (layout == string.Empty)
246 return null;
247
248 // Create layout
249 Widget root = GetGame().GetWorkspace().CreateWidgets(layout);
250
251 // Layout was not created successfully
252 if (!root)
253 return null;
254
255 // We dont have required RT widgets, delete layout and terminate
256 RTTexture = RTTextureWidget.Cast(root.FindAnyWidget(rtTextureName));
257 RTWidget = RenderTargetWidget.Cast(root.FindAnyWidget(rtName));
258 if (!RTTexture || !RTWidget)
259 {
260 root.RemoveFromHierarchy();
261 return null;
262 }
263
264 return root;
265 }
266
267 //------------------------------------------------------------------------------------------------
268 protected void DestroyUI(Widget root)
269 {
270 if (root)
271 {
272 root.RemoveFromHierarchy();
273 }
274 }
275
276 //------------------------------------------------------------------------------------------------
283 protected ScriptCamera CreateCamera(IEntity parent, vector position, int cameraIndex, float fov, float nearPlane, float farPlane)
284 {
285 // Spawn camera
286 BaseWorld baseWorld = parent.GetWorld();
287 ScriptCamera pipCamera = ScriptCamera.Cast(GetGame().SpawnEntity(ScriptCamera, baseWorld));
289
290 // Since we use autotransform,
291 // we set camera matrix to "local" coordinates
292 vector mat[4];
293 Math3D.MatrixIdentity3(mat);
294 mat[3] = position;
295
296
297 pipCamera.SetTransform(mat);
298 pipCamera.Index = cameraIndex;
299 pipCamera.FreeFly = false;
300
301 // These are attributes used in constructor of
302 // scriptCamera so they will most likely not work
303
304 /*
305 pipCamera.FOV = data.GetCameraFOV();
306 pipCamera.NearPlane = nearPlane;
307 pipCamera.FarPlane = farPlane;
308 */
309
310 // Instead we do it the old fashionate way
311 baseWorld.SetCameraVerticalFOV(cameraIndex, data.GetCameraFOV());
312 baseWorld.SetCameraFarPlane(cameraIndex, farPlane);
313 baseWorld.SetCameraNearPlane(cameraIndex, nearPlane);
314
315 // Set camera to hierarchy
316 parent.AddChild(pipCamera, -1, EAddChildFlags.AUTO_TRANSFORM);
317 return pipCamera;
318 }
319
320 //------------------------------------------------------------------------------------------------
321 protected void DestroyCamera(ScriptCamera camera)
322 {
323 if (camera)
324 {
325 IEntity cameraParent = camera.GetParent();
326 if (cameraParent)
327 cameraParent.RemoveChild(camera);
328
329 delete camera;
330 }
331 }
332
333 //------------------------------------------------------------------------------------------------
334 // Destroy everything this component created during its lifetime
335 protected void Destroy()
336 {
337 m_wRenderTargetTextureWidget.RemoveRenderTarget(m_pOwner);
340 }
341
342 //------------------------------------------------------------------------------------------------
343 protected override void OnSightADSActivated()
344 {
345 SetEnabled(true);
346 super.OnSightADSActivated();
347 }
348
349 //------------------------------------------------------------------------------------------------
350 protected override void OnSightADSDeactivated()
351 {
352 SetEnabled(false);
353 super.OnSightADSDeactivated();
354 }
355
356 //------------------------------------------------------------------------------------------------
357 protected override void OnInit(IEntity owner)
358 {
359 m_pOwner = owner;
360 }
361
362 //------------------------------------------------------------------------------------------------
367
368 //------------------------------------------------------------------------------------------------
371 {
372 Destroy();
373 }
374};
ArmaReforgerScripted GetGame()
Definition game.c:1398
IEntity SpawnEntity(ResourceName entityResourceName, notnull IEntity slotOwner)
SCR_CharacterSoundComponentClass GetComponentData()
enum SCR_ECompassType EntityEditorProps(category:"GameScripted/Gadgets", description:"Compass", color:"0 0 255 255")
Prefab data class for compass component.
vector position
Get all prefabs that have the spawner data
UI layouts Menus CleanSweep CleanSweepAreaSelection layout
void ScriptCamera(IEntitySource src, IEntity parent)
enum EVehicleType IEntity
proto external vector GetOrigin()
proto external int AddChild(notnull IEntity child, TNodeId pivot, EAddChildFlags flags=EAddChildFlags.AUTO_TRANSFORM)
Add Entity to hierarchy. Pivot is pivot index, or -1 for center of parent.
proto external BaseWorld GetWorld()
proto external vector GetTransformAxis(int axis)
See IEntity::GetTransformAxis.
proto external IEntity GetParent()
proto external void RemoveChild(notnull IEntity child, bool keepTransform=false)
Remove Entity from hierarchy.
void SCR_PIPSightsComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
Constructor.
bool m_bIsEnabled
Is this PIP currently enabled?
ScriptCamera m_PIPCamera
The camera to be used by this pip component.
RTTextureWidget m_wRenderTargetTextureWidget
The render target texture found within our layout.
ref Widget m_wRoot
The root layout hierarchy widget.
override void OnInit(IEntity owner)
void ~SCR_PIPSightsComponent()
Destructor.
void DestroyCamera(ScriptCamera camera)
IEntity m_pOwner
Parent entity owner.
Widget CreateUI(string layout, string rtTextureName, string rtName, out RTTextureWidget RTTexture, out RenderTargetWidget RTWidget)
ScriptCamera CreateCamera(IEntity parent, vector position, int cameraIndex, float fov, float nearPlane, float farPlane)
RenderTargetWidget m_wRenderTargetWidget
The render target found within our layout.
IEntity GetOwner()
Owner entity of the fuel tank.
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
ShapeFlags
Definition ShapeFlags.c:13
SCR_FieldOfViewSettings Attribute
EAddChildFlags
proto int ARGB(int a, int r, int g, int b)