IceHockeyMP/Assets/Scripts/PlayerInput.cs
2025-07-14 23:04:51 +05:30

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);
}
}