using Unity.Cinemachine; using UnityEngine; using UnityEngine.EventSystems; namespace BrewMonster { public class CameraController : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler { public static CameraController Instance; [SerializeField]private CinemachineCamera _cinemachineCamera; [SerializeField]private CinemachineOrbitalFollow orbital; private Vector2 currentPos; private bool fingerDown = false; Vector2 delta = Vector2.zero; public float minSwipeDistance = 10f; public float speedX = 1f; public float speedY = 1f; public CinemachineOrbitalFollow Orbital { get => orbital;} void OnEnable() { Instance = this; #if UNITY_EDITOR speedX = 500; #endif } //public void OnDrag(PointerEventData eventData) //{ // delta = eventData.position - currentPos; // if (delta.magnitude >= minSwipeDistance) // { // orbital.HorizontalAxis.Value += delta.x * speedX * Time.deltaTime; // //orbital.HorizontalAxis.Value = Mathf.Clamp(orbital.HorizontalAxis.Value, -360f, 360f); // orbital.VerticalAxis.Value -= delta.y * speedY * Time.deltaTime; // orbital.VerticalAxis.Value = Mathf.Clamp(orbital.VerticalAxis.Value, -360f, 360f); // } // currentPos = eventData.position; //} public void OnDrag(PointerEventData eventData) { Vector2 newDelta = eventData.position - currentPos; float velocity = newDelta.magnitude / Time.deltaTime; // tốc độ vuốt if (newDelta.magnitude >= minSwipeDistance) { float factor = velocity * 0.001f; // scale lại cho hợp lý orbital.HorizontalAxis.Value += newDelta.x * speedX * factor; orbital.VerticalAxis.Value -= newDelta.y * speedY * factor; orbital.VerticalAxis.Value = Mathf.Clamp(orbital.VerticalAxis.Value, -360f, 360f); } currentPos = eventData.position; } public void OnPointerDown(PointerEventData eventData) { currentPos = eventData.position; fingerDown = true; } public void OnPointerUp(PointerEventData eventData) { fingerDown = false; } private void Update() { //todo: should not always update if (_cinemachineCamera.Follow == null && CECGameRun.Instance.GetHostPlayer() != null) { if(CECGameRun.Instance.GetHostPlayer().PointCam != null) { _cinemachineCamera.Follow = CECGameRun.Instance.GetHostPlayer().PointCam; _cinemachineCamera.ForceCameraPosition(CECGameRun.Instance.GetHostPlayer().PointCam.position, Quaternion.identity); orbital.HorizontalAxis.Value = 208; orbital.VerticalAxis.Value = -268; } else { _cinemachineCamera.Follow = CECGameRun.Instance.GetHostPlayer().transform; _cinemachineCamera.ForceCameraPosition(CECGameRun.Instance.GetHostPlayer().ObjectPosition, Quaternion.identity); orbital.HorizontalAxis.Value = 208; orbital.VerticalAxis.Value = -268; } } } } }