Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_CameraBase.c
Go to the documentation of this file.
1[EntityEditorProps(category: "GameScripted/Camera", description: "Scripted camera", color: "128 000 255 255")]
5
9class SCR_CameraBase: CameraBase
10{
11 [Attribute(desc: "Show debug shape in World Editor even when the entity is not selected.")]
12 protected bool m_bShowDebugViewCone;
13
20 bool IsInView(vector worldPos, WorkspaceWidget workspace = null)
21 {
22 if (!workspace)
23 workspace = GetGame().GetWorkspace();
24
25 return IsInView(worldPos, workspace.GetWidth() / (float)workspace.GetHeight());
26 }
27
33 bool IsInView(vector worldPos, float aspectRatio)
34 {
35 vector localPos = CoordToLocal(worldPos);
36 float angleV = SCR_Math.DeltaAngle(Math.Atan2(localPos[2], localPos[1]) * Math.RAD2DEG, 90);
37 float angleH = SCR_Math.DeltaAngle(Math.Atan2(localPos[2], localPos[0]) * Math.RAD2DEG, 90);
38
39 float fovV = GetVerticalFOV() / 2;
40 float fovH = Math.Atan2(Math.Tan(fovV * Math.DEG2RAD) * aspectRatio, 1) * Math.RAD2DEG;
41
42 return Math.InverseLerp(-fovV, fovV, angleV) < 1 && Math.InverseLerp(-fovH, fovH, angleH) < 1;
43 }
44
49 private ref ScriptInvoker Event_EOnActivate = new ScriptInvoker;
54 private ref ScriptInvoker Event_EOnDeactivate = new ScriptInvoker;
59 private ref ScriptInvoker Event_CameraActivate = new ScriptInvoker;
64 private ref ScriptInvoker Event_CameraDeactivate = new ScriptInvoker;
65
67 {
68 return Event_EOnActivate;
69 }
71 {
72 return Event_EOnDeactivate;
73 }
74 ScriptInvoker GetOnCameraActivate()
75 {
76 return Event_CameraActivate;
77 }
78 ScriptInvoker GetOnCameraDeactivate()
79 {
80 return Event_CameraDeactivate;
81 }
82
83 override void EOnActivate(IEntity owner)
84 {
85 super.EOnActivate(owner);
86
87 Event_EOnActivate.Invoke();
88 }
89 override void EOnDeactivate(IEntity owner)
90 {
91 super.EOnDeactivate(owner);
92
93 if (Event_EOnDeactivate) //--- Invoker may be null when the entity is being deleted
94 Event_EOnDeactivate.Invoke();
95 }
96 override void CameraActivate()
97 {
98 Event_CameraActivate.Invoke();
99 }
100 override void CameraDeactivate()
101 {
102 Event_CameraDeactivate.Invoke();
103 }
104
105#ifdef WORKBENCH
106 override int _WB_GetAfterWorldUpdateSpecs(IEntitySource src)
107 {
108 return EEntityFrameUpdateSpecs.CALL_WHEN_ENTITY_VISIBLE;
109 }
110
111 override void _WB_AfterWorldUpdate(float timeSlice)
112 {
113 WorldEditorAPI api = _WB_GetEditorAPI();
114 if (!api || (!api.IsEntitySelected(api.EntityToSource(this)) && !m_bShowDebugViewCone))
115 return;
116
117 float length = GetFarPlane();
118 float height = Math.Tan(GetVerticalFOV() / 2 * Math.DEG2RAD) * length;
119 float width = height * (api.GetScreenWidth() / api.GetScreenHeight());
120
121 vector transform[4];
122 GetTransform(transform);
123
124 vector points[12];
125
126 //--- Top
127 points[0] = transform[3];
128 points[1] = transform[3] + transform[2] * length + transform[1] * height + transform[0] * width;
129 points[2] = transform[3] + transform[2] * length + transform[1] * height + transform[0] * -width;
130
131 //--- Right
132 points[3] = points[0];
133 points[4] = transform[3] + transform[2] * length + transform[1] * -height + transform[0] * width;
134 points[5] = points[1];
135
136 //--- Bottom
137 points[6] = points[0];
138 points[7] = transform[3] + transform[2] * length + transform[1] * -height + transform[0] * -width;
139 points[8] = points[4];
140
141 //--- Left
142 points[9] = points[0];
143 points[10] = points[2];
144 points[11] = points[7];
145
146 Shape.CreateTris(ARGBF(0.25, 0.5, 0, 1), ShapeFlags.ONCE | ShapeFlags.TRANSP | ShapeFlags.DOUBLESIDE, points, 4);
147 }
148#endif
149};
GetTransformResult JsonApiStruct GetTransform(notnull const BlenderRestAPI connection, string object_name)
ArmaReforgerScripted GetGame()
Definition game.c:1398
enum SCR_ECompassType EntityEditorProps(category:"GameScripted/Gadgets", description:"Compass", color:"0 0 255 255")
Prefab data class for compass component.
override ScriptInvoker GetOnActivate()
override ScriptInvoker GetOnDeactivate()
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
enum EVehicleType IEntity
Definition Math.c:13
bool IsInView(vector worldPos, float aspectRatio)
bool IsInView(vector worldPos, WorkspaceWidget workspace=null)
static float DeltaAngle(float a, float b)
Definition SCR_Math.c:142
void CameraDeactivate()
Called the moment this camera is deactivated by CameraManager.
proto external float GetFarPlane()
proto external float GetVerticalFOV()
void CameraActivate()
Called the moment this camera is activated by CameraManager.
ShapeFlags
Definition ShapeFlags.c:13
SCR_FieldOfViewSettings Attribute
proto int ARGBF(float fa, float fr, float fg, float fb)
Converts <0.0, 1.0> ARGB into color.
ScriptInvokerBase< func > ScriptInvoker
Definition tools.c:134