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