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