240 lines
5.3 KiB
C#
240 lines
5.3 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;
|
|
|
|
[System.Serializable]
|
|
public class ETCButton : ETCBase, IPointerEnterHandler, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler {
|
|
|
|
#region Unity Events
|
|
[System.Serializable] public class OnDownHandler : UnityEvent{}
|
|
[System.Serializable] public class OnPressedHandler : UnityEvent{}
|
|
[System.Serializable] public class OnPressedValueandler : UnityEvent<float>{}
|
|
[System.Serializable] public class OnUPHandler : UnityEvent{}
|
|
|
|
[SerializeField] public OnDownHandler onDown;
|
|
[SerializeField] public OnPressedHandler onPressed;
|
|
[SerializeField] public OnPressedValueandler onPressedValue;
|
|
[SerializeField] public OnUPHandler onUp;
|
|
#endregion
|
|
|
|
#region Members
|
|
|
|
#region Public members
|
|
public ETCAxis axis;
|
|
|
|
public Sprite normalSprite;
|
|
public Color normalColor;
|
|
|
|
public Sprite pressedSprite;
|
|
public Color pressedColor;
|
|
#endregion
|
|
|
|
#region Private members
|
|
private Image cachedImage;
|
|
private bool isOnPress;
|
|
private GameObject previousDargObject;
|
|
private bool isOnTouch;
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region Constructor
|
|
public ETCButton(){
|
|
|
|
axis = new ETCAxis( "Button");
|
|
_visible = true;
|
|
_activated = true;
|
|
isOnTouch = false;
|
|
|
|
enableKeySimulation = true;
|
|
|
|
axis.unityAxis = "Jump";
|
|
showPSInspector = true;
|
|
showSpriteInspector = false;
|
|
showBehaviourInspector = false;
|
|
showEventInspector = false;
|
|
}
|
|
#endregion
|
|
|
|
#region Monobehaviour Callback
|
|
protected override void Awake (){
|
|
base.Awake ();
|
|
|
|
cachedImage = GetComponent<UnityEngine.UI.Image>();
|
|
|
|
}
|
|
|
|
public override void Start(){
|
|
axis.InitAxis();
|
|
base.Start();
|
|
isOnPress = false;
|
|
|
|
if (allowSimulationStandalone && enableKeySimulation && !Application.isEditor){
|
|
SetVisible(visibleOnStandalone);
|
|
}
|
|
}
|
|
|
|
protected override void UpdateControlState (){
|
|
UpdateButton();
|
|
}
|
|
|
|
protected override void DoActionBeforeEndOfFrame (){
|
|
axis.DoGravity();
|
|
}
|
|
#endregion
|
|
|
|
#region UI Callback
|
|
public void OnPointerEnter(PointerEventData eventData){
|
|
|
|
if (isSwipeIn && !isOnTouch){
|
|
|
|
if (eventData.pointerDrag != null){
|
|
if (eventData.pointerDrag.GetComponent<ETCBase>() && eventData.pointerDrag!= gameObject){
|
|
previousDargObject=eventData.pointerDrag;
|
|
//ExecuteEvents.Execute<IPointerUpHandler> (previousDargObject, eventData, ExecuteEvents.pointerUpHandler);
|
|
}
|
|
}
|
|
|
|
eventData.pointerDrag = gameObject;
|
|
eventData.pointerPress = gameObject;
|
|
OnPointerDown( eventData);
|
|
}
|
|
}
|
|
|
|
public void OnPointerDown(PointerEventData eventData){
|
|
|
|
if (_activated && !isOnTouch){
|
|
pointId = eventData.pointerId;
|
|
|
|
axis.ResetAxis();
|
|
axis.axisState = ETCAxis.AxisState.Down;
|
|
|
|
isOnPress = false;
|
|
isOnTouch = true;
|
|
|
|
onDown.Invoke();
|
|
ApllyState();
|
|
axis.UpdateButton();
|
|
}
|
|
}
|
|
|
|
public void OnPointerUp(PointerEventData eventData){
|
|
if (pointId == eventData.pointerId){
|
|
isOnPress = false;
|
|
isOnTouch = false;
|
|
axis.axisState = ETCAxis.AxisState.Up;
|
|
axis.axisValue = 0;
|
|
onUp.Invoke();
|
|
ApllyState();
|
|
|
|
if (previousDargObject){
|
|
ExecuteEvents.Execute<IPointerUpHandler> (previousDargObject, eventData, ExecuteEvents.pointerUpHandler);
|
|
previousDargObject = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void OnPointerExit(PointerEventData eventData){
|
|
if (pointId == eventData.pointerId){
|
|
if (axis.axisState == ETCAxis.AxisState.Press && !isSwipeOut){
|
|
OnPointerUp(eventData);
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Button Update
|
|
private void UpdateButton(){
|
|
|
|
if (axis.axisState == ETCAxis.AxisState.Down){
|
|
|
|
isOnPress = true;
|
|
axis.axisState = ETCAxis.AxisState.Press;
|
|
}
|
|
|
|
if (isOnPress){
|
|
axis.UpdateButton();
|
|
onPressed.Invoke();
|
|
onPressedValue.Invoke( axis.axisValue);
|
|
|
|
}
|
|
|
|
if (axis.axisState == ETCAxis.AxisState.Up){
|
|
isOnPress = false;
|
|
axis.axisState = ETCAxis.AxisState.None;
|
|
}
|
|
|
|
|
|
if (enableKeySimulation && _activated && _visible && !isOnTouch){
|
|
|
|
if (Input.GetButton( axis.unityAxis)&& axis.axisState ==ETCAxis.AxisState.None ){
|
|
axis.ResetAxis();
|
|
onDown.Invoke();
|
|
axis.axisState = ETCAxis.AxisState.Down;
|
|
}
|
|
|
|
if (!Input.GetButton(axis.unityAxis )&& axis.axisState == ETCAxis.AxisState.Press){
|
|
axis.axisState = ETCAxis.AxisState.Up;
|
|
axis.axisValue = 0;
|
|
|
|
onUp.Invoke();
|
|
}
|
|
|
|
axis.UpdateButton();
|
|
ApllyState();
|
|
}
|
|
|
|
|
|
}
|
|
#endregion
|
|
|
|
#region Private Method
|
|
protected override void SetVisible (bool forceUnvisible=false){
|
|
bool localVisible = _visible;
|
|
if (!visible){
|
|
localVisible = visible;
|
|
}
|
|
GetComponent<Image>().enabled = localVisible;
|
|
}
|
|
|
|
private void ApllyState(){
|
|
|
|
if (cachedImage){
|
|
switch (axis.axisState){
|
|
case ETCAxis.AxisState.Down:
|
|
case ETCAxis.AxisState.Press:
|
|
cachedImage.sprite = pressedSprite;
|
|
cachedImage.color = pressedColor;
|
|
break;
|
|
default:
|
|
cachedImage.sprite = normalSprite;
|
|
cachedImage.color = normalColor;
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
protected override void SetActivated(){
|
|
|
|
if (!_activated){
|
|
isOnPress = false;
|
|
isOnTouch = false;
|
|
axis.axisState = ETCAxis.AxisState.None;
|
|
axis.axisValue = 0;
|
|
ApllyState();
|
|
}
|
|
}
|
|
#endregion
|
|
}
|