109 lines
3.4 KiB
C#
109 lines
3.4 KiB
C#
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>();
|
|
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);
|
|
}
|
|
|
|
}
|