143 lines
3.4 KiB
C#
143 lines
3.4 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 Enter-Over-Exit")]
|
|
public class QuickEnterOverExist : QuickBase {
|
|
|
|
#region Event
|
|
[System.Serializable] public class OnTouchEnter : UnityEvent<Gesture>{}
|
|
[System.Serializable] public class OnTouchOver : UnityEvent<Gesture>{}
|
|
[System.Serializable] public class OnTouchExit : UnityEvent<Gesture>{}
|
|
|
|
[SerializeField]
|
|
public OnTouchEnter onTouchEnter;
|
|
[SerializeField]
|
|
public OnTouchOver onTouchOver;
|
|
[SerializeField]
|
|
public OnTouchExit onTouchExit;
|
|
#endregion
|
|
|
|
#region Members
|
|
private bool[] fingerOver = new bool[100];
|
|
#endregion
|
|
|
|
#region MonoBehaviour callback
|
|
public QuickEnterOverExist(){
|
|
quickActionName = "QuickEnterOverExit"+ GetInstanceID().ToString();
|
|
}
|
|
|
|
void Awake(){
|
|
|
|
for (int i=0;i<100;i++){
|
|
fingerOver[i] = false;
|
|
}
|
|
}
|
|
|
|
public override void OnEnable(){
|
|
base.OnEnable();
|
|
EasyTouch.On_TouchDown += On_TouchDown;
|
|
EasyTouch.On_TouchUp += On_TouchUp;
|
|
}
|
|
|
|
public override void OnDisable(){
|
|
base.OnDisable();
|
|
UnsubscribeEvent();
|
|
}
|
|
|
|
void OnDestroy(){
|
|
UnsubscribeEvent();
|
|
}
|
|
|
|
void UnsubscribeEvent(){
|
|
EasyTouch.On_TouchDown -= On_TouchDown;
|
|
EasyTouch.On_TouchUp -= On_TouchUp;
|
|
}
|
|
#endregion
|
|
|
|
#region EasyTouch Event
|
|
void On_TouchDown (Gesture gesture){
|
|
|
|
if (realType != GameObjectType.UI){
|
|
if ((!enablePickOverUI && gesture.GetCurrentFirstPickedUIElement() == null) || enablePickOverUI){
|
|
|
|
if ( gesture.GetCurrentPickedObject()== gameObject){
|
|
if (!fingerOver[gesture.fingerIndex] && ((!isOnTouch && !isMultiTouch) || isMultiTouch)){
|
|
fingerOver[gesture.fingerIndex] = true;
|
|
onTouchEnter.Invoke( gesture);
|
|
isOnTouch = true;
|
|
}
|
|
else if (fingerOver[gesture.fingerIndex]){
|
|
onTouchOver.Invoke(gesture);
|
|
}
|
|
}
|
|
else{
|
|
if (fingerOver[gesture.fingerIndex]){
|
|
fingerOver[gesture.fingerIndex] = false;
|
|
onTouchExit.Invoke(gesture);
|
|
if (!isMultiTouch){
|
|
isOnTouch = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if ( gesture.GetCurrentPickedObject()== gameObject && (!enablePickOverUI && gesture.GetCurrentFirstPickedUIElement() != null)){
|
|
if (fingerOver[gesture.fingerIndex]){
|
|
fingerOver[gesture.fingerIndex] = false;
|
|
onTouchExit.Invoke(gesture);
|
|
if (!isMultiTouch){
|
|
isOnTouch = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
if ( gesture.GetCurrentFirstPickedUIElement()== gameObject){
|
|
if (!fingerOver[gesture.fingerIndex] && ((!isOnTouch && !isMultiTouch) || isMultiTouch)){
|
|
fingerOver[gesture.fingerIndex] = true;
|
|
onTouchEnter.Invoke( gesture);
|
|
isOnTouch = true;
|
|
}
|
|
else if (fingerOver[gesture.fingerIndex]){
|
|
onTouchOver.Invoke(gesture);
|
|
}
|
|
}
|
|
else{
|
|
if (fingerOver[gesture.fingerIndex]){
|
|
fingerOver[gesture.fingerIndex] = false;
|
|
onTouchExit.Invoke(gesture);
|
|
if (!isMultiTouch){
|
|
isOnTouch = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void On_TouchUp (Gesture gesture){
|
|
|
|
if (fingerOver[gesture.fingerIndex]){
|
|
fingerOver[gesture.fingerIndex] = false;
|
|
onTouchExit.Invoke(gesture);
|
|
if (!isMultiTouch){
|
|
isOnTouch = false;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|