126 lines
3.6 KiB
C#
126 lines
3.6 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.Serialization;
|
|
|
|
namespace ZXL.Scripts.UI
|
|
{
|
|
public class ZMouse : MonoBehaviour
|
|
{
|
|
private static ZMouse instance;
|
|
public static ZMouse Instance => instance;
|
|
|
|
public bool isMouseDown0 = false;
|
|
public bool isMouseUp0 = false;
|
|
public bool isMouseDown1 = false;
|
|
public bool isMouseUp1 = false;
|
|
public bool isDragging0 = false;
|
|
public GameObject downData;
|
|
public GameObject upData;
|
|
public Vector2 startPosition;
|
|
public Vector2 endPosition;
|
|
public Vector2 delta;
|
|
public Vector2 deltaUI;
|
|
|
|
public Action<object> MouseDown0;
|
|
public Action<object, object> MouseUp0;
|
|
public Action<object, object> MouseDragEnd0;
|
|
|
|
public Action<object> MouseDown1;
|
|
public Action<object, object> MouseUp1;
|
|
public Action<object, object> MouseDragEnd1;
|
|
|
|
private void Awake()
|
|
{
|
|
instance = this;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
delta = Input.mousePosition;
|
|
|
|
Vector2 screenpos = Input.mousePosition;
|
|
deltaUI.x = screenpos.x - (Screen.width / 2);
|
|
deltaUI.y = screenpos.y - (Screen.height / 2);
|
|
|
|
if (Input.GetMouseButtonDown(0))
|
|
{
|
|
isMouseDown0 = true;
|
|
isMouseUp0 = false;
|
|
var obj = GetObj();
|
|
downData = obj;
|
|
MouseDown0?.Invoke(downData);
|
|
startPosition = Input.mousePosition;
|
|
}
|
|
else if (Input.GetMouseButtonUp(0))
|
|
{
|
|
isMouseDown0 = false;
|
|
isMouseUp0 = true;
|
|
var obj = GetObj();
|
|
upData = obj;
|
|
MouseUp0?.Invoke(downData, upData);
|
|
if (isDragging0)
|
|
MouseDragEnd0?.Invoke(downData, upData);
|
|
|
|
endPosition = Input.mousePosition;
|
|
}
|
|
else if (Input.GetMouseButton(0))
|
|
{
|
|
isMouseDown0 = true;
|
|
isMouseUp0 = false;
|
|
if (delta != startPosition)
|
|
{
|
|
isDragging0 = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
downData = null;
|
|
upData = null;
|
|
isMouseDown0 = false;
|
|
isMouseUp0 = false;
|
|
isDragging0 = false;
|
|
}
|
|
|
|
if (Input.GetMouseButtonDown(1))
|
|
{
|
|
isMouseDown1 = true;
|
|
isMouseUp1 = false;
|
|
var obj = GetObj();
|
|
downData = obj;
|
|
MouseDown1?.Invoke(obj);
|
|
}
|
|
else if (Input.GetMouseButtonUp(1))
|
|
{
|
|
isMouseDown1 = false;
|
|
isMouseUp1 = true;
|
|
var obj = GetObj();
|
|
upData = obj;
|
|
MouseUp1?.Invoke(downData, upData);
|
|
}
|
|
else if (Input.GetMouseButton(1))
|
|
{
|
|
isMouseDown1 = true;
|
|
isMouseUp1 = false;
|
|
}
|
|
else
|
|
{
|
|
isMouseDown1 = false;
|
|
isMouseUp1 = false;
|
|
}
|
|
}
|
|
|
|
GameObject GetObj()
|
|
{
|
|
Ray2D ray = new Ray2D(Input.mousePosition, Vector2.right);
|
|
var hit2D = Physics2D.Raycast(ray.origin, ray.direction);
|
|
if (hit2D.collider != null)
|
|
{
|
|
UnityEngine.Debug.Log(hit2D.collider.gameObject.name);
|
|
return hit2D.collider.gameObject;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
} |