148 lines
3.7 KiB
C#
148 lines
3.7 KiB
C#
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class KeyboardManager : MonoBehaviour
|
|
{
|
|
public enum ShiftMode { Lowercase, NextUppercase, Uppercase }
|
|
|
|
[Header("UI References")]
|
|
public TMP_Text nameTextField;
|
|
public TMP_Text scoreTextField;
|
|
public Button shiftButton;
|
|
public Button backspaceButton;
|
|
public Button enterButton;
|
|
public Button spaceButton;
|
|
|
|
[Header("Letter Buttons")]
|
|
public List<Button> letterButtons;
|
|
|
|
public int inputTextLimit = 12;
|
|
public ScoreBoard scoreBoard; // Reference to ScoreBoard
|
|
public string placeHolderText;
|
|
private string _input = "";
|
|
private float _currentScore;
|
|
private ShiftMode _shiftMode = ShiftMode.Lowercase;
|
|
|
|
void Start()
|
|
{
|
|
foreach (var button in letterButtons)
|
|
{
|
|
button.onClick.AddListener(() => OnLetterPressed(button));
|
|
}
|
|
|
|
shiftButton.onClick.AddListener(OnShiftPressed);
|
|
backspaceButton.onClick.AddListener(OnBackspacePressed);
|
|
enterButton.onClick.AddListener(OnEnterPressed);
|
|
spaceButton.onClick.AddListener(OnSpacePressed);
|
|
|
|
|
|
|
|
gameObject.SetActive(false); // Start disabled
|
|
}
|
|
|
|
public void Activate(float score, Transform assignedTransform)
|
|
{
|
|
_currentScore = score;
|
|
_input = "";
|
|
nameTextField.text = placeHolderText;
|
|
Debug.Log(_currentScore);
|
|
Debug.Log(_currentScore.ToString());
|
|
scoreTextField.text = _currentScore.ToString();
|
|
gameObject.SetActive(true);
|
|
|
|
gameObject.transform.position = assignedTransform.position;
|
|
gameObject.transform.rotation = assignedTransform.rotation;
|
|
|
|
}
|
|
|
|
public void DeActivate()
|
|
{
|
|
gameObject.SetActive(false);
|
|
}
|
|
|
|
private void addToInput(string newInput)
|
|
{
|
|
|
|
if (_input.Length < inputTextLimit)
|
|
_input += newInput;
|
|
}
|
|
|
|
void OnLetterPressed(Button button)
|
|
{
|
|
var label = button.GetComponentInChildren<TMP_Text>();
|
|
if (label == null) return;
|
|
|
|
string letter = label.text;
|
|
|
|
switch (_shiftMode)
|
|
{
|
|
case ShiftMode.Lowercase:
|
|
addToInput(letter.ToLower());
|
|
break;
|
|
case ShiftMode.Uppercase:
|
|
addToInput(letter.ToUpper());
|
|
break;
|
|
case ShiftMode.NextUppercase:
|
|
addToInput(letter.ToUpper());
|
|
_shiftMode = ShiftMode.Lowercase;
|
|
UpdateKeyLabels();
|
|
break;
|
|
}
|
|
|
|
UpdateOutput();
|
|
}
|
|
|
|
void OnShiftPressed()
|
|
{
|
|
_shiftMode = _shiftMode switch
|
|
{
|
|
ShiftMode.Lowercase => ShiftMode.NextUppercase,
|
|
ShiftMode.NextUppercase => ShiftMode.Uppercase,
|
|
ShiftMode.Uppercase => ShiftMode.Lowercase,
|
|
_ => ShiftMode.Lowercase
|
|
};
|
|
|
|
UpdateKeyLabels();
|
|
}
|
|
|
|
void OnBackspacePressed()
|
|
{
|
|
if (_input.Length > 0)
|
|
_input = _input.Substring(0, _input.Length - 1);
|
|
UpdateOutput();
|
|
}
|
|
|
|
void OnEnterPressed()
|
|
{
|
|
if (_input.Length > 0)
|
|
{
|
|
scoreBoard.SaveScore(_input, _currentScore);
|
|
gameObject.SetActive(false);
|
|
}
|
|
}
|
|
|
|
void OnSpacePressed()
|
|
{
|
|
addToInput(" ");
|
|
UpdateOutput();
|
|
}
|
|
|
|
void UpdateOutput()
|
|
{
|
|
nameTextField.text = _input;
|
|
}
|
|
|
|
void UpdateKeyLabels()
|
|
{
|
|
foreach (var button in letterButtons)
|
|
{
|
|
var label = button.GetComponentInChildren<TMP_Text>();
|
|
if (label == null) continue;
|
|
|
|
label.text = _shiftMode == ShiftMode.Lowercase ? label.text.ToLower() : label.text.ToUpper();
|
|
}
|
|
}
|
|
}
|