You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.2 KiB
C#
65 lines
2.2 KiB
C#
6 months ago
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.Events;
|
||
|
|
||
|
namespace Autohand{
|
||
|
[HelpURL("https://app.gitbook.com/s/5zKO0EvOjzUDeT2aiFk3/auto-hand/extras/hand-touch-trigger")]
|
||
|
public class HandTouchEvent : MonoBehaviour{
|
||
|
[Header("For Solid Collision")]
|
||
|
[Tooltip("Whether or not first hand to enter should take ownership and be the only one to call events")]
|
||
|
public bool oneHanded = true;
|
||
|
public HandType handType = HandType.both;
|
||
|
|
||
|
[Header("Events")]
|
||
|
public UnityHandEvent HandStartTouch;
|
||
|
public UnityHandEvent HandStopTouch;
|
||
|
|
||
|
public HandEvent HandStartTouchEvent;
|
||
|
public HandEvent HandStopTouchEvent;
|
||
|
|
||
|
private void OnEnable() {
|
||
|
hands = new List<Hand>();
|
||
|
HandStartTouchEvent += (hand) => HandStartTouch?.Invoke(hand);
|
||
|
HandStopTouchEvent += (hand) => HandStopTouch?.Invoke(hand);
|
||
|
}
|
||
|
|
||
|
private void OnDisable() {
|
||
|
HandStartTouchEvent -= (hand) => HandStartTouch?.Invoke(hand);
|
||
|
HandStopTouchEvent -= (hand) => HandStopTouch?.Invoke(hand);
|
||
|
}
|
||
|
|
||
|
List<Hand> hands;
|
||
|
|
||
|
public void Touch(Hand hand) {
|
||
|
if (enabled == false || handType == HandType.none || (hand.left && handType == HandType.right) || (!hand.left && handType == HandType.left))
|
||
|
return;
|
||
|
|
||
|
if(!hands.Contains(hand)) {
|
||
|
if(oneHanded && hands.Count == 0)
|
||
|
HandStartTouchEvent?.Invoke(hand);
|
||
|
else
|
||
|
HandStartTouchEvent?.Invoke(hand);
|
||
|
|
||
|
hands.Add(hand);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void Untouch(Hand hand) {
|
||
|
if (enabled == false || handType == HandType.none || (hand.left && handType == HandType.right) || (!hand.left && handType == HandType.left))
|
||
|
return;
|
||
|
|
||
|
if(hands.Contains(hand)) {
|
||
|
if(oneHanded && hands[0] == hand){
|
||
|
HandStopTouchEvent?.Invoke(hand);
|
||
|
}
|
||
|
else if(!oneHanded){
|
||
|
HandStopTouchEvent?.Invoke(hand);
|
||
|
}
|
||
|
|
||
|
hands.Remove(hand);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|