123 lines
2.9 KiB
C#
123 lines
2.9 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
|
|
public class ButtonSet : MonoBehaviour
|
|
{
|
|
public const float buttonHoldInterval = 0.25f;
|
|
|
|
public static Action OnLeft, OnRight, OnUp, OnDown;
|
|
public static bool DownPressed;
|
|
public static bool LeftPressed;
|
|
public static bool RightPressed;
|
|
public static bool UpPressed;
|
|
public EventTrigger btnUp,btnLeft,btnRight,btnDown;
|
|
|
|
|
|
#region Input Handle
|
|
void Start(){
|
|
btnLeft.AddListener(EventTriggerType.PointerDown, OnLeftDown);
|
|
btnLeft.AddListener(EventTriggerType.PointerUp, OnLeftUp);
|
|
|
|
btnRight.AddListener(EventTriggerType.PointerDown, OnRightDown);
|
|
btnRight.AddListener(EventTriggerType.PointerUp, OnRightUp);
|
|
|
|
btnDown.AddListener(EventTriggerType.PointerDown, OnDownDown);
|
|
btnDown.AddListener(EventTriggerType.PointerUp, OnDownUp);
|
|
|
|
btnUp.AddListener(EventTriggerType.PointerDown, OnUpDown);
|
|
btnUp.AddListener(EventTriggerType.PointerUp, OnUpUp);
|
|
|
|
}
|
|
|
|
void OnLeftDown(BaseEventData e){
|
|
LeftPressed=true;
|
|
leftTimer=buttonHoldInterval;
|
|
OnLeft?.Invoke();
|
|
}
|
|
|
|
void OnLeftUp(BaseEventData e){
|
|
LeftPressed=false;
|
|
}
|
|
|
|
void OnRightDown(BaseEventData e){
|
|
RightPressed=true;
|
|
rightTimer=buttonHoldInterval;
|
|
OnRight?.Invoke();
|
|
}
|
|
|
|
void OnRightUp(BaseEventData e){
|
|
RightPressed=false;
|
|
}
|
|
|
|
void OnDownDown(BaseEventData e){
|
|
DownPressed=true;
|
|
downTimer = buttonHoldInterval;
|
|
OnDown?.Invoke();
|
|
}
|
|
|
|
void OnDownUp(BaseEventData e){
|
|
DownPressed=false;
|
|
}
|
|
|
|
void OnUpUp(BaseEventData e){
|
|
UpPressed = false;
|
|
}
|
|
|
|
|
|
void OnUpDown(BaseEventData e){
|
|
UpPressed = true;
|
|
upTimer = buttonHoldInterval;
|
|
OnUp?.Invoke();
|
|
}
|
|
#endregion
|
|
|
|
float leftTimer,rightTimer, upTimer,downTimer=0;
|
|
void Update()
|
|
{
|
|
if(LeftPressed){
|
|
if(leftTimer > 0){
|
|
leftTimer-=Time.deltaTime;
|
|
}else{
|
|
leftTimer=buttonHoldInterval;
|
|
OnLeft?.Invoke();
|
|
}
|
|
}else{
|
|
leftTimer=0;
|
|
}
|
|
|
|
if(RightPressed){
|
|
if(rightTimer > 0){
|
|
rightTimer-=Time.deltaTime;
|
|
}else{
|
|
rightTimer=buttonHoldInterval;
|
|
OnRight?.Invoke();
|
|
}
|
|
}else{
|
|
rightTimer=0;
|
|
}
|
|
|
|
if(UpPressed){
|
|
if(upTimer > 0){
|
|
upTimer -= Time.deltaTime;
|
|
}else{
|
|
upTimer = buttonHoldInterval;
|
|
OnUp?.Invoke();
|
|
}
|
|
}
|
|
|
|
if(DownPressed){
|
|
if(downTimer > 0){
|
|
downTimer -= Time.deltaTime;
|
|
}else{
|
|
downTimer = buttonHoldInterval;
|
|
OnDown?.Invoke();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|