NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/GameWrapper/Camera/CameraController.cs

120 lines
2.7 KiB
C#

using GameWrapper;
using UnityEngine;
[ExecuteAlways]
public class CameraController : MonoBehaviour
{
public static CameraController Instance => _instance;
public static CameraData Data => Instance?.cameraData;
public CameraData CameraData => cameraData;
public Camera MainCamera => cameraData?.MainCamera;
public float CameraMinSize => cameraData?.CameraMinSize ?? 0f;
public float CameraMaxSize => cameraData?.CameraMaxSize ?? 0f;
private CameraData cameraData;
private ICameraLogic cameraLogic;
private static CameraController _instance;
#region MainLife
private void Awake()
{
_instance = this;
cameraData = gameObject.AddComponent<CameraData>();
cameraLogic = CameraLogicFactory.CreateCameraLogic(cameraData);
if (cameraLogic == null)
{
Debug.LogError("Failed to create camera logic through factory");
}
}
private void OnEnable()
{
if (Application.isPlaying && cameraLogic != null)
{
cameraLogic.Initialize();
}
}
private void OnDisable()
{
if (Application.isPlaying && cameraLogic != null)
{
cameraLogic.Cleanup();
}
}
private void OnDestroy()
{
if (_instance == this)
{
_instance = null;
}
}
private void Update()
{
if (cameraLogic != null)
{
cameraLogic.Update();
}
}
#endregion
#region 接口
public void KeepCenter(Vector3 centerPos)
{
cameraLogic?.KeepCenter(centerPos);
}
public void CampKeepCenter(Vector3 centerPos)
{
cameraLogic?.CampKeepCenter(centerPos);
}
public void InitializeCameraPosition(Vector3 targetPosition, object cameraInfo = null)
{
// 使用 CameraInfoData.FromMapDataCameraInfo 方法转换 MapData.CameraInfo 为 CameraInfoData
var cameraInfoData = CameraInfoData.FromMapDataCameraInfo(cameraInfo);
cameraLogic?.InitializeCameraPosition(targetPosition, cameraInfoData);
}
public void AdjustSelf()
{
cameraLogic?.AdjustSelf();
}
public void SetCameraFOVSize(float initialFOV)
{
cameraLogic?.SetCameraFOVSize(initialFOV);
}
public void RecordStartPos()
{
cameraLogic?.RecordStartPos();
}
public void ResetToStartPos(float during = 0.3f)
{
cameraLogic?.ResetToStartPos(during);
}
#endregion
#region 静态访问属性
public static bool FingerMoveEnable
{
get => Data?.FingerMoveEnable ?? true;
set
{
if (Data != null)
Data.FingerMoveEnable = value;
}
}
#endregion
}