EnvironmentManager.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using UnityEngine;
  2. namespace COM3D2.MeidoPhotoStudio.Plugin
  3. {
  4. internal class EnvironmentManager
  5. {
  6. private GameObject cameraObject;
  7. private Camera subCamera;
  8. private GameObject bgObject;
  9. private Transform bg;
  10. private CameraInfo cameraInfo;
  11. public LightManager LightManager { get; }
  12. public PropManager PropManager { get; }
  13. public EffectManager EffectManager { get; }
  14. private bool bgVisible = true;
  15. public bool BGVisible
  16. {
  17. get => bgVisible;
  18. set
  19. {
  20. this.bgVisible = value;
  21. bgObject.SetActive(this.bgVisible);
  22. }
  23. }
  24. public EnvironmentManager()
  25. {
  26. PropManager = new PropManager();
  27. LightManager = new LightManager();
  28. EffectManager = new EffectManager();
  29. }
  30. public void Activate()
  31. {
  32. bgObject = GameObject.Find("__GameMain__/BG");
  33. bg = bgObject.transform;
  34. cameraObject = new GameObject("subCamera");
  35. subCamera = cameraObject.AddComponent<Camera>();
  36. subCamera.CopyFrom(Camera.main);
  37. subCamera.clearFlags = CameraClearFlags.Depth;
  38. subCamera.cullingMask = 256;
  39. subCamera.depth = 1f;
  40. subCamera.transform.parent = GameMain.Instance.MainCamera.transform;
  41. cameraObject.SetActive(true);
  42. bgObject.SetActive(true);
  43. GameMain.Instance.BgMgr.ChangeBg("Theater");
  44. UltimateOrbitCamera UOCamera =
  45. Utility.GetFieldValue<CameraMain, UltimateOrbitCamera>(GameMain.Instance.MainCamera, "m_UOCamera");
  46. UOCamera.enabled = true;
  47. ResetCamera();
  48. SaveCameraInfo();
  49. PropManager.Activate();
  50. LightManager.Activate();
  51. EffectManager.Activate();
  52. }
  53. public void Deactivate()
  54. {
  55. GameObject.Destroy(cameraObject);
  56. GameObject.Destroy(subCamera);
  57. PropManager.Deactivate();
  58. LightManager.Deactivate();
  59. EffectManager.Deactivate();
  60. bool isNight = GameMain.Instance.CharacterMgr.status.GetFlag("時間帯") == 3;
  61. if (isNight)
  62. {
  63. GameMain.Instance.BgMgr.ChangeBg("ShinShitsumu_ChairRot_Night");
  64. }
  65. else
  66. {
  67. GameMain.Instance.BgMgr.ChangeBg("ShinShitsumu_ChairRot");
  68. }
  69. GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Target, true);
  70. GameMain.Instance.MainCamera.SetTargetPos(new Vector3(0.5609447f, 1.380762f, -1.382336f), true);
  71. GameMain.Instance.MainCamera.SetDistance(1.6f, true);
  72. GameMain.Instance.MainCamera.SetAroundAngle(new Vector2(245.5691f, 6.273283f), true);
  73. }
  74. public void Update()
  75. {
  76. if (Input.GetKey(KeyCode.Q))
  77. {
  78. if (Input.GetKeyDown(KeyCode.S))
  79. {
  80. SaveCameraInfo();
  81. }
  82. if (Input.GetKeyDown(KeyCode.A))
  83. {
  84. LoadCameraInfo(cameraInfo);
  85. }
  86. if (Input.GetKeyDown(KeyCode.R))
  87. {
  88. ResetCamera();
  89. }
  90. }
  91. PropManager.Update();
  92. LightManager.Update();
  93. EffectManager.Update();
  94. }
  95. public void ChangeBackground(string assetName, bool creative = false)
  96. {
  97. if (creative)
  98. {
  99. GameMain.Instance.BgMgr.ChangeBgMyRoom(assetName);
  100. }
  101. else
  102. {
  103. GameMain.Instance.BgMgr.ChangeBg(assetName);
  104. if (assetName == "KaraokeRoom")
  105. {
  106. bg.transform.position = bgObject.transform.position;
  107. bg.transform.localPosition = new Vector3(1f, 0f, 4f);
  108. bg.transform.localRotation = Quaternion.Euler(new Vector3(0f, 90f, 0f));
  109. }
  110. }
  111. }
  112. private void SaveCameraInfo()
  113. {
  114. this.cameraInfo = new CameraInfo(GameMain.Instance.MainCamera);
  115. }
  116. public void LoadCameraInfo(CameraInfo cameraInfo)
  117. {
  118. CameraMain camera = GameMain.Instance.MainCamera;
  119. camera.SetTargetPos(cameraInfo.TargetPos);
  120. camera.SetPos(cameraInfo.Pos);
  121. camera.SetDistance(cameraInfo.Distance);
  122. camera.transform.eulerAngles = cameraInfo.Angle;
  123. }
  124. private void ResetCamera()
  125. {
  126. CameraMain cameraMain = GameMain.Instance.MainCamera;
  127. cameraMain.Reset(CameraMain.CameraType.Target, true);
  128. cameraMain.SetTargetPos(new Vector3(0f, 0.9f, 0f), true);
  129. cameraMain.SetDistance(3f, true);
  130. }
  131. }
  132. public struct CameraInfo
  133. {
  134. public Vector3 TargetPos { get; private set; }
  135. public Vector3 Pos { get; private set; }
  136. public Vector3 Angle { get; private set; }
  137. public float Distance { get; private set; }
  138. public CameraInfo(CameraMain camera)
  139. {
  140. this.TargetPos = camera.GetTargetPos();
  141. this.Pos = camera.GetPos();
  142. this.Angle = camera.transform.eulerAngles;
  143. this.Distance = camera.GetDistance();
  144. }
  145. }
  146. }