diff --git a/Assets/Puzzles/Word Puzzle/Scripts/WordPuzzle.cs b/Assets/Puzzles/Word Puzzle/Scripts/WordPuzzle.cs index d247ce74..066fea3e 100644 --- a/Assets/Puzzles/Word Puzzle/Scripts/WordPuzzle.cs +++ b/Assets/Puzzles/Word Puzzle/Scripts/WordPuzzle.cs @@ -5,77 +5,50 @@ using System.Linq; using TMPro; using System.Text.RegularExpressions; using UnityEngine.UI; + public enum WGameState - { - Uninitialized, - Playing, - Win, - Lose - } +{ + Uninitialized, + Playing, + Win, + Lose +} + public class WordPuzzle : MonoBehaviour { private TMP_Text[] allLetterTexts; private List usedLetterTexts = new List(); private List words = new List(); - private int currentCount; private int currentSubmit = 0; public GameObject congratulations; public GameObject retry; public TMP_Text retryText; - public Color inWordColor = Color.yellow; public Color perfectMatchColor = Color.green; public Color wrongColor = Color.red; - public string currentWord = string.Empty; - - public WGameState gameState = WGameState.Uninitialized; [SerializeField] private TextAsset textAsset = null; - public AudioClip loseSound; public AudioClip winSound; private void Awake() { allLetterTexts = GetComponentsInChildren(); - foreach (var text in allLetterTexts) { text.text = string.Empty; } - // var textAsset = Resources.Load("words_alpha"); words = Regex.Split(textAsset.text, Environment.NewLine).ToList(); - if (currentWord == string.Empty) { + if (string.IsNullOrEmpty(currentWord)) { currentWord = words[UnityEngine.Random.Range(0, words.Count)]; - Debug.Log("Choose a random word: " + currentWord); + Debug.Log("Chosen random word: " + currentWord); } gameState = WGameState.Uninitialized; - - } - - private void HandleInput() - { - // Debug.Log("HandleInput"); - foreach (char c in Input.inputString) - { - if (c == '\b') - { - RemoveChar(); - } - else if ((c == '\n') || (c == '\r')) - { - SubmitButtonClick(); - } - else if (char.IsLetter(c)) - { - DoKeyPress(char.ToLower(c)); - } - } } private void Update() @@ -84,8 +57,31 @@ public class WordPuzzle : MonoBehaviour { HandleInput(); } - } + + private void HandleInput() + { + if (Input.GetKeyDown(KeyCode.Backspace)) + { + RemoveChar(); + } + else if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter)) + { + SubmitButtonClick(); + } + else + { + foreach (KeyCode key in Enum.GetValues(typeof(KeyCode))) + { + if (Input.GetKeyDown(key) && key >= KeyCode.A && key <= KeyCode.Z) + { + DoKeyPress(key.ToString().ToLower()[0]); + break; + } + } + } + } + public void SetGameState(WGameState state) { gameState = state; @@ -99,7 +95,6 @@ public class WordPuzzle : MonoBehaviour private void RemoveChar() { - print("remove"); if (!usedLetterTexts.Any() || currentCount <= 0) return; @@ -110,25 +105,21 @@ public class WordPuzzle : MonoBehaviour private void DoKeyPress(char character) { - print(character); if (usedLetterTexts.Count >= allLetterTexts.Length || currentCount >= 5) return; var currentText = allLetterTexts[usedLetterTexts.Count]; currentText.text = character.ToString(); usedLetterTexts.Add(currentText); - currentCount++; } private void SubmitButtonClick() { - print("submit"); if (currentCount != 5) return; var submittedWord = string.Empty; - int ii = 0; for (int i = 0 + (currentSubmit * 5); i < usedLetterTexts.Count; i++) { @@ -137,47 +128,34 @@ public class WordPuzzle : MonoBehaviour submittedWord += textsChar; texts.color = wrongColor; - if (currentWord.Contains(textsChar)) { texts.color = inWordColor; - if (textsChar == currentWord[ii]) texts.color = perfectMatchColor; } - ii++; } - print(submittedWord); - if (words.Contains(submittedWord)) { if(submittedWord == currentWord) { congratulations.SetActive(true); - print("success!"); SetGameState(WGameState.Win); SoundFXManager.instance.PlaySound(winSound, transform, 1.0f); return; } - - print("reset count"); - currentSubmit++; currentCount = 0; } else { - print("fail!"); - for (int i = 0 + (currentSubmit * 5); i < usedLetterTexts.Count; i++) { TMP_Text texts = usedLetterTexts[i]; - texts.color = Color.white; } - } if(currentSubmit == 6) @@ -192,25 +170,19 @@ public class WordPuzzle : MonoBehaviour public void ResetPuzzle() { allLetterTexts = GetComponentsInChildren(); - retry.SetActive(false); congratulations.SetActive(false); - usedLetterTexts.Clear(); - foreach (var texts in allLetterTexts) { texts.text = string.Empty; texts.color = Color.white; } - currentSubmit = 0; currentCount = 0; - - // currentWord = words[UnityEngine.Random.Range(0, words.Count)]; - if (currentWord == string.Empty) { + if (string.IsNullOrEmpty(currentWord)) { currentWord = words[UnityEngine.Random.Range(0, words.Count)]; - Debug.Log("Choose a random word: " + currentWord); + Debug.Log("Chosen random word: " + currentWord); } SetGameState(WGameState.Playing); }