129 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			129 lines
		
	
	
		
			3.3 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 Touch")] | ||
|  | public class QuickTouch : QuickBase { | ||
|  | 
 | ||
|  | 	#region Events | ||
|  | 	[System.Serializable] public class OnTouch : UnityEvent<Gesture>{} | ||
|  | 	[System.Serializable] public class OnTouchNotOverMe : UnityEvent<Gesture>{} | ||
|  | 
 | ||
|  | 	[SerializeField]  | ||
|  | 	public OnTouch onTouch; | ||
|  | 	public OnTouchNotOverMe onTouchNotOverMe; | ||
|  | 	#endregion | ||
|  | 
 | ||
|  | 	#region Enumeration | ||
|  | 	public enum ActionTriggering {Start,Down,Up}; | ||
|  | 	#endregion | ||
|  | 
 | ||
|  | 	#region Members | ||
|  | 	public ActionTriggering actionTriggering; | ||
|  | 	private Gesture currentGesture; | ||
|  | 	#endregion | ||
|  | 
 | ||
|  | 	#region Monobehavior CallBack | ||
|  | 	public QuickTouch(){ | ||
|  | 		quickActionName = "QuickTouch"+ GetInstanceID().ToString(); | ||
|  | 	} | ||
|  | 	#endregion		 | ||
|  | 
 | ||
|  | 	void Update(){ | ||
|  | 		currentGesture = EasyTouch.current; | ||
|  | 		 | ||
|  | 		if (!is2Finger){ | ||
|  | 			 | ||
|  | 			// GetIndex at touch start | ||
|  | 			if (currentGesture.type == EasyTouch.EvtType.On_TouchStart && fingerIndex == -1 && IsOverMe(currentGesture)){ | ||
|  | 				fingerIndex = currentGesture.fingerIndex; | ||
|  | 			} | ||
|  | 			 | ||
|  | 			// start | ||
|  | 			if (currentGesture.type == EasyTouch.EvtType.On_TouchStart && actionTriggering == ActionTriggering.Start){ | ||
|  | 				if (currentGesture.fingerIndex == fingerIndex || isMultiTouch){ | ||
|  | 					DoAction( currentGesture); | ||
|  | 				} | ||
|  | 			} | ||
|  | 			 | ||
|  | 			// Down | ||
|  | 			if (currentGesture.type == EasyTouch.EvtType.On_TouchDown  && actionTriggering == ActionTriggering.Down){ | ||
|  | 				if (currentGesture.fingerIndex == fingerIndex || isMultiTouch){ | ||
|  | 					DoAction( currentGesture); | ||
|  | 				} | ||
|  | 			} | ||
|  | 			 | ||
|  | 			// Up | ||
|  | 			if (currentGesture.type == EasyTouch.EvtType.On_TouchUp){ | ||
|  | 			    if ( actionTriggering == ActionTriggering.Up){ | ||
|  | 					if (currentGesture.fingerIndex == fingerIndex || isMultiTouch){ | ||
|  | 						if (IsOverMe(currentGesture)){ | ||
|  | 							onTouch.Invoke( currentGesture); | ||
|  | 						} | ||
|  | 						else{ | ||
|  | 							onTouchNotOverMe.Invoke( currentGesture); | ||
|  | 						} | ||
|  | 					} | ||
|  | 				} | ||
|  | 				if (currentGesture.fingerIndex == fingerIndex){ fingerIndex =-1;} | ||
|  | 			} | ||
|  | 		} | ||
|  | 		else{ | ||
|  | 			if (currentGesture.type == EasyTouch.EvtType.On_TouchStart2Fingers && actionTriggering == ActionTriggering.Start){ | ||
|  | 				DoAction( currentGesture); | ||
|  | 			} | ||
|  | 			 | ||
|  | 			if (currentGesture.type == EasyTouch.EvtType.On_TouchDown2Fingers && actionTriggering == ActionTriggering.Down){ | ||
|  | 				DoAction( currentGesture); | ||
|  | 			} | ||
|  | 			 | ||
|  | 			if (currentGesture.type == EasyTouch.EvtType.On_TouchUp2Fingers && actionTriggering == ActionTriggering.Up){ | ||
|  | 				DoAction( currentGesture); | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	#region Private method | ||
|  | 	void DoAction(Gesture gesture){ | ||
|  | 		if (IsOverMe(gesture)){ | ||
|  | 			onTouch.Invoke( gesture); | ||
|  | 		} | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	private bool IsOverMe(Gesture gesture){ | ||
|  | 		bool returnValue = false; | ||
|  | 
 | ||
|  | 		if ( realType == GameObjectType.UI){ | ||
|  | 			if (gesture.isOverGui ){ | ||
|  | 				if ((gesture.pickedUIElement == gameObject || gesture.pickedUIElement.transform.IsChildOf( transform))){ | ||
|  | 					returnValue = true; | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 		else{ | ||
|  | 			if ((!enablePickOverUI && gesture.pickedUIElement == null) || enablePickOverUI){ | ||
|  | 				if (EasyTouch.GetGameObjectAt( gesture.position,is2Finger) == gameObject){ | ||
|  | 
 | ||
|  | 					returnValue = true; | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return returnValue; | ||
|  | 	} | ||
|  | 	#endregion | ||
|  | } | ||
|  | } | ||
|  | 	 |