public void Translate(Vector3 translation, CAGType cagType)
 {
     transform.Translate(translation * ScaleFactor);
     this.cagType = cagType;
     cameraHolder.localPosition = new Vector3(GetTargetXPos(), 0, 0);
     PositionFloorCameraWhenRotating();
     PositionCameras();
 }
        //Generate camera preview gizmo.
        private void OnDrawGizmos()
        {
            //Only draw if 2D mode.
            if (SceneView.currentDrawingSceneView != null && !SceneView.currentDrawingSceneView.in2DMode)
            {
                return;
            }


            if (EditorPrefs.HasKey("ImmersiveCameraScreenSize"))
            {
                screenSize = (ScreenSizes)EditorPrefs.GetInt("ImmersiveCameraScreenSize");
            }
            if (EditorPrefs.HasKey("ImmersiveCameraLayout"))
            {
                layout = (SurfacePosition)EditorPrefs.GetInt("ImmersiveCameraLayout");
            }

            //Check if camera settings have changed.
            if (_screenSize != screenSize || _layout != layout || _cagType != cagType)
            {
                _layout     = layout;
                _screenSize = screenSize;
                _cagType    = cagType;

                //Calculate new Surface Information
                rects = new List <Rect>();
                var surfacePositions = GetSurfacesFromLayout(layout);
                var surfaceRects     = GenerateSurfaceRectsInEditor(surfacePositions);
                GenerateSurfacesInfo(surfacePositions, surfaceRects);

                //Calculate new cameras size and position.
                for (int i = 0; i < walls.Count; i++)
                {
                    var  surface = walls[i];
                    Rect rect    = new Rect();
                    rect.size = new Vector2(surface.aspectRatio, height * 2);

                    if (cagType == CAGType.Interior)
                    {
                        rect.center = GetWallCameraPositionCAGI(surface);
                    }
                    else if (cagType == CAGType.Exterior)
                    {
                        rect.center = GetWallCameraPositionCAGE(surface);
                    }

                    rects.Add(rect);
                }
            }

            //Draw camera frustrums.
            float xPos = transform.position.x;
            float yPos = transform.position.y;
            var   zPos = transform.position.z + mainCamera.farClipPlane;

            Gizmos.color = Color.white;
            for (int i = 0; i < rects.Count; i++)
            {
                var rect = rects[i];
                Gizmos.DrawLine(new Vector3(xPos + rect.xMin, yPos + rect.yMax, zPos), new Vector3(xPos + rect.xMax, yPos + rect.yMax, zPos));
                Gizmos.DrawLine(new Vector3(xPos + rect.xMin, yPos + rect.yMin, zPos), new Vector3(xPos + rect.xMax, yPos + rect.yMin, zPos));
                Gizmos.DrawLine(new Vector3(xPos + rect.xMin, yPos + rect.yMin, zPos), new Vector3(xPos + rect.xMin, yPos + rect.yMax, zPos));
                Gizmos.DrawLine(new Vector3(xPos + rect.xMax, yPos + rect.yMin, zPos), new Vector3(xPos + rect.xMax, yPos + rect.yMax, zPos));
            }
        }