153 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			153 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 Twist")]
 | |
| public class QuickTwist : QuickBase {
 | |
| 
 | |
| 	#region Events
 | |
| 	[System.Serializable] public class OnTwistAction : UnityEvent<Gesture>{}
 | |
| 	
 | |
| 	[SerializeField] 
 | |
| 	public OnTwistAction onTwistAction;
 | |
| 	#endregion
 | |
| 
 | |
| 	#region enumeration
 | |
| 	public enum ActionTiggering {InProgress,End};
 | |
| 	public enum ActionRotationDirection {All, Clockwise, Counterclockwise};
 | |
| 	#endregion
 | |
| 
 | |
| 	#region Members
 | |
| 	public bool isGestureOnMe = false;
 | |
| 	public ActionTiggering actionTriggering;
 | |
| 	public ActionRotationDirection rotationDirection;
 | |
| 	private float axisActionValue = 0;
 | |
| 	public bool enableSimpleAction = false;
 | |
| 	#endregion
 | |
| 
 | |
| 	#region MonoBehaviour callback
 | |
| 	public QuickTwist(){
 | |
| 		quickActionName = "QuickTwist"+ GetInstanceID().ToString();
 | |
| 	}
 | |
| 
 | |
| 	public override void OnEnable(){
 | |
| 		EasyTouch.On_Twist += On_Twist;
 | |
| 		EasyTouch.On_TwistEnd += On_TwistEnd;
 | |
| 	}
 | |
| 
 | |
| 	public override void OnDisable(){
 | |
| 		UnsubscribeEvent();
 | |
| 	}
 | |
| 	
 | |
| 	void OnDestroy(){
 | |
| 		UnsubscribeEvent();
 | |
| 	}
 | |
| 	
 | |
| 	void UnsubscribeEvent(){
 | |
| 		EasyTouch.On_Twist -= On_Twist;
 | |
| 		EasyTouch.On_TwistEnd -= On_TwistEnd;
 | |
| 	}
 | |
| 	#endregion
 | |
| 
 | |
| 	#region EasyTouch event
 | |
| 	void On_Twist (Gesture gesture){
 | |
| 		
 | |
| 		if (actionTriggering == ActionTiggering.InProgress){
 | |
| 
 | |
| 			if (IsRightRotation(gesture)){
 | |
| 				DoAction( gesture);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 	
 | |
| 	void On_TwistEnd (Gesture gesture){
 | |
| 	
 | |
| 		if (actionTriggering == ActionTiggering.End){
 | |
| 			if (IsRightRotation(gesture)){
 | |
| 				DoAction( gesture);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	#endregion
 | |
| 
 | |
| 	#region Private method
 | |
| 	bool IsRightRotation(Gesture gesture){
 | |
| 
 | |
| 		axisActionValue =0;
 | |
| 		float coef = 1;
 | |
| 		if ( inverseAxisValue){
 | |
| 			coef = -1;
 | |
| 		}
 | |
| 
 | |
| 		switch (rotationDirection){
 | |
| 		case ActionRotationDirection.All:
 | |
| 			axisActionValue = gesture.twistAngle * sensibility * coef;
 | |
| 			return true;
 | |
| 
 | |
| 		case ActionRotationDirection.Clockwise:
 | |
| 			if (gesture.twistAngle<0){
 | |
| 				axisActionValue = gesture.twistAngle * sensibility* coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		case ActionRotationDirection.Counterclockwise:
 | |
| 			if (gesture.twistAngle>0){
 | |
| 				axisActionValue = gesture.twistAngle * sensibility* coef;
 | |
| 				return true;
 | |
| 			}
 | |
| 			break;
 | |
| 		}
 | |
| 
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	void DoAction(Gesture gesture){
 | |
| 
 | |
| 		if (isGestureOnMe){
 | |
| 			if ( realType == GameObjectType.UI){
 | |
| 				if (gesture.isOverGui ){
 | |
| 					if ((gesture.pickedUIElement == gameObject || gesture.pickedUIElement.transform.IsChildOf( transform))){
 | |
| 						onTwistAction.Invoke(gesture);
 | |
| 						if (enableSimpleAction){
 | |
| 							DoDirectAction( axisActionValue);
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			else{
 | |
| 
 | |
| 				if ((!enablePickOverUI && gesture.pickedUIElement == null) || enablePickOverUI){
 | |
| 					if (gesture.GetCurrentPickedObject( true) == gameObject){
 | |
| 						onTwistAction.Invoke(gesture);
 | |
| 						if (enableSimpleAction){
 | |
| 							DoDirectAction( axisActionValue);
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		else{
 | |
| 			if ((!enablePickOverUI && gesture.pickedUIElement == null) || enablePickOverUI){
 | |
| 				onTwistAction.Invoke(gesture);
 | |
| 				if (enableSimpleAction){
 | |
| 					DoDirectAction( axisActionValue);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 	#endregion
 | |
| }
 | |
| }
 |