mergemilitary/Assets/ThirdPlugins/EasyTouchBundle/EasyTouch/Plugins/Components/QuickBase.cs

259 lines
6.0 KiB
C#
Raw Normal View History

2022-05-23 13:39:59 +00:00
/***********************************************
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
}
}