OldBlueWater/BlueWater/Assets/02.Scripts/GameManager.cs

175 lines
5.8 KiB
C#
Raw Normal View History

2023-08-08 07:08:41 +00:00
using System.Collections.Generic;
2023-08-11 16:21:26 +00:00
using Sirenix.OdinInspector;
2023-08-08 07:08:41 +00:00
using UnityEngine;
2023-10-05 04:11:46 +00:00
using UnityEngine.InputSystem;
2023-08-08 07:08:41 +00:00
2023-08-31 06:46:13 +00:00
// ReSharper disable once CheckNamespace
namespace BlueWaterProject
2023-08-08 07:08:41 +00:00
{
2023-09-20 09:06:45 +00:00
[DefaultExecutionOrder(-1)]
2023-08-31 06:46:13 +00:00
public class GameManager : Singleton<GameManager>
{
// 섬 안의 플레이어 모드 선택
[field: Title("InIsland Data")]
[field: SerializeField] public GlobalValue.InIslandPlayerMode IslandPlayerMode { get; private set; }
2023-10-17 07:31:10 +00:00
[field: Required("Viking Prefab을 넣어주세요.")]
[field: SerializeField] public GameObject InIslandPlayerPrefab { get; private set; }
[field: SerializeField] public List<Crewmate> CrewmatePrefabList { get; private set; }
[field: SerializeField] public List<Crewmate> CurrentCrewmateList { get; set; }
public IInIslandPlayer CurrentInIslandPlayer { get; set; }
// Player
[field: Title("Player")]
[field: SerializeField] public ShipPlayer ShipPlayer { get; private set; }
[field: SerializeField] public InShipPlayer InShipPlayer { get; private set; }
2023-08-11 16:21:26 +00:00
// Game Data
[Title("Game Data")]
2023-08-31 06:46:13 +00:00
[Range(0f, 1f)]
[SerializeField] private float slowSpeed = 0.1f;
2023-10-05 04:11:46 +00:00
private const string IN_ISLAND_PLAYER_NAME = "InIslandPlayer";
2023-10-06 05:41:16 +00:00
// Game State
[field: Title("Game State")]
2023-10-06 05:41:16 +00:00
[field: SerializeField] public bool IsInShipMode { get; set; }
[field: SerializeField] public bool IsDredgeMode { get; set; }
[field: SerializeField] public bool IsTakeAim { get; set; }
2023-10-20 01:26:57 +00:00
[field: SerializeField] public bool IsShipDeckMode { get; set; }
2023-10-23 03:12:13 +00:00
[field: SerializeField] public bool IsConversation { get; set; }
2023-10-24 02:29:50 +00:00
[field: SerializeField] public bool IsInteraction { get; set; }
[field: SerializeField] public GlobalValue.PlayerMode CurrentPlayerMode { get; set; }
2023-08-31 06:46:13 +00:00
private void Init()
{
2023-10-23 03:12:13 +00:00
ShipPlayer = FindAnyObjectByType<ShipPlayer>();
InShipPlayer = FindAnyObjectByType<InShipPlayer>();
2023-08-31 06:46:13 +00:00
}
protected override void OnAwake()
{
Init();
}
2023-08-31 06:46:13 +00:00
private void Start()
{
Cursor.lockState = CursorLockMode.Confined;
}
2023-10-06 05:41:16 +00:00
2023-08-31 06:46:13 +00:00
public void SlowSpeedMode()
{
Time.timeScale = slowSpeed;
Time.fixedDeltaTime = 0.02f * Time.timeScale;
}
2023-08-31 06:46:13 +00:00
public void DefaultSpeedMode()
{
Time.timeScale = 1f;
Time.fixedDeltaTime = 0.02f;
}
2023-10-06 05:41:16 +00:00
public void SetCurrentInIslandPlayer(IInIslandPlayer inIslandPlayer)
{
PlayerInput currentPlayerInput;
if (CurrentInIslandPlayer != null)
{
currentPlayerInput = CurrentInIslandPlayer.Transform.GetComponent<PlayerInput>();
if (currentPlayerInput != null)
{
currentPlayerInput.enabled = false;
}
}
CurrentInIslandPlayer = inIslandPlayer;
InIslandCamera.Inst.SetTarget(inIslandPlayer.Transform);
currentPlayerInput = CurrentInIslandPlayer.Transform.GetComponent<PlayerInput>();
if (currentPlayerInput != null)
{
currentPlayerInput.enabled = true;
}
}
#region Player Mode State switch
2023-10-06 05:41:16 +00:00
public void SwitchDredgeMode(bool isOn)
{
if (isOn)
{
SwitchTakeAim(false);
SwitchInShipMode(false);
SwitchShipDeckMode(false);
CameraManager.Inst.CamDredgeMode();
2023-10-06 05:41:16 +00:00
IsDredgeMode = true;
CurrentPlayerMode = GlobalValue.PlayerMode.DREDGE;
2023-10-06 05:41:16 +00:00
}
else if (IsDredgeMode)
{
IsDredgeMode = false;
}
}
public void SwitchShipDeckMode(bool isOn)
2023-10-06 05:41:16 +00:00
{
if (isOn)
{
SwitchTakeAim(false);
SwitchInShipMode(false);
2023-10-06 05:41:16 +00:00
SwitchDredgeMode(false);
CameraManager.Inst.CamShipDeckMode();
IsShipDeckMode = true;
CurrentPlayerMode = GlobalValue.PlayerMode.IN_DECK;
2023-10-06 05:41:16 +00:00
}
else if (IsShipDeckMode)
2023-10-06 05:41:16 +00:00
{
CameraManager.Inst.CamDredgeMode();
2023-10-06 05:41:16 +00:00
IsInShipMode = false;
}
}
public void SwitchTakeAim(bool isOn)
{
if (isOn)
{
SwitchInShipMode(false);
SwitchShipDeckMode(false);
2023-10-06 05:41:16 +00:00
SwitchDredgeMode(false);
CameraManager.Inst.CamTakeAim(true);
2023-10-06 05:41:16 +00:00
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
IsTakeAim = true;
CurrentPlayerMode = GlobalValue.PlayerMode.TAKE_AIM;
2023-10-06 05:41:16 +00:00
}
else if (IsTakeAim)
{
CameraManager.Inst.CamTakeAim(false);
2023-10-06 05:41:16 +00:00
Cursor.visible = true;
Cursor.lockState = CursorLockMode.Confined;
IsTakeAim = false;
}
UiManager.Inst.AimOnOff(isOn);
}
public void SwitchInShipMode(bool isOn)
{
if (isOn)
{
SwitchTakeAim(false);
SwitchShipDeckMode(false);
SwitchDredgeMode(false);
CameraManager.Inst.CamInShipMode();
IsInShipMode = true;
CurrentPlayerMode = GlobalValue.PlayerMode.IN_SHIP;
}
else if (IsInShipMode)
{
CameraManager.Inst.CamDredgeMode();
IsInShipMode = false;
}
}
2023-10-06 05:41:16 +00:00
#endregion
}
2023-08-08 07:08:41 +00:00
}