forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			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();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |