140 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			3.2 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 Pinch")]
 | |
| public class QuickPinch : QuickBase {
 | |
| 
 | |
| 	#region Events
 | |
| 	[System.Serializable] public class OnPinchAction : UnityEvent<Gesture>{}
 | |
| 	
 | |
| 	[SerializeField] 
 | |
| 	public OnPinchAction onPinchAction;
 | |
| 	#endregion
 | |
| 	
 | |
| 	#region enumeration
 | |
| 	public enum ActionTiggering {InProgress,End};
 | |
| 	public enum ActionPinchDirection {All, PinchIn, PinchOut};
 | |
| 	#endregion
 | |
| 	
 | |
| 	#region Members
 | |
| 	public bool isGestureOnMe = false;
 | |
| 	public ActionTiggering actionTriggering;
 | |
| 	public ActionPinchDirection pinchDirection;
 | |
| 	private float axisActionValue = 0;
 | |
| 	public bool enableSimpleAction = false;
 | |
| 	#endregion
 | |
| 	
 | |
| 	#region MonoBehaviour callback
 | |
| 	public QuickPinch(){
 | |
| 		quickActionName = "QuickPinch"+ GetInstanceID().ToString();
 | |
| 	}
 | |
| 	
 | |
| 	public override void OnEnable(){
 | |
| 		EasyTouch.On_Pinch += On_Pinch;
 | |
| 		EasyTouch.On_PinchIn += On_PinchIn;
 | |
| 		EasyTouch.On_PinchOut += On_PinchOut;
 | |
| 		EasyTouch.On_PinchEnd += On_PichEnd;
 | |
| 	}
 | |
| 	
 | |
| 	public override void OnDisable(){
 | |
| 		UnsubscribeEvent();
 | |
| 	}
 | |
| 	
 | |
| 	void OnDestroy(){
 | |
| 		UnsubscribeEvent();
 | |
| 	}
 | |
| 	
 | |
| 	void UnsubscribeEvent(){
 | |
| 		EasyTouch.On_Pinch -= On_Pinch;
 | |
| 		EasyTouch.On_PinchIn -= On_PinchIn;
 | |
| 		EasyTouch.On_PinchOut -= On_PinchOut;
 | |
| 		EasyTouch.On_PinchEnd -= On_PichEnd;
 | |
| 	}
 | |
| 	#endregion
 | |
| 	
 | |
| 	#region EasyTouch event
 | |
| 	void On_Pinch (Gesture gesture){
 | |
| 		
 | |
| 		if (actionTriggering == ActionTiggering.InProgress && pinchDirection == ActionPinchDirection.All){
 | |
| 			DoAction( gesture);
 | |
| 		}
 | |
| 		
 | |
| 	}
 | |
| 
 | |
| 	void On_PinchIn (Gesture gesture){
 | |
| 		
 | |
| 		if (actionTriggering == ActionTiggering.InProgress & pinchDirection == ActionPinchDirection.PinchIn){
 | |
| 			DoAction( gesture);
 | |
| 		}
 | |
| 		
 | |
| 	}
 | |
| 
 | |
| 	void On_PinchOut (Gesture gesture){
 | |
| 		
 | |
| 		if (actionTriggering == ActionTiggering.InProgress & pinchDirection == ActionPinchDirection.PinchOut){
 | |
| 			DoAction( gesture);
 | |
| 		}
 | |
| 		
 | |
| 	}
 | |
| 
 | |
| 	void On_PichEnd (Gesture gesture){
 | |
| 
 | |
| 		if (actionTriggering == ActionTiggering.End){
 | |
| 			DoAction( gesture);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	#endregion
 | |
| 	
 | |
| 	#region Private method
 | |
| 	void DoAction(Gesture gesture){
 | |
| 
 | |
| 		axisActionValue = gesture.deltaPinch * sensibility * Time.deltaTime;
 | |
| 
 | |
| 		if (isGestureOnMe){
 | |
| 			if ( realType == GameObjectType.UI){
 | |
| 				if (gesture.isOverGui ){
 | |
| 					if ((gesture.pickedUIElement == gameObject || gesture.pickedUIElement.transform.IsChildOf( transform))){
 | |
| 						onPinchAction.Invoke(gesture);
 | |
| 						if (enableSimpleAction){
 | |
| 							DoDirectAction( axisActionValue);
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			else{
 | |
| 				if ((!enablePickOverUI && gesture.pickedUIElement == null) || enablePickOverUI){
 | |
| 					if (gesture.GetCurrentPickedObject(true) == gameObject){
 | |
| 						onPinchAction.Invoke(gesture);
 | |
| 						if (enableSimpleAction){
 | |
| 							DoDirectAction( axisActionValue);
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		else{
 | |
| 			if ((!enablePickOverUI && gesture.pickedUIElement == null) || enablePickOverUI){
 | |
| 				onPinchAction.Invoke(gesture);
 | |
| 				if (enableSimpleAction){
 | |
| 					DoDirectAction( axisActionValue);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 	}
 | |
| 	#endregion
 | |
| }
 | |
| }
 |