222 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			5.6 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 Swipe")]
 | |
| public class QuickSwipe : QuickBase {
 | |
| 
 | |
| 	#region Events
 | |
| 	[System.Serializable] public class OnSwipeAction : UnityEvent<Gesture>{}
 | |
| 
 | |
| 	[SerializeField] 
 | |
| 	public OnSwipeAction onSwipeAction;
 | |
| 	#endregion
 | |
| 
 | |
| 	#region enumeration
 | |
| 	public enum ActionTriggering {InProgress,End}
 | |
| 	public enum SwipeDirection {Vertical, Horizontal, DiagonalRight,DiagonalLeft,Up,UpRight, Right,DownRight,Down,DownLeft, Left,UpLeft,All};
 | |
| 	#endregion
 | |
| 
 | |
| 	#region Members
 | |
| 	public bool allowSwipeStartOverMe = true;
 | |
| 	public ActionTriggering actionTriggering;
 | |
| 	public SwipeDirection swipeDirection = SwipeDirection.All;
 | |
| 	private float axisActionValue = 0;
 | |
| 	public bool enableSimpleAction = false;
 | |
| 	#endregion
 | |
| 
 | |
| 	#region MonoBehaviour callback
 | |
| 	public QuickSwipe(){
 | |
| 		quickActionName = "QuickSwipe" + GetInstanceID().ToString();
 | |
| 	}
 | |
| 
 | |
| 	public override void OnEnable(){
 | |
| 		base.OnEnable();
 | |
| 		EasyTouch.On_Drag += On_Drag;
 | |
| 		EasyTouch.On_Swipe += On_Swipe;
 | |
| 		EasyTouch.On_DragEnd += On_DragEnd;
 | |
| 		EasyTouch.On_SwipeEnd += On_SwipeEnd;
 | |
| 	}
 | |
| 
 | |
| 	public override void OnDisable(){
 | |
| 		base.OnDisable();
 | |
| 		UnsubscribeEvent();
 | |
| 	}
 | |
| 	
 | |
| 	void OnDestroy(){
 | |
| 		UnsubscribeEvent();
 | |
| 	}
 | |
| 	
 | |
| 	void UnsubscribeEvent(){
 | |
| 		EasyTouch.On_Swipe -= On_Swipe;
 | |
| 		EasyTouch.On_SwipeEnd -= On_SwipeEnd;
 | |
| 	}
 | |
| 	#endregion
 | |
| 
 | |
| 	#region EasyTouch Event
 | |
| 	void On_Swipe (Gesture gesture){
 | |
| 
 | |
| 		if (gesture.touchCount ==1 && ((gesture.pickedObject != gameObject && !allowSwipeStartOverMe) || allowSwipeStartOverMe)){
 | |
| 			fingerIndex = gesture.fingerIndex;
 | |
| 			if (actionTriggering == ActionTriggering.InProgress){
 | |
| 				if (isRightDirection(gesture)){
 | |
| 					onSwipeAction.Invoke( gesture);
 | |
| 					if (enableSimpleAction){
 | |
| 						DoAction(gesture);
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	void On_SwipeEnd (Gesture gesture){
 | |
| 			if (actionTriggering == ActionTriggering.End && isRightDirection(gesture) ){
 | |
| 			onSwipeAction.Invoke( gesture);
 | |
| 			if (enableSimpleAction){
 | |
| 				DoAction(gesture);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if (fingerIndex ==  gesture.fingerIndex){
 | |
| 			fingerIndex =-1;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	void On_DragEnd (Gesture gesture){
 | |
| 		if (gesture.pickedObject == gameObject && allowSwipeStartOverMe){
 | |
| 			On_SwipeEnd( gesture);
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	void On_Drag (Gesture gesture){
 | |
| 		if (gesture.pickedObject == gameObject && allowSwipeStartOverMe){
 | |
| 			On_Swipe( gesture);
 | |
| 		}
 | |
| 	}
 | |
| 	#endregion
 | |
| 
 | |
| 	#region Private methods
 | |
| 	bool isRightDirection(Gesture gesture){
 | |
| 		float coef = -1;
 | |
| 		if ( inverseAxisValue){
 | |
| 			coef = 1;
 | |
| 		}
 | |
| 
 | |
| 		axisActionValue = 0;
 | |
| 		switch (swipeDirection){
 | |
| 		case SwipeDirection.All:
 | |
| 			axisActionValue = gesture.deltaPosition.magnitude*coef;
 | |
| 			return true;
 | |
| 		case SwipeDirection.Horizontal:
 | |
| 			if (gesture.swipe == EasyTouch.SwipeDirection.Left || gesture.swipe == EasyTouch.SwipeDirection.Right){
 | |
| 				axisActionValue = gesture.deltaPosition.x *coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		case SwipeDirection.Vertical:
 | |
| 			if (gesture.swipe == EasyTouch.SwipeDirection.Up || gesture.swipe == EasyTouch.SwipeDirection.Down){
 | |
| 				axisActionValue = gesture.deltaPosition.y*coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		case SwipeDirection.DiagonalLeft:
 | |
| 			if (gesture.swipe == EasyTouch.SwipeDirection.UpLeft || gesture.swipe == EasyTouch.SwipeDirection.DownRight){
 | |
| 				axisActionValue = gesture.deltaPosition.magnitude*coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		case SwipeDirection.DiagonalRight:
 | |
| 			if (gesture.swipe == EasyTouch.SwipeDirection.UpRight || gesture.swipe == EasyTouch.SwipeDirection.DownLeft){
 | |
| 				axisActionValue = gesture.deltaPosition.magnitude*coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 
 | |
| 			break;
 | |
| 		case SwipeDirection.Left:
 | |
| 			if (gesture.swipe == EasyTouch.SwipeDirection.Left){
 | |
| 				axisActionValue = gesture.deltaPosition.x*coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		case SwipeDirection.Right:
 | |
| 			if (gesture.swipe == EasyTouch.SwipeDirection.Right){
 | |
| 				axisActionValue = gesture.deltaPosition.x*coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		case SwipeDirection.DownLeft:
 | |
| 			if (gesture.swipe == EasyTouch.SwipeDirection.DownLeft){
 | |
| 				axisActionValue = gesture.deltaPosition.magnitude*coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		case SwipeDirection.DownRight:
 | |
| 			if (gesture.swipe == EasyTouch.SwipeDirection.DownRight){
 | |
| 
 | |
| 				axisActionValue = gesture.deltaPosition.magnitude*coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		case SwipeDirection.UpLeft:
 | |
| 			if (gesture.swipe == EasyTouch.SwipeDirection.UpLeft){
 | |
| 
 | |
| 				axisActionValue = gesture.deltaPosition.magnitude*coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		case SwipeDirection.UpRight:
 | |
| 			if (gesture.swipe == EasyTouch.SwipeDirection.UpRight){
 | |
| 				axisActionValue = gesture.deltaPosition.magnitude*coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		case SwipeDirection.Up:
 | |
| 			if (gesture.swipe == EasyTouch.SwipeDirection.Up){
 | |
| 				axisActionValue = gesture.deltaPosition.y*coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		case SwipeDirection.Down:
 | |
| 			if (gesture.swipe == EasyTouch.SwipeDirection.Down){
 | |
| 				axisActionValue = gesture.deltaPosition.y*coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		}
 | |
| 
 | |
| 		axisActionValue = 0;
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	void DoAction(Gesture gesture){
 | |
| 
 | |
| 		switch (directAction){
 | |
| 		case DirectAction.Rotate:
 | |
| 		case DirectAction.RotateLocal:
 | |
| 			axisActionValue *= sensibility;
 | |
| 			break;
 | |
| 		case DirectAction.Translate:
 | |
| 		case DirectAction.TranslateLocal:
 | |
| 		case DirectAction.Scale:
 | |
| 			axisActionValue /= Screen.dpi;
 | |
| 			axisActionValue *= sensibility;
 | |
| 			break;
 | |
| 		}
 | |
| 
 | |
| 		DoDirectAction( axisActionValue);
 | |
| 	
 | |
| 	}
 | |
| 	#endregion
 | |
| }
 | |
| }
 |