using UnityEngine;
using UnityEngine.SceneManagement;
namespace Gley.UrbanSystem.Internal
{
public class UIInput : MonoBehaviour
{
//Events used for UI buttons only on mobile device
#if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
public delegate void ButtonDown(string button);
public static event ButtonDown onButtonDown;
public static void TriggerButtonDownEvent(string button)
{
if (onButtonDown != null)
{
onButtonDown(button);
}
}
public delegate void ButtonUp(string button);
public static event ButtonUp onButtonUp;
public static void TriggerButtonUpEvent(string button)
{
if (onButtonUp != null)
{
onButtonUp(button);
}
}
bool left, right, up, down;
#endif
float horizontalInput;
float verticalInput;
///
/// Initializes the input system based on platform used
///
///
public UIInput Initialize()
{
#if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
onButtonDown += PointerDown;
onButtonUp += PointerUp;
#else
GameObject steeringUI = GameObject.Find("SteeringUI");
if (steeringUI)
{
steeringUI.SetActive(false);
}
#endif
return this;
}
///
/// Get the steer input
///
///
public float GetHorizontalInput()
{
return horizontalInput;
}
///
/// Get acceleration input
///
///
public float GetVerticalInput()
{
return verticalInput;
}
///
/// Read input
///
private void Update()
{
#if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
if (left)
{
horizontalInput -= Time.deltaTime;
}
else
{
if (right)
{
horizontalInput += Time.deltaTime;
}
else
{
horizontalInput = Mathf.MoveTowards(horizontalInput, 0, 5*Time.deltaTime);
}
}
horizontalInput = Mathf.Clamp(horizontalInput, -1, 1);
if(up)
{
verticalInput += Time.deltaTime;
}
else
{
if(down)
{
verticalInput -= Time.deltaTime;
}
else
{
verticalInput = 0;
}
}
verticalInput = Mathf.Clamp(verticalInput, -1, 1);
#else
horizontalInput = Input.GetAxis("Horizontal");
verticalInput = Input.GetAxis("Vertical");
#endif
}
//Click event handlers for mobile devices
#if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
private void PointerDown(string name)
{
if(name == "Restart")
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
if (name == "Left")
{
left = true;
right = false;
}
if (name == "Right")
{
right = true;
left = false;
}
if (name == "Up")
{
up = true;
down = false;
}
if (name == "Down")
{
down = true;
up = false;
}
}
private void PointerUp(string name)
{
if (name == "Left")
{
left = false;
}
if (name == "Right")
{
right = false;
}
if (name == "Up")
{
up = false;
}
if (name == "Down")
{
down = false;
}
}
private void OnDestroy()
{
onButtonDown -= PointerDown;
onButtonUp -= PointerUp;
}
#endif
}
}