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();
}
}
}