Some checks failed
Build project / Build for (StandaloneWindows64, 6000.0.37f1) (push) Waiting to run
Build project / Publish to itch.io (StandaloneLinux64) (push) Blocked by required conditions
Build project / Publish to itch.io (StandaloneWindows64) (push) Blocked by required conditions
Build project / Build for (StandaloneLinux64, 6000.0.37f1) (push) Has been cancelled
190 lines
5.1 KiB
C#
190 lines
5.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using System.Linq;
|
|
using TMPro;
|
|
using System.Text.RegularExpressions;
|
|
using UnityEngine.UI;
|
|
|
|
public enum WGameState
|
|
{
|
|
Uninitialized,
|
|
Playing,
|
|
Win,
|
|
Lose
|
|
}
|
|
|
|
public class WordPuzzle : MonoBehaviour
|
|
{
|
|
private TMP_Text[] allLetterTexts;
|
|
private List<TMP_Text> usedLetterTexts = new List<TMP_Text>();
|
|
private List<string> words = new List<string>();
|
|
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<TMP_Text>();
|
|
foreach (var text in allLetterTexts)
|
|
{
|
|
text.text = string.Empty;
|
|
}
|
|
|
|
words = Regex.Split(textAsset.text, Environment.NewLine).ToList();
|
|
if (string.IsNullOrEmpty(currentWord)) {
|
|
currentWord = words[UnityEngine.Random.Range(0, words.Count)];
|
|
Debug.Log("Chosen random word: " + currentWord);
|
|
}
|
|
gameState = WGameState.Uninitialized;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (gameState == WGameState.Playing)
|
|
{
|
|
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;
|
|
}
|
|
|
|
public void StartGame(string overrideWord)
|
|
{
|
|
currentWord = overrideWord;
|
|
ResetPuzzle();
|
|
}
|
|
|
|
private void RemoveChar()
|
|
{
|
|
if (!usedLetterTexts.Any() || currentCount <= 0)
|
|
return;
|
|
|
|
usedLetterTexts.Last().text = string.Empty;
|
|
usedLetterTexts.RemoveAt(usedLetterTexts.Count - 1);
|
|
currentCount--;
|
|
}
|
|
|
|
private void DoKeyPress(char 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()
|
|
{
|
|
if (currentCount != 5)
|
|
return;
|
|
|
|
var submittedWord = string.Empty;
|
|
int ii = 0;
|
|
for (int i = 0 + (currentSubmit * 5); i < usedLetterTexts.Count; i++)
|
|
{
|
|
TMP_Text texts = usedLetterTexts[i];
|
|
var textsChar = char.Parse(texts.text);
|
|
submittedWord += textsChar;
|
|
|
|
texts.color = wrongColor;
|
|
if (currentWord.Contains(textsChar))
|
|
{
|
|
texts.color = inWordColor;
|
|
if (textsChar == currentWord[ii])
|
|
texts.color = perfectMatchColor;
|
|
}
|
|
ii++;
|
|
}
|
|
|
|
if (words.Contains(submittedWord))
|
|
{
|
|
if(submittedWord == currentWord)
|
|
{
|
|
congratulations.SetActive(true);
|
|
SetGameState(WGameState.Win);
|
|
SoundFXManager.instance.PlaySound(winSound, transform, 1.0f);
|
|
return;
|
|
}
|
|
currentSubmit++;
|
|
currentCount = 0;
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0 + (currentSubmit * 5); i < usedLetterTexts.Count; i++)
|
|
{
|
|
TMP_Text texts = usedLetterTexts[i];
|
|
texts.color = Color.white;
|
|
}
|
|
}
|
|
|
|
if(currentSubmit == 6)
|
|
{
|
|
retry.SetActive(true);
|
|
retryText.text = currentWord;
|
|
SetGameState(WGameState.Lose);
|
|
SoundFXManager.instance.PlaySound(loseSound, transform, 1.0f);
|
|
}
|
|
}
|
|
|
|
public void ResetPuzzle()
|
|
{
|
|
allLetterTexts = GetComponentsInChildren<TMP_Text>();
|
|
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;
|
|
if (string.IsNullOrEmpty(currentWord)) {
|
|
currentWord = words[UnityEngine.Random.Range(0, words.Count)];
|
|
Debug.Log("Chosen random word: " + currentWord);
|
|
}
|
|
SetGameState(WGameState.Playing);
|
|
}
|
|
}
|