CapersProject/Assets/02.Scripts/TycoonCameraManager.cs
2024-09-24 19:35:49 +09:00

122 lines
3.3 KiB
C#

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<TycoonCameraManager>
{
// 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<CinemachineCamera> _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<Camera>();
_cinemachineBrain = GetComponent<CinemachineBrain>();
BaseCamera = cameraLocation.Find("BaseCamera").GetComponent<CinemachineCamera>();
StorageCamera = cameraLocation.Find("StorageCamera").GetComponent<CinemachineCamera>();
_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
}
}