139 lines
3.4 KiB
C#
139 lines
3.4 KiB
C#
using Framework;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
|
|
[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;
|
|
|
|
private CameraData cameraData;
|
|
private ICameraLogic cameraLogic;
|
|
private static CameraController _instance;
|
|
|
|
#region MainLife
|
|
|
|
private void Awake()
|
|
{
|
|
_instance = this;
|
|
cameraData = gameObject.AddComponent<CameraData>();
|
|
cameraData.InitializeCamera();
|
|
cameraLogic = CameraLogicFactory.CreateCameraLogic(cameraData);
|
|
|
|
if (cameraLogic == null)
|
|
{
|
|
Debug.LogError("Failed to create camera logic through factory");
|
|
}
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
if (Application.isPlaying)
|
|
{
|
|
//InputManager.Instance.OnFingerMove += OnFingerMove2;
|
|
EventManager.Instance.Register<PointerEventData>(EventManager.EventName.Level_OnDrag, _OnDragMove);
|
|
EventManager.Instance.Register<PointerEventData>(EventManager.EventName.Level_OnEndDrag, _OnEndDrag);
|
|
InputManager.Instance.OnFingersMove += _OnFingersMove;
|
|
}
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
if (Application.isPlaying)
|
|
{
|
|
EventManager.Instance.Unregister<PointerEventData>(EventManager.EventName.Level_OnDrag, _OnDragMove);
|
|
EventManager.Instance.Unregister<PointerEventData>(EventManager.EventName.Level_OnEndDrag, _OnEndDrag);
|
|
if (InputManager.Instance == null) return;
|
|
InputManager.Instance.OnFingersMove -= _OnFingersMove;
|
|
}
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (_instance == this)
|
|
{
|
|
_instance = null;
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (cameraLogic != null)
|
|
{
|
|
cameraLogic.Update();
|
|
}
|
|
}
|
|
|
|
private void _OnFingersMove(float delta)
|
|
{
|
|
cameraLogic?.OnFingersMove(delta);
|
|
}
|
|
|
|
private void _OnEndDrag(PointerEventData pointerData)
|
|
{
|
|
cameraLogic?.OnEndDrag(pointerData);
|
|
}
|
|
|
|
private void _OnDragMove(PointerEventData pointerData)
|
|
{
|
|
cameraLogic?.OnDragMove(pointerData);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 接口
|
|
|
|
public void KeepCenter(Vector3 centerPos)
|
|
{
|
|
cameraLogic?.KeepCenter(centerPos);
|
|
}
|
|
|
|
public void CampKeepCenter(Vector3 centerPos)
|
|
{
|
|
cameraLogic?.CampKeepCenter(centerPos);
|
|
}
|
|
|
|
public void InitializeCameraPosition(Vector3 targetPosition, MapData.CameraInfo cameraInfo = null)
|
|
{
|
|
cameraLogic?.InitializeCameraPosition(targetPosition, cameraInfo);
|
|
}
|
|
|
|
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
|
|
} |