using System; using System.Collections; using System.Collections.Generic; using BlueWater.Utility; using Sirenix.OdinInspector; using Unity.Cinemachine; using UnityEngine; using UnityEngine.Serialization; namespace BlueWater { public enum TycoonCameraType { Base = 0, Storage } public class TycoonCameraManager : Singleton { // Components #region Components [Title("카메라")] [field: SerializeField] public Camera MainCamera { get; private set; } [SerializeField] private Transform cameraLocation; [field: SerializeField] public CinemachineCamera BaseCamera { get; private set; } [field: SerializeField] public CinemachineCamera StorageCamera { get; private set; } // Variables private CinemachineBrain _cinemachineBrain; private List _cinemachineCameras = new(); #endregion // Unity events #region Unity events protected override void OnAwake() { Initialize(); } private void Start() { if (!GameManager.Instance) return; GameManager.Instance.OnInstantiatePlayer += SetFollow; } private void OnDestroy() { if (!GameManager.Instance) return; GameManager.Instance.OnInstantiatePlayer -= SetFollow; } #endregion // Initialize methods #region Initialize methods [Button("셋팅 초기화")] private void Initialize() { cameraLocation = GameObject.Find("CinemachineCameras").transform; MainCamera = GetComponent(); _cinemachineBrain = GetComponent(); BaseCamera = cameraLocation.Find("BaseCamera").GetComponent(); StorageCamera = cameraLocation.Find("StorageCamera").GetComponent(); _cinemachineCameras.Add(BaseCamera); _cinemachineCameras.Add(StorageCamera); SetMainCamera(TycoonCameraType.Base); } #endregion // Methods #region Methods public void SetFollow(Transform target) { BaseCamera.Follow = target; } // public void SetFollowAndLookAt(Transform target) // { // BaseCombatCamera.Follow = target; // BaseCombatCamera.LookAt = target; // } public void SetMainCamera(TycoonCameraType tycoonCameraType) { var newMainCamera = tycoonCameraType switch { TycoonCameraType.Base => BaseCamera, TycoonCameraType.Storage => StorageCamera, _ => throw new ArgumentOutOfRangeException(nameof(tycoonCameraType), tycoonCameraType, null) }; foreach (var element in _cinemachineCameras) { element.Priority = 0; } //_cinemachineBrain.DefaultBlend.Style = styles; newMainCamera.Priority = 1; } #endregion } }