gold_sprint_lpr/Assets/Scripts/HighscoreLetterManager.cs
2018-03-13 16:51:53 +01:00

169 lines
4.2 KiB
C#

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;
using System.ComponentModel;
public class HighscoreLetterManager : MonoBehaviour
{
private string[] Alphanumerics = new[]
{
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3",
"4", "5", "6", "7", "8", "9"
};
public bool IsActive
{
get
{
return _isActive;
}
set
{
if (value == _isActive) return;
_isActive = value;
Selector.GetComponent<Image>().color = _isActive ? ColorSelection : Color.clear;
var image = Selector.GetComponent<Image>();
var test = Selector.GetComponentInChildren<Image>();
}
}
private int currentIndex;
public Button UpButton;
public Sprite UpButtonSprite;
public Sprite PressedUpButtonSprite;
public Button DownButton;
public Sprite DownButtonSprite;
public Sprite PressedDownButtonSprite;
public Text LetterText;
public GameObject Selector;
public Color ColorSelection;
//public string XAxis;
public string YAxis;
private Image upButtonImage;
private Image downButtonImage;
private bool letterIsChanging;
private bool upButtonPressed;
private bool downButtonPressed;
private DateTime lastInput;
public int InputDelay = 500;
private bool _isActive;
bool IsSpawned
{
get { return lastInput == null || (DateTime.Now - lastInput).Milliseconds < InputDelay; }
}
public string CurrentText
{ get { return Alphanumerics[CurrentIndex]; } }
private int CurrentIndex
{
get
{
return currentIndex;
}
set
{
currentIndex = value;
}
}
// Use this for initialization
void Start()
{
CurrentIndex = 0;
upButtonImage = UpButton.GetComponentInChildren<Image>();
downButtonImage = DownButton.GetComponentInChildren<Image>();
if (Selector != null)
Selector.GetComponent<Image>().color = _isActive ? ColorSelection : Color.clear;
}
// Update is called once per frame
void Update()
{
if (!IsActive) return;
UpdateLetter();
if (!IsSpawned)
{
if (!string.IsNullOrEmpty(YAxis))
{
var verticalAxis = Input.GetAxis(YAxis);
if (Math.Abs(verticalAxis) == 1)
ChangeLetter(verticalAxis == 1);
}
}
}
private void UpdateLetter()
{
if (letterIsChanging) return;
if (LetterText.text != CurrentText)
{
LetterText.text = CurrentText;
}
UpdateButtonsSprite();
}
private void UpdateButtonsSprite()
{
var upSprite = UpButtonSprite;
var downSprite = DownButtonSprite;
if (upButtonPressed && (DateTime.Now - lastInput).Milliseconds < 200)
{
upSprite = PressedUpButtonSprite;
}
else upButtonPressed = false;
if (downButtonPressed && (DateTime.Now - lastInput).Milliseconds < 200)
{
downSprite = PressedDownButtonSprite;
}
else downButtonPressed = false;
upButtonImage.sprite = upSprite;
downButtonImage.sprite = downSprite;
}
public void ChangeLetter(bool plus)
{
if (letterIsChanging) return;
lastInput = DateTime.Now;
letterIsChanging = true;
upButtonPressed = false;
downButtonPressed = false;
if (plus)
{
CurrentIndex++;
upButtonPressed = true;
}
else
{
CurrentIndex--;
downButtonPressed = true;
}
if (CurrentIndex < 0) CurrentIndex = Alphanumerics.Length - 1;
else if (CurrentIndex >= Alphanumerics.Length) CurrentIndex = 0;
letterIsChanging = false;
}
private static bool? IsPositiveMove(float axis)
{
bool? move = null;
if (axis == 1) move = true;
else if (axis == -1) move = false;
return move;
}
}