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