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
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								}
							 |