snakes_mp/Assets/Scripts/ButtonSet.cs
2025-04-14 11:36:17 +05:30

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