using System.Collections.Generic; using BlueWaterProject; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.InputSystem; // ReSharper disable once CheckNamespace namespace BlueWaterProject { [DefaultExecutionOrder(-1)] public class GameManager : Singleton { [field: Title("Controller")] public CameraController CameraController { get; private set; } public ShipPlayer shipPlayer; public List boats = new(10); [Required("BlueWater Player Input Action을 넣어주세요.")] [field: SerializeField] public InputActionAsset PlayerAction { get; private set; } [Required("Viking Prefab을 넣어주세요.")] [field: SerializeField] public GameObject InIslandPlayer { get; private 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; } private void Init() { CameraController = FindAnyObjectByType(); shipPlayer = FindAnyObjectByType(); } protected override void OnAwake() { Init(); } private void Start() { Cursor.lockState = CursorLockMode.Confined; } public void SpawnInIslandPlayer(Vector3 spawnPosition) { var islandPlayer = Instantiate(InIslandPlayer, spawnPosition, Quaternion.identity); islandPlayer.name = IN_ISLAND_PLAYER_NAME; var playerInput = islandPlayer.GetComponent(); if (playerInput == null) { playerInput = islandPlayer.AddComponent(); } playerInput.actions = PlayerAction; var desiredActionMap = playerInput.actions.FindActionMap(IN_ISLAND_PLAYER_NAME); if (desiredActionMap == null) { print($"Action map named '{IN_ISLAND_PLAYER_NAME}' not found in player actions!"); return; } playerInput.defaultActionMap = IN_ISLAND_PLAYER_NAME; playerInput.SwitchCurrentActionMap(IN_ISLAND_PLAYER_NAME); islandPlayer.AddComponent(); } public void SlowSpeedMode() { Time.timeScale = slowSpeed; Time.fixedDeltaTime = 0.02f * Time.timeScale; } public void DefaultSpeedMode() { Time.timeScale = 1f; Time.fixedDeltaTime = 0.02f; } #region Game State switch public void SwitchDredgeMode(bool isOn) { if (isOn) { SwitchTakeAim(false); SwitchAssaultMode(false); SwitchInShipMode(false); CameraController.CamDredgeMode(); IsDredgeMode = true; } else if (IsDredgeMode) { IsDredgeMode = false; } } public void SwitchInShipMode(bool isOn) { if (isOn) { SwitchTakeAim(false); SwitchAssaultMode(false); SwitchDredgeMode(false); CameraController.CamInShipMode(); IsInShipMode = true; } else if (IsInShipMode) { CameraController.CamDredgeMode(); IsInShipMode = false; } } public void SwitchAssaultMode(bool isOn) { if (isOn) { SwitchTakeAim(false); SwitchInShipMode(false); SwitchDredgeMode(false); CameraController.CamAssaultMode(); UiManager.Inst.CardLayoutGroupAnimator.Play(); IsAssaultMode = true; } else if (IsAssaultMode) { CameraController.CamDredgeMode(); UiManager.Inst.CardLayoutGroupAnimator.Reverse(); IsAssaultMode = false; } } public void SwitchTakeAim(bool isOn) { if (isOn) { SwitchAssaultMode(false); SwitchInShipMode(false); SwitchDredgeMode(false); CameraController.CamTakeAim(true); Cursor.visible = false; Cursor.lockState = CursorLockMode.Locked; IsTakeAim = true; } else if (IsTakeAim) { CameraController.CamTakeAim(false); Cursor.visible = true; Cursor.lockState = CursorLockMode.Confined; IsTakeAim = false; } UiManager.Inst.AimOnOff(isOn); } #endregion } }