259 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			259 lines
		
	
	
		
			6.0 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;
 | |
| 
 | |
| namespace HedgehogTeam.EasyTouch{
 | |
| public class QuickBase : MonoBehaviour {
 | |
| 
 | |
| 	#region enumeration
 | |
| 	protected enum GameObjectType { Auto,Obj_3D,Obj_2D,UI};
 | |
| 
 | |
| 	public enum DirectAction {None,Rotate, RotateLocal,Translate, TranslateLocal, Scale};
 | |
| 	public enum AffectedAxesAction {X,Y,Z,XY,XZ,YZ,XYZ};
 | |
| 	#endregion
 | |
| 
 | |
| 	#region Members
 | |
| 	public string quickActionName;
 | |
| 
 | |
| 	// Touch management
 | |
| 	public bool isMultiTouch = false;
 | |
| 	public bool is2Finger = false;
 | |
| 	public bool isOnTouch=false;
 | |
| 	public bool enablePickOverUI = false;
 | |
| 	public bool resetPhysic = false;
 | |
| 
 | |
| 	// simple Action
 | |
| 	public DirectAction directAction;
 | |
| 	public AffectedAxesAction axesAction;
 | |
| 	public float sensibility = 1;
 | |
| 	public CharacterController directCharacterController;
 | |
| 	public bool inverseAxisValue = false;
 | |
| 
 | |
| 		
 | |
| 	protected Rigidbody cachedRigidBody;
 | |
| 	protected bool isKinematic;
 | |
| 	
 | |
| 	protected Rigidbody2D cachedRigidBody2D;
 | |
| 	protected bool isKinematic2D;
 | |
| 
 | |
| 	// internal management
 | |
| 	protected GameObjectType realType;
 | |
| 	protected int fingerIndex =-1;
 | |
| 	#endregion
 | |
| 
 | |
| 	#region Monobehavior Callback
 | |
| 	void Awake(){
 | |
| 		cachedRigidBody = GetComponent<Rigidbody>();
 | |
| 		if (cachedRigidBody){
 | |
| 			isKinematic = cachedRigidBody.isKinematic;
 | |
| 		}
 | |
| 		
 | |
| 		cachedRigidBody2D = GetComponent<Rigidbody2D>();
 | |
| 		if (cachedRigidBody2D){
 | |
| 			isKinematic2D = cachedRigidBody2D.isKinematic;
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	public virtual void Start(){
 | |
| 
 | |
| 		EasyTouch.SetEnableAutoSelect( true);
 | |
| 
 | |
| 		realType = GameObjectType.Obj_3D;
 | |
| 
 | |
| 		if (GetComponent<Collider>()){
 | |
| 			realType = GameObjectType.Obj_3D;
 | |
| 		}
 | |
| 		else if (GetComponent<Collider2D>()){
 | |
| 			realType = GameObjectType.Obj_2D;
 | |
| 		}
 | |
| 		else if (GetComponent<CanvasRenderer>()){
 | |
| 			realType = GameObjectType.UI;
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		switch (realType){
 | |
| 
 | |
| 		case GameObjectType.Obj_3D:
 | |
| 			LayerMask mask = EasyTouch.Get3DPickableLayer();
 | |
| 			mask = mask | 1<<gameObject.layer;
 | |
| 			EasyTouch.Set3DPickableLayer( mask);
 | |
| 			break;
 | |
| 			//2D
 | |
| 		case GameObjectType.Obj_2D:
 | |
| 			EasyTouch.SetEnable2DCollider( true);
 | |
| 			mask = EasyTouch.Get2DPickableLayer();
 | |
| 			mask = mask | 1<<gameObject.layer;
 | |
| 			EasyTouch.Set2DPickableLayer( mask);
 | |
| 			break;
 | |
| 			// UI
 | |
| 		case GameObjectType.UI:
 | |
| 			EasyTouch.instance.enableUIMode = true;
 | |
| 			EasyTouch.SetUICompatibily( false);
 | |
| 			break;
 | |
| 		}
 | |
| 		
 | |
| 		if (enablePickOverUI){
 | |
| 			EasyTouch.instance.enableUIMode = true;
 | |
| 			EasyTouch.SetUICompatibily( false);
 | |
| 		}
 | |
| 		
 | |
| 	}
 | |
| 
 | |
| 	public virtual void OnEnable(){
 | |
| 		//QuickTouchManager.instance.RegisterQuickAction( this);
 | |
| 	}
 | |
| 
 | |
| 	public virtual void OnDisable(){
 | |
| 		//if (QuickTouchManager._instance){
 | |
| 		//	QuickTouchManager.instance.UnregisterQuickAction( this);
 | |
| 		//}
 | |
| 	}
 | |
| 	 #endregion                      
 | |
| 
 | |
| 	#region Protected Methods
 | |
| 	protected Vector3 GetInfluencedAxis(){
 | |
| 		
 | |
| 		Vector3 axis = Vector3.zero;
 | |
| 		
 | |
| 		switch(axesAction){
 | |
| 		case AffectedAxesAction.X:
 | |
| 			axis = new Vector3(1,0,0);
 | |
| 			break;
 | |
| 		case AffectedAxesAction.Y:
 | |
| 			axis = new Vector3(0,1,0);
 | |
| 			break;
 | |
| 		case AffectedAxesAction.Z:
 | |
| 			axis = new Vector3(0,0,1);
 | |
| 			break;
 | |
| 		case AffectedAxesAction.XY:
 | |
| 			axis = new Vector3(1,1,0);
 | |
| 			break;
 | |
| 		case AffectedAxesAction.XYZ:
 | |
| 			axis = new Vector3(1,1,1);
 | |
| 			break;
 | |
| 		case AffectedAxesAction.XZ:
 | |
| 			axis = new Vector3(1,0,1);
 | |
| 			break;
 | |
| 		case AffectedAxesAction.YZ:
 | |
| 			axis = new Vector3(0,1,1);
 | |
| 			break;
 | |
| 		}	
 | |
| 		
 | |
| 		return axis;
 | |
| 	}
 | |
| 
 | |
| 	protected void DoDirectAction(float value){
 | |
| 		
 | |
| 	
 | |
| 		Vector3 localAxis = GetInfluencedAxis();
 | |
| 		
 | |
| 		switch (  directAction){
 | |
| 		// Rotate
 | |
| 		case DirectAction.Rotate:
 | |
| 			transform.Rotate( localAxis *  value, Space.World);
 | |
| 			break;
 | |
| 		// Rotate Local
 | |
| 		case DirectAction.RotateLocal:
 | |
| 			transform.Rotate( localAxis *  value,Space.Self);
 | |
| 			break;
 | |
| 		// Translate
 | |
| 		case DirectAction.Translate:
 | |
| 			if ( directCharacterController==null){
 | |
| 				transform.Translate(localAxis *  value,Space.World);
 | |
| 			}
 | |
| 			else{
 | |
| 				Vector3 direction = localAxis *  value;
 | |
| 				directCharacterController.Move( direction  );
 | |
| 			}
 | |
| 			break;
 | |
| 			
 | |
| 		// Translate local
 | |
| 		case DirectAction.TranslateLocal:
 | |
| 			if ( directCharacterController==null){
 | |
| 				transform.Translate(localAxis *  value,Space.Self);
 | |
| 			}
 | |
| 			else{
 | |
| 				Vector3 direction =  directCharacterController.transform.TransformDirection(localAxis) *  value;
 | |
| 				directCharacterController.Move( direction );
 | |
| 			}
 | |
| 			break;	
 | |
| 		// Scale
 | |
| 		case DirectAction.Scale:
 | |
| 			transform.localScale +=  localAxis *  value;
 | |
| 			break;
 | |
| 
 | |
| 		/*
 | |
| 		// Force
 | |
| 		case DirectAction.Force:
 | |
| 			if (directRigidBody!=null){
 | |
| 				directRigidBody.AddForce( localAxis * axisValue * speed);
 | |
| 			}
 | |
| 			break;
 | |
| 		// Relative force
 | |
| 		case DirectAction.RelativeForce:
 | |
| 			if (directRigidBody!=null){
 | |
| 				directRigidBody.AddRelativeForce( localAxis * axisValue * speed);
 | |
| 			}
 | |
| 			break;
 | |
| 		// Torque
 | |
| 		case DirectAction.Torque:
 | |
| 			if (directRigidBody!=null){
 | |
| 				directRigidBody.AddTorque(localAxis * axisValue * speed);
 | |
| 			}
 | |
| 
 | |
| 			break;
 | |
| 		// Relative torque
 | |
| 		case DirectAction.RelativeTorque:
 | |
| 			if (directRigidBody!=null){
 | |
| 				directRigidBody.AddRelativeTorque(localAxis * axisValue * speed);
 | |
| 			}
 | |
| 			break;*/
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 	#endregion
 | |
| 
 | |
| 	#region Public Methods
 | |
| 	public void EnabledQuickComponent(string quickActionName){
 | |
| 
 | |
| 		QuickBase[] quickBases = GetComponents<QuickBase>();
 | |
| 		foreach( QuickBase qb in quickBases){
 | |
| 			if (qb.quickActionName == quickActionName){
 | |
| 				qb.enabled = true;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	public void DisabledQuickComponent(string quickActionName){
 | |
| 
 | |
| 		QuickBase[] quickBases = GetComponents<QuickBase>();
 | |
| 		foreach( QuickBase qb in quickBases){
 | |
| 			if (qb.quickActionName == quickActionName){
 | |
| 				qb.enabled = false;
 | |
| 			}
 | |
| 		}	
 | |
| 			
 | |
| 	}
 | |
| 
 | |
| 	public void DisabledAllSwipeExcepted(string quickActionName){
 | |
| 
 | |
| 		QuickSwipe[] swipes = FindObjectsOfType(typeof(QuickSwipe)) as QuickSwipe[];
 | |
| 		foreach( QuickSwipe swipe in swipes){
 | |
| 			if (swipe.quickActionName != quickActionName || ( swipe.quickActionName == quickActionName && swipe.gameObject != gameObject)){
 | |
| 				swipe.enabled = false;
 | |
| 			}
 | |
| 		}
 | |
| 	}	
 | |
| 	#endregion
 | |
| }
 | |
| }
 |