395 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			395 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								/***********************************************
							 | 
						|||
| 
								 | 
							
												EasyTouch Controls
							 | 
						|||
| 
								 | 
							
									Copyright © 2016 The Hedgehog Team
							 | 
						|||
| 
								 | 
							
								      http://www.thehedgehogteam.com/Forum/
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
									  The.Hedgehog.Team@gmail.com
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
								**********************************************/
							 | 
						|||
| 
								 | 
							
								using UnityEngine;
							 | 
						|||
| 
								 | 
							
								using UnityEngine.UI;
							 | 
						|||
| 
								 | 
							
								using UnityEngine.Events;
							 | 
						|||
| 
								 | 
							
								using UnityEngine.EventSystems;
							 | 
						|||
| 
								 | 
							
								using System.Collections;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								public class ETCDPad : ETCBase, IDragHandler,  IPointerDownHandler, IPointerUpHandler { 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									#region Unity Events
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnMoveStartHandler : UnityEvent{}
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnMoveHandler : UnityEvent<Vector2> { }
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnMoveSpeedHandler : UnityEvent<Vector2> { }
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnMoveEndHandler : UnityEvent{ }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnTouchStartHandler : UnityEvent{}
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnTouchUPHandler : UnityEvent{}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnDownUpHandler : UnityEvent{ }
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnDownDownHandler : UnityEvent{ }
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnDownLeftHandler : UnityEvent{ }
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnDownRightHandler : UnityEvent{ }
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnPressUpHandler : UnityEvent{ }
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnPressDownHandler : UnityEvent{ }
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnPressLeftHandler : UnityEvent{ }
							 | 
						|||
| 
								 | 
							
									[System.Serializable] public class OnPressRightHandler : UnityEvent{ }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnMoveStartHandler onMoveStart;
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnMoveHandler onMove;
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnMoveSpeedHandler onMoveSpeed;
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnMoveEndHandler onMoveEnd;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnTouchStartHandler onTouchStart;
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnTouchUPHandler onTouchUp;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnDownUpHandler OnDownUp;
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnDownDownHandler OnDownDown;
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnDownLeftHandler OnDownLeft;
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnDownRightHandler OnDownRight;
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnDownUpHandler OnPressUp;
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnDownDownHandler OnPressDown;
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnDownLeftHandler OnPressLeft;
							 | 
						|||
| 
								 | 
							
									[SerializeField] public OnDownRightHandler OnPressRight;
							 | 
						|||
| 
								 | 
							
									#endregion
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									#region Members
							 | 
						|||
| 
								 | 
							
									#region Public members
							 | 
						|||
| 
								 | 
							
									public ETCAxis axisX;
							 | 
						|||
| 
								 | 
							
									public ETCAxis axisY;
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									public Sprite normalSprite;
							 | 
						|||
| 
								 | 
							
									public Color normalColor;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									public Sprite pressedSprite;
							 | 
						|||
| 
								 | 
							
									public Color pressedColor;
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									#endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									#region Private Member
							 | 
						|||
| 
								 | 
							
									private Vector2 tmpAxis;
							 | 
						|||
| 
								 | 
							
									private Vector2 OldTmpAxis;
							 | 
						|||
| 
								 | 
							
									private bool isOnTouch;
							 | 
						|||
| 
								 | 
							
									#endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									#endregion
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									#region Private members
							 | 
						|||
| 
								 | 
							
									private Image cachedImage; 
							 | 
						|||
| 
								 | 
							
									#endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									#region Constructor
							 | 
						|||
| 
								 | 
							
									public ETCDPad(){
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										axisX = new ETCAxis( "Horizontal");
							 | 
						|||
| 
								 | 
							
										axisY = new ETCAxis( "Vertical");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										_visible = true;
							 | 
						|||
| 
								 | 
							
										_activated = true;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										dPadAxisCount = DPadAxis.Two_Axis;
							 | 
						|||
| 
								 | 
							
										tmpAxis = Vector2.zero;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										showPSInspector = true; 
							 | 
						|||
| 
								 | 
							
										showSpriteInspector = false;
							 | 
						|||
| 
								 | 
							
										showBehaviourInspector = false;
							 | 
						|||
| 
								 | 
							
										showEventInspector = false;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										isOnDrag = false;
							 | 
						|||
| 
								 | 
							
										isOnTouch = false;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										axisX.unityAxis = "Horizontal";
							 | 
						|||
| 
								 | 
							
										axisY.unityAxis = "Vertical";
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										enableKeySimulation = true;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									#endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									#region Monobehaviour Callback
							 | 
						|||
| 
								 | 
							
									public override void Start(){
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										base.Start();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										tmpAxis = Vector2.zero;
							 | 
						|||
| 
								 | 
							
										OldTmpAxis = Vector2.zero;
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										axisX.InitAxis();
							 | 
						|||
| 
								 | 
							
										axisY.InitAxis();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										if (allowSimulationStandalone && enableKeySimulation && !Application.isEditor){
							 | 
						|||
| 
								 | 
							
											SetVisible(visibleOnStandalone);
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									/*
							 | 
						|||
| 
								 | 
							
									void Update(){
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										if (!useFixedUpdate){
							 | 
						|||
| 
								 | 
							
											UpdateDPad();
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									void FixedUpdate(){
							 | 
						|||
| 
								 | 
							
										if (useFixedUpdate){
							 | 
						|||
| 
								 | 
							
											UpdateDPad();
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}*/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									protected override void UpdateControlState ()
							 | 
						|||
| 
								 | 
							
									{
							 | 
						|||
| 
								 | 
							
										UpdateDPad();
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									protected override void DoActionBeforeEndOfFrame (){
							 | 
						|||
| 
								 | 
							
										axisX.DoGravity();
							 | 
						|||
| 
								 | 
							
										axisY.DoGravity();
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									#endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									#region UI Callback
							 | 
						|||
| 
								 | 
							
									public void OnPointerDown(PointerEventData eventData){
							 | 
						|||
| 
								 | 
							
										if (_activated && !isOnTouch){
							 | 
						|||
| 
								 | 
							
											onTouchStart.Invoke();
							 | 
						|||
| 
								 | 
							
											GetTouchDirection( eventData.position,eventData.pressEventCamera);
							 | 
						|||
| 
								 | 
							
											isOnTouch = true;
							 | 
						|||
| 
								 | 
							
											isOnDrag = true;
							 | 
						|||
| 
								 | 
							
											pointId = eventData.pointerId;
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									public void OnDrag(PointerEventData eventData){
							 | 
						|||
| 
								 | 
							
										if (_activated && pointId == eventData.pointerId){
							 | 
						|||
| 
								 | 
							
											isOnTouch = true;
							 | 
						|||
| 
								 | 
							
											isOnDrag = true;
							 | 
						|||
| 
								 | 
							
											GetTouchDirection( eventData.position,eventData.pressEventCamera);
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									public void OnPointerUp(PointerEventData eventData){
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										if (pointId == eventData.pointerId){
							 | 
						|||
| 
								 | 
							
											isOnTouch = false;
							 | 
						|||
| 
								 | 
							
											isOnDrag = false;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											tmpAxis = Vector2.zero;
							 | 
						|||
| 
								 | 
							
											OldTmpAxis = Vector2.zero;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											axisX.axisState = ETCAxis.AxisState.None;
							 | 
						|||
| 
								 | 
							
											axisY.axisState = ETCAxis.AxisState.None;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											if (!axisX.isEnertia && !axisY.isEnertia){
							 | 
						|||
| 
								 | 
							
												axisX.ResetAxis();
							 | 
						|||
| 
								 | 
							
												axisY.ResetAxis();
							 | 
						|||
| 
								 | 
							
												onMoveEnd.Invoke();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											pointId = -1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											onTouchUp.Invoke();
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									#endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									#region DPad Update
							 | 
						|||
| 
								 | 
							
									void UpdateDPad(){
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										#region Key simulation
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										if (enableKeySimulation && !isOnTouch && _activated && _visible){
							 | 
						|||
| 
								 | 
							
											float x = Input.GetAxis(axisX.unityAxis);
							 | 
						|||
| 
								 | 
							
											float y= Input.GetAxis(axisY.unityAxis);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											isOnDrag = false;
							 | 
						|||
| 
								 | 
							
											tmpAxis = Vector2.zero;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											if (x!=0){
							 | 
						|||
| 
								 | 
							
												isOnDrag = true;
							 | 
						|||
| 
								 | 
							
												tmpAxis = new Vector2(1 * Mathf.Sign(x),tmpAxis.y);
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											if (y!=0){
							 | 
						|||
| 
								 | 
							
												isOnDrag = true;
							 | 
						|||
| 
								 | 
							
												tmpAxis = new Vector2(tmpAxis.x,1 * Mathf.Sign(y));
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										#endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										OldTmpAxis.x = axisX.axisValue;
							 | 
						|||
| 
								 | 
							
										OldTmpAxis.y = axisY.axisValue;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										axisX.UpdateAxis( tmpAxis.x,isOnDrag,ETCBase.ControlType.DPad);
							 | 
						|||
| 
								 | 
							
										axisY.UpdateAxis( tmpAxis.y,isOnDrag, ETCBase.ControlType.DPad);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										#region Move event
							 | 
						|||
| 
								 | 
							
										if ((axisX.axisValue!=0 ||  axisY.axisValue!=0 ) && OldTmpAxis == Vector2.zero){
							 | 
						|||
| 
								 | 
							
											onMoveStart.Invoke();
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										if (axisX.axisValue!=0 ||  axisY.axisValue!=0 ){
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											// X axis
							 | 
						|||
| 
								 | 
							
											if( axisX.actionOn == ETCAxis.ActionOn.Down && (axisX.axisState == ETCAxis.AxisState.DownLeft || axisX.axisState == ETCAxis.AxisState.DownRight)){
							 | 
						|||
| 
								 | 
							
												axisX.DoDirectAction();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											else if (axisX.actionOn == ETCAxis.ActionOn.Press){
							 | 
						|||
| 
								 | 
							
												axisX.DoDirectAction();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											// Y axis
							 | 
						|||
| 
								 | 
							
											if( axisY.actionOn == ETCAxis.ActionOn.Down && (axisY.axisState == ETCAxis.AxisState.DownUp || axisY.axisState == ETCAxis.AxisState.DownDown)){
							 | 
						|||
| 
								 | 
							
												axisY.DoDirectAction();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											else if (axisY.actionOn == ETCAxis.ActionOn.Press){
							 | 
						|||
| 
								 | 
							
												axisY.DoDirectAction();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											onMove.Invoke( new Vector2(axisX.axisValue,axisY.axisValue));
							 | 
						|||
| 
								 | 
							
											onMoveSpeed.Invoke( new Vector2(axisX.axisSpeedValue,axisY.axisSpeedValue));
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										else if (axisX.axisValue==0 &&  axisY.axisValue==0  && OldTmpAxis!=Vector2.zero) {
							 | 
						|||
| 
								 | 
							
											onMoveEnd.Invoke();
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										#endregion
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										#region Down & press event
							 | 
						|||
| 
								 | 
							
										float coef =1;
							 | 
						|||
| 
								 | 
							
										if (axisX.invertedAxis) coef = -1;
							 | 
						|||
| 
								 | 
							
										if (OldTmpAxis.x == 0 && Mathf.Abs(axisX.axisValue)>0){
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											if (axisX.axisValue*coef >0){
							 | 
						|||
| 
								 | 
							
												axisX.axisState = ETCAxis.AxisState.DownRight;
							 | 
						|||
| 
								 | 
							
												OnDownRight.Invoke();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											else if (axisX.axisValue*coef<0){
							 | 
						|||
| 
								 | 
							
												axisX.axisState = ETCAxis.AxisState.DownLeft;
							 | 
						|||
| 
								 | 
							
												OnDownLeft.Invoke();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											else{
							 | 
						|||
| 
								 | 
							
												axisX.axisState = ETCAxis.AxisState.None;
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										else if (axisX.axisState!= ETCAxis.AxisState.None) {
							 | 
						|||
| 
								 | 
							
											if (axisX.axisValue*coef>0){
							 | 
						|||
| 
								 | 
							
												axisX.axisState = ETCAxis.AxisState.PressRight;
							 | 
						|||
| 
								 | 
							
												OnPressRight.Invoke();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											else if (axisX.axisValue*coef<0){
							 | 
						|||
| 
								 | 
							
												axisX.axisState = ETCAxis.AxisState.PressLeft;
							 | 
						|||
| 
								 | 
							
												OnPressLeft.Invoke();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											else{
							 | 
						|||
| 
								 | 
							
												axisX.axisState = ETCAxis.AxisState.None;
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										coef =1;
							 | 
						|||
| 
								 | 
							
										if (axisY.invertedAxis) coef = -1;
							 | 
						|||
| 
								 | 
							
										if (OldTmpAxis.y==0 && Mathf.Abs(axisY.axisValue)>0 ){
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											if (axisY.axisValue*coef>0){
							 | 
						|||
| 
								 | 
							
												axisY.axisState = ETCAxis.AxisState.DownUp;
							 | 
						|||
| 
								 | 
							
												OnDownUp.Invoke();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											else if (axisY.axisValue*coef<0){
							 | 
						|||
| 
								 | 
							
												axisY.axisState = ETCAxis.AxisState.DownDown;
							 | 
						|||
| 
								 | 
							
												OnDownDown.Invoke();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											else{
							 | 
						|||
| 
								 | 
							
												axisY.axisState = ETCAxis.AxisState.None;
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										else if (axisY.axisState!= ETCAxis.AxisState.None) {
							 | 
						|||
| 
								 | 
							
											if (axisY.axisValue*coef>0){
							 | 
						|||
| 
								 | 
							
												axisY.axisState = ETCAxis.AxisState.PressUp;
							 | 
						|||
| 
								 | 
							
												OnPressUp.Invoke();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											else if (axisY.axisValue*coef<0){
							 | 
						|||
| 
								 | 
							
												axisY.axisState = ETCAxis.AxisState.PressDown;
							 | 
						|||
| 
								 | 
							
												OnPressDown.Invoke();
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
											else{
							 | 
						|||
| 
								 | 
							
												axisY.axisState = ETCAxis.AxisState.None;
							 | 
						|||
| 
								 | 
							
											}
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										#endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									#endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									#region Private methods
							 | 
						|||
| 
								 | 
							
									protected override void SetVisible (bool forceUnvisible=false){
							 | 
						|||
| 
								 | 
							
										bool localVisible = _visible;
							 | 
						|||
| 
								 | 
							
										if (!visible){
							 | 
						|||
| 
								 | 
							
											localVisible = visible;
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										GetComponent<Image>().enabled = localVisible;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									protected override void SetActivated (){
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										if (!_activated){
							 | 
						|||
| 
								 | 
							
											isOnTouch = false;
							 | 
						|||
| 
								 | 
							
											isOnDrag = false;
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											tmpAxis = Vector2.zero;
							 | 
						|||
| 
								 | 
							
											OldTmpAxis = Vector2.zero;
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											axisX.axisState = ETCAxis.AxisState.None;
							 | 
						|||
| 
								 | 
							
											axisY.axisState = ETCAxis.AxisState.None;
							 | 
						|||
| 
								 | 
							
											
							 | 
						|||
| 
								 | 
							
											if (!axisX.isEnertia && !axisY.isEnertia){
							 | 
						|||
| 
								 | 
							
												axisX.ResetAxis();
							 | 
						|||
| 
								 | 
							
												axisY.ResetAxis();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											}	
							 | 
						|||
| 
								 | 
							
											pointId = -1;
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									public float buttonSizeCoef = 3;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									private void GetTouchDirection(Vector2 position, Camera cam){
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										Vector2 localPoint;
							 | 
						|||
| 
								 | 
							
										RectTransformUtility.ScreenPointToLocalPointInRectangle( cachedRectTransform,position,cam,out localPoint);
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										Vector2 buttonSize = this.rectTransform().sizeDelta / buttonSizeCoef;
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										tmpAxis = Vector2.zero;
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										// Left
							 | 
						|||
| 
								 | 
							
										if ( (localPoint.x < -buttonSize.x/2 && localPoint.y > -buttonSize.y/2 && localPoint.y< buttonSize.y/2 && dPadAxisCount== DPadAxis.Two_Axis) 
							 | 
						|||
| 
								 | 
							
										    || (dPadAxisCount== DPadAxis.Four_Axis &&  localPoint.x < -buttonSize.x/2) ){
							 | 
						|||
| 
								 | 
							
											tmpAxis.x = -1;
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										// right
							 | 
						|||
| 
								 | 
							
										if ( (localPoint.x > buttonSize.x/2 && localPoint.y> -buttonSize.y/2 && localPoint.y< buttonSize.y/2 && dPadAxisCount== DPadAxis.Two_Axis) 
							 | 
						|||
| 
								 | 
							
										    || (dPadAxisCount== DPadAxis.Four_Axis &&  localPoint.x > buttonSize.x/2) ){
							 | 
						|||
| 
								 | 
							
											tmpAxis.x = 1;
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										// Up
							 | 
						|||
| 
								 | 
							
										if ( (localPoint.y > buttonSize.y/2f && localPoint.x>-buttonSize.x/2f && localPoint.x<buttonSize.x/2f && dPadAxisCount == DPadAxis.Two_Axis)
							 | 
						|||
| 
								 | 
							
										    || (dPadAxisCount== DPadAxis.Four_Axis &&  localPoint.y > buttonSize.y/2f) ){
							 | 
						|||
| 
								 | 
							
											tmpAxis.y = 1;
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										
							 | 
						|||
| 
								 | 
							
										// Down
							 | 
						|||
| 
								 | 
							
										if ( (localPoint.y < -buttonSize.y/2f && localPoint.x>-buttonSize.x/2f && localPoint.x<buttonSize.x/2f && dPadAxisCount == DPadAxis.Two_Axis)
							 | 
						|||
| 
								 | 
							
										    || (dPadAxisCount== DPadAxis.Four_Axis &&  localPoint.y <- buttonSize.y/2f) ){
							 | 
						|||
| 
								 | 
							
											tmpAxis.y = -1;
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
														
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									#endregion
							 | 
						|||
| 
								 | 
							
								}
							 |