using System.Collections.Generic; using BlueWaterProject; using Sirenix.OdinInspector; using Unity.VisualScripting; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.Serialization; // ReSharper disable once CheckNamespace namespace BlueWaterProject { [DefaultExecutionOrder(-1)] public class GameManager : Singleton { [field: Title("Player")] public ShipPlayer ShipPlayer { get; private set; } [field: Required("BlueWater Player Input Action을 넣어주세요.")] [field: SerializeField] public InputActionAsset PlayerAction { get; private set; } public InShipPlayer InShipPlayer { get; private set; } public InIslandPlayer InIslandPlayer { get; set; } [field: Required("Viking Prefab을 넣어주세요.")] [field: SerializeField] public GameObject InIslandPlayerPrefab { get; set; } [field: SerializeField] public List CrewmatePrefabList { get; set; } [Range(0f, 1f)] [SerializeField] private float slowSpeed = 0.1f; private const string IN_ISLAND_PLAYER_NAME = "InIslandPlayer"; [Title("Game State")] [field: SerializeField] public bool IsInShipMode { get; set; } [field: SerializeField] public bool IsDredgeMode { get; set; } [field: SerializeField] public bool IsTakeAim { get; set; } [field: SerializeField] public bool IsAssaultMode { get; set; } [field: SerializeField] public bool IsShipDeckMode { get; set; } [field: SerializeField] public bool IsConversation { get; set; } [field: SerializeField] public GlobalValue.PlayerMode CurrentPlayerMode { get; set; } private void Init() { ShipPlayer = FindAnyObjectByType(); InShipPlayer = FindAnyObjectByType(); } protected override void OnAwake() { Init(); } private void Start() { Cursor.lockState = CursorLockMode.Confined; } public void SlowSpeedMode() { Time.timeScale = slowSpeed; Time.fixedDeltaTime = 0.02f * Time.timeScale; } public void DefaultSpeedMode() { Time.timeScale = 1f; Time.fixedDeltaTime = 0.02f; } #region Player Mode State switch public void SwitchDredgeMode(bool isOn) { if (isOn) { SwitchTakeAim(false); SwitchAssaultMode(false); SwitchInShipMode(false); CameraManager.Inst.CamDredgeMode(); IsDredgeMode = true; CurrentPlayerMode = GlobalValue.PlayerMode.DREDGE; } else if (IsDredgeMode) { IsDredgeMode = false; } } public void SwitchInShipMode(bool isOn) { if (isOn) { SwitchTakeAim(false); SwitchAssaultMode(false); SwitchDredgeMode(false); CameraManager.Inst.CamShipDeckMode(); IsInShipMode = true; CurrentPlayerMode = GlobalValue.PlayerMode.IN_SHIP; } else if (IsInShipMode) { CameraManager.Inst.CamDredgeMode(); IsInShipMode = false; } } public void SwitchAssaultMode(bool isOn) { if (isOn) { SwitchTakeAim(false); SwitchInShipMode(false); SwitchDredgeMode(false); CameraManager.Inst.CamAssaultMode(); UiManager.Inst.CardLayoutGroupAnimator.Play(); IsAssaultMode = true; CurrentPlayerMode = GlobalValue.PlayerMode.ASSAULT; } else if (IsAssaultMode) { CameraManager.Inst.CamDredgeMode(); UiManager.Inst.CardLayoutGroupAnimator.Reverse(); IsAssaultMode = false; } } public void SwitchTakeAim(bool isOn) { if (isOn) { SwitchAssaultMode(false); SwitchInShipMode(false); SwitchDredgeMode(false); CameraManager.Inst.CamTakeAim(true); Cursor.visible = false; Cursor.lockState = CursorLockMode.Locked; IsTakeAim = true; CurrentPlayerMode = GlobalValue.PlayerMode.TAKE_AIM; } else if (IsTakeAim) { CameraManager.Inst.CamTakeAim(false); Cursor.visible = true; Cursor.lockState = CursorLockMode.Confined; IsTakeAim = false; } UiManager.Inst.AimOnOff(isOn); } #endregion } }