Browse Source

Add camera save/load/reset

habeebweeb 4 years ago
parent
commit
cb322b9be8

+ 60 - 3
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Managers/EnvironmentManager.cs

@@ -10,6 +10,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         private Camera subCamera;
         private GameObject bgObject;
         private Transform bg;
+        private CameraInfo cameraInfo;
         public void ChangeBackground(string assetName)
         {
             GameMain.Instance.BgMgr.ChangeBg(assetName);
@@ -45,16 +46,72 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             GameMain.Instance.MainLight.Reset();
             GameMain.Instance.CharacterMgr.ResetCharaPosAll();
 
+            ResetCamera();
+            SaveCameraInfo();
+        }
+
+        public void Deactivate()
+        {
+            GameObject.Destroy(cameraObject);
+            GameObject.Destroy(subCamera);
+        }
+
+        public void Update()
+        {
+            if (Input.GetKey(KeyCode.Q))
+            {
+                if (Input.GetKeyDown(KeyCode.S))
+                {
+                    SaveCameraInfo();
+                }
+
+                if (Input.GetKeyDown(KeyCode.A))
+                {
+                    LoadCameraInfo(cameraInfo);
+                }
+
+                if (Input.GetKeyDown(KeyCode.R))
+                {
+                    ResetCamera();
+                }
+            }
+        }
+
+        private void SaveCameraInfo()
+        {
+            this.cameraInfo = new CameraInfo(GameMain.Instance.MainCamera);
+        }
+
+        public void LoadCameraInfo(CameraInfo cameraInfo)
+        {
+            CameraMain camera = GameMain.Instance.MainCamera;
+            camera.SetTargetPos(cameraInfo.TargetPos);
+            camera.SetPos(cameraInfo.Pos);
+            camera.SetDistance(cameraInfo.Distance);
+            camera.transform.eulerAngles = cameraInfo.Angle;
+        }
+
+        private void ResetCamera()
+        {
             CameraMain cameraMain = GameMain.Instance.MainCamera;
             cameraMain.Reset(CameraMain.CameraType.Target, true);
             cameraMain.SetTargetPos(new Vector3(0f, 0.9f, 0f), true);
             cameraMain.SetDistance(3f, true);
         }
+    }
 
-        public void Deactivate()
+    public struct CameraInfo
+    {
+        public Vector3 TargetPos { get; private set; }
+        public Vector3 Pos { get; private set; }
+        public Vector3 Angle { get; private set; }
+        public float Distance { get; private set; }
+        public CameraInfo(CameraMain camera)
         {
-            GameObject.Destroy(cameraObject);
-            GameObject.Destroy(subCamera);
+            this.TargetPos = camera.GetTargetPos();
+            this.Pos = camera.GetPos();
+            this.Angle = camera.transform.eulerAngles;
+            this.Distance = camera.GetDistance();
         }
     }
 }