19 private bool m_bInputEnabled;
22 private bool m_bStartAtEntity;
25 private string m_sActionContext;
31 private ref array<ref SCR_BaseManualCameraComponent> m_aComponents;
36 private CameraManager m_CameraManager;
40 private ref SCR_SortedArray<SCR_BaseManualCameraComponent> m_aComponentsSorted =
new SCR_SortedArray<SCR_BaseManualCameraComponent>;
41 private ref array<SCR_BaseManualCameraComponent> m_aComponentsOnFrame =
new array<SCR_BaseManualCameraComponent>;
42 private int m_iComponentsCount;
43 private int m_iComponentsOnFrameCount;
44 private float m_fFOVDefault = 1;
47 private vector m_vTransformPrev[4];
48 private bool m_bIsDirtyExternal;
64 if (cameraComponent.IsEnabled())
65 m_aComponentsSorted.Insert(cameraComponent.GetPriority(), cameraComponent);
67 m_iComponentsCount = m_aComponentsSorted.Count();
73 for (
int i = m_iComponentsCount - 1; i >= 0; i--)
75 if (m_aComponentsSorted[i].
InitBase(
this))
76 m_aComponentsOnFrame.Insert(m_aComponentsSorted[i]);
78 m_iComponentsOnFrameCount = m_aComponentsOnFrame.Count();
86 GetLocalTransform(transform);
89 if (m_Param) velocity = m_Param.velocityOriginal;
93 m_Param.isDirtyExternal = m_bIsDirtyExternal;
94 m_bIsDirtyExternal =
false;
98 m_Param.isDirty =
true;
103 m_InputManager.ActivateContext(m_sActionContext);
109 for (
int c = 0; c < m_iComponentsOnFrameCount; c++)
111 component = m_aComponentsOnFrame[c];
118 m_Param.ShowDebug(
this);
123 m_Param.ProcessTransform();
125 SetLocalTransform(m_Param.transform);
128 m_vTransformPrev = m_Param.transform;
130 m_Param.velocityOriginal = m_Param.transform[3] - m_Param.transformOriginal[3];
139 for (
int i = m_iComponentsCount - 1; i >= 0; i--)
145 m_aComponentsSorted[i].EOnCameraSave(save);
147 if (save.m_aValues && !save.m_aValues.IsEmpty())
149 save.m_sTypeName = m_aComponentsSorted[i].Type().ToString();
152 int dataCount = outData.Count();
153 while (d < dataCount)
156 if (outData[d].m_sTypeName == save.m_sTypeName)
158 outData.RemoveOrdered(d);
164 outData.InsertAt(save, d);
177 type = dataEntry.m_sTypeName.ToType();
178 for (
int i = m_iComponentsCount - 1; i >= 0; i--)
181 m_aComponentsSorted[i].EOnCameraLoad(dataEntry);
190 for (
int i = m_iComponentsCount - 1; i >= 0; i--)
193 m_aComponentsSorted[i].EOnCameraReset();
202 for (
int i = m_iComponentsCount - 1; i >= 0; i--)
204 if (m_aComponentsSorted[i].
Type() ==
type)
205 return m_aComponentsSorted[i];
216 camera.GetTransform(matrix);
223 if (!m_CameraManager)
return null;
226 array<CameraBase> cameras =
new array<CameraBase>();
227 m_CameraManager.GetCamerasList(cameras);
230 for (
int i = cameras.Count() - 1; i >= 0; i--)
232 if (cameras[i] !=
this)
return cameras[i];
243 if (!m_CameraManager || m_CameraManager.CurrentCamera() !=
this)
247 CameraBase camera =
GetGame().GetPlayerController().GetPlayerCamera();
255 m_CameraManager.SetCamera(camera);
268 if (!m_CameraManager || m_CameraManager.CurrentCamera() !=
this)
273 m_CameraManager.SetCamera(camera);
279 if (!m_CameraManager)
282 array<CameraBase> cameras =
new array<CameraBase>();
283 m_CameraManager.GetCamerasList(cameras);
285 int count = cameras.Count();
290 return cameras[0] ==
this;
298 if (!m_MenuManager)
return false;
300 if (m_MenuManager.IsAnyDialogOpen())
return true;
302 MenuBase topMenu = m_MenuManager.GetTopMenu();
314 GetWorldTransform(transform);
316 SetWorldTransform(transform);
318 for (
int i = m_iComponentsCount - 1; i >= 0; i--)
320 m_aComponentsSorted[i].EOnCameraParentChange(
true, parent);
332 GetWorldTransform(transform);
334 SetWorldTransform(transform);
336 for (
int i = m_iComponentsCount - 1; i >= 0; i--)
338 m_aComponentsSorted[i].EOnCameraParentChange(
false, parent);
347 m_bInputEnabled = enable;
355 return m_bInputEnabled;
363 return m_fFOVDefault;
371 return m_Param.isManualInput;
379 m_bIsDirtyExternal = isDirty;
397 if (!m_Widget ||
layout.IsEmpty())
return null;
400 if (!widget)
return null;
402 widget.SetVisible(isVisible);
422 if (m_iComponentsCount == -1)
return;
425 for (
int i = m_iComponentsCount - 1; i >= 0; i--)
427 m_aComponentsSorted[i].EOnCameraExit();
429 m_iComponentsCount = -1;
441 if (m_CameraManager && m_CameraManager.CurrentCamera() !=
this)
444 timeSlice = timeSlice / m_World.GetTimeScale();
462 world.RegisterEntityToBeUpdatedWhileGameIsPaused(
this);
466 if (m_CameraManager) m_CameraManager.SetCamera(
this);
479 FrameSlot.SetOffsets(m_Widget, 0, 0, 0, 0);
484 DiagMenu.RegisterBool(
SCR_DebugMenuID.DEBUGUI_MANUAL_CAMERA_DEBUG,
"",
"Show debug menu",
"Manual Camera",
false);
498 m_MenuManager =
GetGame().GetMenuManager();
499 m_InputManager =
GetGame().GetInputManager();
500 m_World = GetWorld();
503 if (m_Widget) m_Widget.RemoveFromHierarchy();
508 m_CameraManager =
game.GetCameraManager();
516 SetName(
"ManualCamera");
526 world.UnregisterEntityToBeUpdatedWhileGameIsPaused(
this);
ArmaReforgerScripted GetGame()
bool InitBase(SCR_ManualCamera camera)
enum SCR_ECompassType EntityEditorProps(category:"GameScripted/Gadgets", description:"Compass", color:"0 0 255 255")
Prefab data class for compass component.
override bool SetTransform(vector transform[4], bool changedByUser=false)
Get all prefabs that have the spawner data
UI layouts Menus CleanSweep CleanSweepAreaSelection layout
proto external EntityFlags GetFlags()
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 EntityEvent ClearEventMask(EntityEvent e)
proto external void SetName(string name)
proto external void RemoveChild(notnull IEntity child, bool keepTransform=false)
Remove Entity from hierarchy.
Parent class from which all SCR_ManualCamera components inherit.
void EOnCameraFrame(SCR_ManualCameraParam param)
bool HasFlag(EManualCameraFlag flag)
void SwitchToPreviousCamera()
Widget CreateCameraWidget(ResourceName layout, bool isVisible=true)
void EOnInit(IEntity owner)
void EOnPostFrame(IEntity owner, float timeSlice)
void MoveToCamera(CameraBase camera=null)
bool TrySwitchToControlledEntityCamera()
void ProcessComponents(float timeSlice=0)
SCR_BaseManualCameraComponent FindCameraComponent(typename type)
void SCR_ManualCamera(IEntitySource src, IEntity parent)
CameraBase GetPreviousCamera()
void SaveComponents(notnull array< ref SCR_ManualCameraComponentSave > outData)
void AttachTo(IEntity parent)
void SetInputEnabled(bool enable)
void LoadComponents(array< ref SCR_ManualCameraComponentSave > data)
void SetDirty(bool isDirty)
void Detach()
Detach camera from its parent entity.
SCR_ManualCameraParam GetCameraParam()
void RegisterComponents()
Parameter for carrying information between individual camera components.
proto external float GetVerticalFOV()
proto external void SetVerticalFOV(float fov)
SCR_FieldOfViewSettings Attribute
EntityEvent
Various entity events.
EntityFlags
Various entity flags.
int IsEnabled()
Returns true if the light is enabled.
proto external string ToString()
Plain C++ pointer, no weak pointers, no memory management.
WidgetFlags
Widget flags. See enf::Widget::SetFlags().