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