247 lines
6.8 KiB
C#
247 lines
6.8 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;
|
|
|
|
namespace HedgehogTeam.EasyTouch{
|
|
// This is the class that simulate touches with the mouse.
|
|
// Internal use only, DO NOT USE IT
|
|
public class EasyTouchInput{
|
|
|
|
#region private members
|
|
private Vector2[] oldMousePosition = new Vector2[2];
|
|
private int[] tapCount = new int[2];
|
|
private float[] startActionTime = new float[2];
|
|
private float[] deltaTime = new float[2];
|
|
private float[] tapeTime = new float[2];
|
|
|
|
// Complexe 2 fingers simulation
|
|
private bool bComplex=false;
|
|
private Vector2 deltaFingerPosition;
|
|
private Vector2 oldFinger2Position;
|
|
private Vector2 complexCenter;
|
|
#endregion
|
|
|
|
#region Public methods
|
|
// Return the number of touch
|
|
public int TouchCount(){
|
|
|
|
#if ((UNITY_ANDROID || UNITY_IOS || UNITY_WINRT || UNITY_BLACKBERRY || UNITY_TVOS) && !UNITY_EDITOR)
|
|
return getTouchCount(true);
|
|
#else
|
|
return getTouchCount(false);
|
|
#endif
|
|
|
|
}
|
|
|
|
private int getTouchCount(bool realTouch){
|
|
|
|
int count=0;
|
|
|
|
if (realTouch || EasyTouch.instance.enableRemote ){
|
|
count = Input.touchCount;
|
|
}
|
|
else{
|
|
if (Input.GetMouseButton(0) || Input.GetMouseButtonUp(0)){
|
|
count=1;
|
|
if (EasyTouch.GetSecondeFingerSimulation()){
|
|
if (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(EasyTouch.instance.twistKey)|| Input.GetKey(KeyCode.LeftControl) ||Input.GetKey(EasyTouch.instance.swipeKey ))
|
|
count=2;
|
|
if (Input.GetKeyUp(KeyCode.LeftAlt)|| Input.GetKeyUp(EasyTouch.instance.twistKey)|| Input.GetKeyUp(KeyCode.LeftControl)|| Input.GetKeyUp(EasyTouch.instance.swipeKey))
|
|
count=2;
|
|
}
|
|
if (count ==0){
|
|
complexCenter = Vector2.zero;
|
|
oldMousePosition[0] = new Vector2(-1,-1);
|
|
oldMousePosition[1] = new Vector2(-1,-1);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return count;
|
|
}
|
|
|
|
// return in Finger structure all informations on an touch
|
|
public Finger GetMouseTouch(int fingerIndex,Finger myFinger){
|
|
|
|
Finger finger;
|
|
|
|
if (myFinger!=null){
|
|
finger = myFinger;
|
|
}
|
|
else{
|
|
finger = new Finger();
|
|
finger.gesture = EasyTouch.GestureType.None;
|
|
}
|
|
|
|
|
|
if (fingerIndex==1 && (Input.GetKeyUp(KeyCode.LeftAlt)|| Input.GetKeyUp(EasyTouch.instance.twistKey)|| Input.GetKeyUp(KeyCode.LeftControl)|| Input.GetKeyUp(EasyTouch.instance.swipeKey))){
|
|
finger.fingerIndex = fingerIndex;
|
|
finger.position = oldFinger2Position;
|
|
finger.deltaPosition = finger.position - oldFinger2Position;
|
|
finger.tapCount = tapCount[fingerIndex];
|
|
finger.deltaTime = Time.realtimeSinceStartup-deltaTime[fingerIndex];
|
|
finger.phase = TouchPhase.Ended;
|
|
|
|
return finger;
|
|
}
|
|
|
|
if (Input.GetMouseButton(0)){
|
|
|
|
finger.fingerIndex = fingerIndex;
|
|
finger.position = GetPointerPosition(fingerIndex);
|
|
|
|
if (Time.realtimeSinceStartup-tapeTime[fingerIndex]>0.5){
|
|
tapCount[fingerIndex]=0;
|
|
}
|
|
|
|
if (Input.GetMouseButtonDown(0) || (fingerIndex==1 && (Input.GetKeyDown(KeyCode.LeftAlt)|| Input.GetKeyDown(EasyTouch.instance.twistKey)|| Input.GetKeyDown(KeyCode.LeftControl)|| Input.GetKeyDown(EasyTouch.instance.swipeKey)))){
|
|
|
|
// Began
|
|
finger.position = GetPointerPosition(fingerIndex);
|
|
finger.deltaPosition = Vector2.zero;
|
|
tapCount[fingerIndex]=tapCount[fingerIndex]+1;
|
|
finger.tapCount = tapCount[fingerIndex];
|
|
startActionTime[fingerIndex] = Time.realtimeSinceStartup;
|
|
deltaTime[fingerIndex] = startActionTime[fingerIndex];
|
|
finger.deltaTime = 0;
|
|
finger.phase = TouchPhase.Began;
|
|
|
|
|
|
if (fingerIndex==1){
|
|
oldFinger2Position = finger.position;
|
|
oldMousePosition[fingerIndex] = finger.position;
|
|
}
|
|
else{
|
|
oldMousePosition[fingerIndex] = finger.position;
|
|
}
|
|
|
|
if (tapCount[fingerIndex]==1){
|
|
tapeTime[fingerIndex] = Time.realtimeSinceStartup;
|
|
}
|
|
|
|
|
|
return finger;
|
|
}
|
|
|
|
finger.deltaPosition = finger.position - oldMousePosition[fingerIndex];
|
|
|
|
finger.tapCount = tapCount[fingerIndex];
|
|
finger.deltaTime = Time.realtimeSinceStartup-deltaTime[fingerIndex];
|
|
if (finger.deltaPosition.sqrMagnitude <1){
|
|
finger.phase = TouchPhase.Stationary;
|
|
}
|
|
else{
|
|
finger.phase = TouchPhase.Moved;
|
|
}
|
|
|
|
oldMousePosition[fingerIndex] = finger.position;
|
|
deltaTime[fingerIndex] = Time.realtimeSinceStartup;
|
|
|
|
return finger;
|
|
}
|
|
|
|
else if (Input.GetMouseButtonUp(0)){
|
|
finger.fingerIndex = fingerIndex;
|
|
finger.position = GetPointerPosition(fingerIndex);
|
|
finger.deltaPosition = finger.position - oldMousePosition[fingerIndex];
|
|
finger.tapCount = tapCount[fingerIndex];
|
|
finger.deltaTime = Time.realtimeSinceStartup-deltaTime[fingerIndex];
|
|
finger.phase = TouchPhase.Ended;
|
|
oldMousePosition[fingerIndex] = finger.position;
|
|
|
|
return finger;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
// Get the position of the simulate second finger
|
|
public Vector2 GetSecondFingerPosition(){
|
|
|
|
Vector2 pos = new Vector2(-1,-1);
|
|
|
|
if ((Input.GetKey(KeyCode.LeftAlt)|| Input.GetKey(EasyTouch.instance.twistKey)) && (Input.GetKey(KeyCode.LeftControl)|| Input.GetKey(EasyTouch.instance.swipeKey))){
|
|
if (!bComplex){
|
|
bComplex=true;
|
|
deltaFingerPosition = (Vector2)Input.mousePosition - oldFinger2Position;
|
|
}
|
|
pos = GetComplex2finger();
|
|
return pos;
|
|
}
|
|
else if (Input.GetKey(KeyCode.LeftAlt)|| Input.GetKey(EasyTouch.instance.twistKey) ){
|
|
pos = GetPinchTwist2Finger();
|
|
bComplex = false;
|
|
return pos;
|
|
}else if (Input.GetKey(KeyCode.LeftControl)|| Input.GetKey(EasyTouch.instance.swipeKey) ){
|
|
|
|
pos =GetComplex2finger();
|
|
bComplex = false;
|
|
return pos;
|
|
}
|
|
|
|
return pos;
|
|
}
|
|
#endregion
|
|
|
|
#region Private methods
|
|
// Get the postion of simulate finger
|
|
private Vector2 GetPointerPosition(int index){
|
|
|
|
Vector2 pos;
|
|
|
|
if (index==0){
|
|
pos= Input.mousePosition;
|
|
return pos;
|
|
}
|
|
else{
|
|
return GetSecondFingerPosition();
|
|
|
|
}
|
|
}
|
|
|
|
// Simulate for a twist or pinc
|
|
private Vector2 GetPinchTwist2Finger(bool newSim=false){
|
|
|
|
Vector2 position;
|
|
|
|
if (complexCenter==Vector2.zero){
|
|
position.x = (Screen.width/2.0f) - (Input.mousePosition.x - (Screen.width/2.0f)) ;
|
|
position.y = (Screen.height/2.0f) - (Input.mousePosition.y - (Screen.height/2.0f));
|
|
}
|
|
else{
|
|
position.x = (complexCenter.x) - (Input.mousePosition.x - (complexCenter.x)) ;
|
|
position.y = (complexCenter.y) - (Input.mousePosition.y - (complexCenter.y));
|
|
}
|
|
oldFinger2Position = position;
|
|
|
|
return position;
|
|
}
|
|
|
|
// complexe Alt + Ctr
|
|
private Vector2 GetComplex2finger(){
|
|
|
|
Vector2 position;
|
|
|
|
position.x = Input.mousePosition.x - deltaFingerPosition.x;
|
|
position.y = Input.mousePosition.y - deltaFingerPosition.y;
|
|
|
|
complexCenter = new Vector2((Input.mousePosition.x+position.x)/2f, (Input.mousePosition.y+position.y)/2f);
|
|
oldFinger2Position = position;
|
|
|
|
return position;
|
|
}
|
|
#endregion
|
|
}
|
|
}
|
|
|