143 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			143 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | /*********************************************** | ||
|  | 				EasyTouch V | ||
|  | 	Copyright © 2014-2015 The Hedgehog Team | ||
|  |     http://www.thehedgehogteam.com/Forum/ | ||
|  | 		 | ||
|  | 	  The.Hedgehog.Team@gmail.com | ||
|  | 		 | ||
|  | **********************************************/ | ||
|  | using UnityEngine; | ||
|  | using System.Collections; | ||
|  | using UnityEngine.Events; | ||
|  | using UnityEngine.EventSystems; | ||
|  | 
 | ||
|  | namespace HedgehogTeam.EasyTouch{ | ||
|  | [AddComponentMenu("EasyTouch/Quick Enter-Over-Exit")] | ||
|  | public class QuickEnterOverExist : QuickBase { | ||
|  | 
 | ||
|  | 	#region Event | ||
|  | 	[System.Serializable] public class OnTouchEnter : UnityEvent<Gesture>{} | ||
|  | 	[System.Serializable] public class OnTouchOver : UnityEvent<Gesture>{} | ||
|  | 	[System.Serializable] public class OnTouchExit : UnityEvent<Gesture>{} | ||
|  | 
 | ||
|  | 	[SerializeField]  | ||
|  | 	public OnTouchEnter onTouchEnter; | ||
|  | 	[SerializeField]  | ||
|  | 	public OnTouchOver onTouchOver; | ||
|  | 	[SerializeField]  | ||
|  | 	public OnTouchExit onTouchExit; | ||
|  | 	#endregion | ||
|  | 
 | ||
|  | 	#region Members | ||
|  | 	private bool[] fingerOver = new bool[100]; | ||
|  | 	#endregion | ||
|  | 
 | ||
|  | 	#region MonoBehaviour callback | ||
|  | 	public QuickEnterOverExist(){ | ||
|  | 		quickActionName = "QuickEnterOverExit"+ GetInstanceID().ToString(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	void Awake(){ | ||
|  | 
 | ||
|  | 		for (int i=0;i<100;i++){ | ||
|  | 			fingerOver[i] = false; | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public override void OnEnable(){ | ||
|  | 		base.OnEnable(); | ||
|  | 		EasyTouch.On_TouchDown += On_TouchDown; | ||
|  | 		EasyTouch.On_TouchUp += On_TouchUp; | ||
|  | 	} | ||
|  | 	 | ||
|  | 	public override void OnDisable(){ | ||
|  | 		base.OnDisable(); | ||
|  | 		UnsubscribeEvent(); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	void OnDestroy(){ | ||
|  | 		UnsubscribeEvent(); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	void UnsubscribeEvent(){ | ||
|  | 		EasyTouch.On_TouchDown -= On_TouchDown; | ||
|  | 		EasyTouch.On_TouchUp -= On_TouchUp; | ||
|  | 	} | ||
|  | 	#endregion | ||
|  | 
 | ||
|  | 	#region EasyTouch Event | ||
|  | 	void On_TouchDown (Gesture gesture){ | ||
|  | 
 | ||
|  | 		if (realType != GameObjectType.UI){ | ||
|  | 			if ((!enablePickOverUI && gesture.GetCurrentFirstPickedUIElement() == null) || enablePickOverUI){ | ||
|  | 
 | ||
|  | 				if ( gesture.GetCurrentPickedObject()== gameObject){ | ||
|  | 					if (!fingerOver[gesture.fingerIndex] && ((!isOnTouch && !isMultiTouch) || isMultiTouch)){ | ||
|  | 						fingerOver[gesture.fingerIndex] = true; | ||
|  | 						onTouchEnter.Invoke( gesture); | ||
|  | 						isOnTouch = true; | ||
|  | 					} | ||
|  | 					else if (fingerOver[gesture.fingerIndex]){ | ||
|  | 						onTouchOver.Invoke(gesture); | ||
|  | 					} | ||
|  | 				} | ||
|  | 				else{ | ||
|  | 					if (fingerOver[gesture.fingerIndex]){ | ||
|  | 						fingerOver[gesture.fingerIndex] = false; | ||
|  | 						onTouchExit.Invoke(gesture); | ||
|  | 						if (!isMultiTouch){ | ||
|  | 							isOnTouch = false; | ||
|  | 						} | ||
|  | 					} | ||
|  | 				} | ||
|  | 			} | ||
|  | 			else{ | ||
|  | 				if ( gesture.GetCurrentPickedObject()== gameObject && (!enablePickOverUI && gesture.GetCurrentFirstPickedUIElement() != null)){ | ||
|  | 					if (fingerOver[gesture.fingerIndex]){ | ||
|  | 						fingerOver[gesture.fingerIndex] = false; | ||
|  | 						onTouchExit.Invoke(gesture); | ||
|  | 						if (!isMultiTouch){ | ||
|  | 							isOnTouch = false; | ||
|  | 						} | ||
|  | 					} | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 		else{ | ||
|  | 			if ( gesture.GetCurrentFirstPickedUIElement()== gameObject){ | ||
|  | 				if (!fingerOver[gesture.fingerIndex] && ((!isOnTouch && !isMultiTouch) || isMultiTouch)){ | ||
|  | 					fingerOver[gesture.fingerIndex] = true; | ||
|  | 					onTouchEnter.Invoke( gesture); | ||
|  | 					isOnTouch = true; | ||
|  | 				} | ||
|  | 				else if (fingerOver[gesture.fingerIndex]){ | ||
|  | 					onTouchOver.Invoke(gesture); | ||
|  | 				} | ||
|  | 			} | ||
|  | 			else{ | ||
|  | 				if (fingerOver[gesture.fingerIndex]){ | ||
|  | 					fingerOver[gesture.fingerIndex] = false; | ||
|  | 					onTouchExit.Invoke(gesture); | ||
|  | 					if (!isMultiTouch){ | ||
|  | 						isOnTouch = false; | ||
|  | 					} | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 		 | ||
|  | 	} | ||
|  | 	 | ||
|  | 	void On_TouchUp (Gesture gesture){ | ||
|  | 
 | ||
|  | 		if (fingerOver[gesture.fingerIndex]){ | ||
|  | 			fingerOver[gesture.fingerIndex] = false; | ||
|  | 			onTouchExit.Invoke(gesture); | ||
|  | 			if (!isMultiTouch){ | ||
|  | 				isOnTouch = false; | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 	#endregion | ||
|  | } | ||
|  | } |