222 lines
5.6 KiB
C#
222 lines
5.6 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 Swipe")]
|
|
public class QuickSwipe : QuickBase {
|
|
|
|
#region Events
|
|
[System.Serializable] public class OnSwipeAction : UnityEvent<Gesture>{}
|
|
|
|
[SerializeField]
|
|
public OnSwipeAction onSwipeAction;
|
|
#endregion
|
|
|
|
#region enumeration
|
|
public enum ActionTriggering {InProgress,End}
|
|
public enum SwipeDirection {Vertical, Horizontal, DiagonalRight,DiagonalLeft,Up,UpRight, Right,DownRight,Down,DownLeft, Left,UpLeft,All};
|
|
#endregion
|
|
|
|
#region Members
|
|
public bool allowSwipeStartOverMe = true;
|
|
public ActionTriggering actionTriggering;
|
|
public SwipeDirection swipeDirection = SwipeDirection.All;
|
|
private float axisActionValue = 0;
|
|
public bool enableSimpleAction = false;
|
|
#endregion
|
|
|
|
#region MonoBehaviour callback
|
|
public QuickSwipe(){
|
|
quickActionName = "QuickSwipe" + GetInstanceID().ToString();
|
|
}
|
|
|
|
public override void OnEnable(){
|
|
base.OnEnable();
|
|
EasyTouch.On_Drag += On_Drag;
|
|
EasyTouch.On_Swipe += On_Swipe;
|
|
EasyTouch.On_DragEnd += On_DragEnd;
|
|
EasyTouch.On_SwipeEnd += On_SwipeEnd;
|
|
}
|
|
|
|
public override void OnDisable(){
|
|
base.OnDisable();
|
|
UnsubscribeEvent();
|
|
}
|
|
|
|
void OnDestroy(){
|
|
UnsubscribeEvent();
|
|
}
|
|
|
|
void UnsubscribeEvent(){
|
|
EasyTouch.On_Swipe -= On_Swipe;
|
|
EasyTouch.On_SwipeEnd -= On_SwipeEnd;
|
|
}
|
|
#endregion
|
|
|
|
#region EasyTouch Event
|
|
void On_Swipe (Gesture gesture){
|
|
|
|
if (gesture.touchCount ==1 && ((gesture.pickedObject != gameObject && !allowSwipeStartOverMe) || allowSwipeStartOverMe)){
|
|
fingerIndex = gesture.fingerIndex;
|
|
if (actionTriggering == ActionTriggering.InProgress){
|
|
if (isRightDirection(gesture)){
|
|
onSwipeAction.Invoke( gesture);
|
|
if (enableSimpleAction){
|
|
DoAction(gesture);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void On_SwipeEnd (Gesture gesture){
|
|
if (actionTriggering == ActionTriggering.End && isRightDirection(gesture) ){
|
|
onSwipeAction.Invoke( gesture);
|
|
if (enableSimpleAction){
|
|
DoAction(gesture);
|
|
}
|
|
}
|
|
|
|
if (fingerIndex == gesture.fingerIndex){
|
|
fingerIndex =-1;
|
|
}
|
|
}
|
|
|
|
void On_DragEnd (Gesture gesture){
|
|
if (gesture.pickedObject == gameObject && allowSwipeStartOverMe){
|
|
On_SwipeEnd( gesture);
|
|
}
|
|
}
|
|
|
|
void On_Drag (Gesture gesture){
|
|
if (gesture.pickedObject == gameObject && allowSwipeStartOverMe){
|
|
On_Swipe( gesture);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Private methods
|
|
bool isRightDirection(Gesture gesture){
|
|
float coef = -1;
|
|
if ( inverseAxisValue){
|
|
coef = 1;
|
|
}
|
|
|
|
axisActionValue = 0;
|
|
switch (swipeDirection){
|
|
case SwipeDirection.All:
|
|
axisActionValue = gesture.deltaPosition.magnitude*coef;
|
|
return true;
|
|
case SwipeDirection.Horizontal:
|
|
if (gesture.swipe == EasyTouch.SwipeDirection.Left || gesture.swipe == EasyTouch.SwipeDirection.Right){
|
|
axisActionValue = gesture.deltaPosition.x *coef;
|
|
return true;
|
|
}
|
|
break;
|
|
case SwipeDirection.Vertical:
|
|
if (gesture.swipe == EasyTouch.SwipeDirection.Up || gesture.swipe == EasyTouch.SwipeDirection.Down){
|
|
axisActionValue = gesture.deltaPosition.y*coef;
|
|
return true;
|
|
}
|
|
break;
|
|
case SwipeDirection.DiagonalLeft:
|
|
if (gesture.swipe == EasyTouch.SwipeDirection.UpLeft || gesture.swipe == EasyTouch.SwipeDirection.DownRight){
|
|
axisActionValue = gesture.deltaPosition.magnitude*coef;
|
|
return true;
|
|
}
|
|
break;
|
|
case SwipeDirection.DiagonalRight:
|
|
if (gesture.swipe == EasyTouch.SwipeDirection.UpRight || gesture.swipe == EasyTouch.SwipeDirection.DownLeft){
|
|
axisActionValue = gesture.deltaPosition.magnitude*coef;
|
|
return true;
|
|
}
|
|
|
|
break;
|
|
case SwipeDirection.Left:
|
|
if (gesture.swipe == EasyTouch.SwipeDirection.Left){
|
|
axisActionValue = gesture.deltaPosition.x*coef;
|
|
return true;
|
|
}
|
|
break;
|
|
case SwipeDirection.Right:
|
|
if (gesture.swipe == EasyTouch.SwipeDirection.Right){
|
|
axisActionValue = gesture.deltaPosition.x*coef;
|
|
return true;
|
|
}
|
|
break;
|
|
case SwipeDirection.DownLeft:
|
|
if (gesture.swipe == EasyTouch.SwipeDirection.DownLeft){
|
|
axisActionValue = gesture.deltaPosition.magnitude*coef;
|
|
return true;
|
|
}
|
|
break;
|
|
case SwipeDirection.DownRight:
|
|
if (gesture.swipe == EasyTouch.SwipeDirection.DownRight){
|
|
|
|
axisActionValue = gesture.deltaPosition.magnitude*coef;
|
|
return true;
|
|
}
|
|
break;
|
|
case SwipeDirection.UpLeft:
|
|
if (gesture.swipe == EasyTouch.SwipeDirection.UpLeft){
|
|
|
|
axisActionValue = gesture.deltaPosition.magnitude*coef;
|
|
return true;
|
|
}
|
|
break;
|
|
case SwipeDirection.UpRight:
|
|
if (gesture.swipe == EasyTouch.SwipeDirection.UpRight){
|
|
axisActionValue = gesture.deltaPosition.magnitude*coef;
|
|
return true;
|
|
}
|
|
break;
|
|
case SwipeDirection.Up:
|
|
if (gesture.swipe == EasyTouch.SwipeDirection.Up){
|
|
axisActionValue = gesture.deltaPosition.y*coef;
|
|
return true;
|
|
}
|
|
break;
|
|
case SwipeDirection.Down:
|
|
if (gesture.swipe == EasyTouch.SwipeDirection.Down){
|
|
axisActionValue = gesture.deltaPosition.y*coef;
|
|
return true;
|
|
}
|
|
break;
|
|
}
|
|
|
|
axisActionValue = 0;
|
|
return false;
|
|
}
|
|
|
|
void DoAction(Gesture gesture){
|
|
|
|
switch (directAction){
|
|
case DirectAction.Rotate:
|
|
case DirectAction.RotateLocal:
|
|
axisActionValue *= sensibility;
|
|
break;
|
|
case DirectAction.Translate:
|
|
case DirectAction.TranslateLocal:
|
|
case DirectAction.Scale:
|
|
axisActionValue /= Screen.dpi;
|
|
axisActionValue *= sensibility;
|
|
break;
|
|
}
|
|
|
|
DoDirectAction( axisActionValue);
|
|
|
|
}
|
|
#endregion
|
|
}
|
|
}
|