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