120 lines
2.7 KiB
C#
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
|
||
|
|
}
|