using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class PlayerInput : MonoBehaviour { [Header("Refs")] public bool isBlue; public Camera targetCam; public EventTrigger eventTrigger; public RectTransform rectTransform; [Header("Settings")] public Vector2 PlayAreaSize; public Vector2 PlayAreaPosition; public Vector2 relativePos; public Vector3 worldSpace; [HideInInspector] public Vector2 left,right,top,bottom; public float offsetMultiplier = 1.2f; //at 0.89 its at 1 void Start() { eventTrigger = GetComponent(); EventTrigger.Entry entry = new EventTrigger.Entry(); entry.eventID = EventTriggerType.PointerDown; entry.callback.AddListener((data) => { OnPointerDown((PointerEventData)data); }); eventTrigger.triggers.Add(entry); EventTrigger.Entry entry3 = new EventTrigger.Entry(); entry3.eventID = EventTriggerType.Drag; entry3.callback.AddListener((data) => { OnMove((PointerEventData)data); }); eventTrigger.triggers.Add(entry3); EventTrigger.Entry entry5 = new EventTrigger.Entry(); entry5.eventID = EventTriggerType.PointerEnter; entry5.callback.AddListener((data) => { OnPointerEnter((PointerEventData)data); }); eventTrigger.triggers.Add(entry5); EventTrigger.Entry entry6 = new EventTrigger.Entry(); entry6.eventID = EventTriggerType.PointerExit; entry6.callback.AddListener((data) => { OnPointerExit((PointerEventData)data); }); eventTrigger.triggers.Add(entry6); } Vector3 startMousePos; bool isDown; bool isIn; void OnPointerDown(PointerEventData data) { Debug.Log("OnPointerDown"); UpdatePosition(data); isDown=true; } void GetBorders(){ left = new Vector2(rectTransform.position.x - rectTransform.rect.width/2,rectTransform.position.y); right = new Vector2(rectTransform.position.x + rectTransform.rect.width/2,rectTransform.position.y); top = new Vector2(rectTransform.position.x,rectTransform.position.y + rectTransform.rect.height/2); bottom = new Vector2(rectTransform.position.x,rectTransform.position.y - rectTransform.rect.height/2); } Vector2 GetRelativePosition(Vector2 pos){ GetBorders(); float xMid = left.x + (right.x - left.x)/2; float yMid = bottom.y + (top.y - bottom.y)/2; float x = (pos.x - xMid) / (right.x - left.x); float y = (pos.y - yMid) / (top.y - bottom.y); return new Vector2(x,y); } void OnMove(PointerEventData data) { if(isIn){ UpdatePosition(data); } } void UpdatePosition(PointerEventData data){ if(!isIn){return;} relativePos = GetRelativePosition(data.position) * offsetMultiplier; worldSpace = new Vector2(relativePos.x * PlayAreaSize.x + PlayAreaPosition.x,relativePos.y * PlayAreaSize.y + PlayAreaPosition.y); } void OnPointerEnter(PointerEventData data) { Debug.Log("OnPointerEnter"); isIn=true; } void OnPointerExit(PointerEventData data) { Debug.Log("OnPointerExit"); isIn=false; } void OnDrawGizmos(){ Gizmos.color = isBlue ? Color.blue : Color.red; Gizmos.DrawWireCube(PlayAreaPosition,PlayAreaSize); } }