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

129 lines
3.3 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;
using UnityEngine.Events;
using UnityEngine.EventSystems;
namespace HedgehogTeam.EasyTouch{
[AddComponentMenu("EasyTouch/Quick Touch")]
public class QuickTouch : QuickBase {
#region Events
[System.Serializable] public class OnTouch : UnityEvent<Gesture>{}
[System.Serializable] public class OnTouchNotOverMe : UnityEvent<Gesture>{}
[SerializeField]
public OnTouch onTouch;
public OnTouchNotOverMe onTouchNotOverMe;
#endregion
#region Enumeration
public enum ActionTriggering {Start,Down,Up};
#endregion
#region Members
public ActionTriggering actionTriggering;
private Gesture currentGesture;
#endregion
#region Monobehavior CallBack
public QuickTouch(){
quickActionName = "QuickTouch"+ GetInstanceID().ToString();
}
#endregion
void Update(){
currentGesture = EasyTouch.current;
if (!is2Finger){
// GetIndex at touch start
if (currentGesture.type == EasyTouch.EvtType.On_TouchStart && fingerIndex == -1 && IsOverMe(currentGesture)){
fingerIndex = currentGesture.fingerIndex;
}
// start
if (currentGesture.type == EasyTouch.EvtType.On_TouchStart && actionTriggering == ActionTriggering.Start){
if (currentGesture.fingerIndex == fingerIndex || isMultiTouch){
DoAction( currentGesture);
}
}
// Down
if (currentGesture.type == EasyTouch.EvtType.On_TouchDown && actionTriggering == ActionTriggering.Down){
if (currentGesture.fingerIndex == fingerIndex || isMultiTouch){
DoAction( currentGesture);
}
}
// Up
if (currentGesture.type == EasyTouch.EvtType.On_TouchUp){
if ( actionTriggering == ActionTriggering.Up){
if (currentGesture.fingerIndex == fingerIndex || isMultiTouch){
if (IsOverMe(currentGesture)){
onTouch.Invoke( currentGesture);
}
else{
onTouchNotOverMe.Invoke( currentGesture);
}
}
}
if (currentGesture.fingerIndex == fingerIndex){ fingerIndex =-1;}
}
}
else{
if (currentGesture.type == EasyTouch.EvtType.On_TouchStart2Fingers && actionTriggering == ActionTriggering.Start){
DoAction( currentGesture);
}
if (currentGesture.type == EasyTouch.EvtType.On_TouchDown2Fingers && actionTriggering == ActionTriggering.Down){
DoAction( currentGesture);
}
if (currentGesture.type == EasyTouch.EvtType.On_TouchUp2Fingers && actionTriggering == ActionTriggering.Up){
DoAction( currentGesture);
}
}
}
#region Private method
void DoAction(Gesture gesture){
if (IsOverMe(gesture)){
onTouch.Invoke( gesture);
}
}
private bool IsOverMe(Gesture gesture){
bool returnValue = false;
if ( realType == GameObjectType.UI){
if (gesture.isOverGui ){
if ((gesture.pickedUIElement == gameObject || gesture.pickedUIElement.transform.IsChildOf( transform))){
returnValue = true;
}
}
}
else{
if ((!enablePickOverUI && gesture.pickedUIElement == null) || enablePickOverUI){
if (EasyTouch.GetGameObjectAt( gesture.position,is2Finger) == gameObject){
returnValue = true;
}
}
}
return returnValue;
}
#endregion
}
}