96 lines
3.4 KiB
C#
96 lines
3.4 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|