using System.Collections; using System.Collections.Generic; using System.IO; using System; using TMPro; using UnityEngine; using UnityEngine.UI; [System.Serializable] public class ThemeList { public Theme[] themes; } [System.Serializable] public class Theme { public string name; public string description; public string[] words; } public class SpellingBeeController : MonoBehaviour { private string[] words; private int currentIndex; private string currentWord; private ThemeList themeList; private Theme currentTheme; private GameObject[] letters; public Image image; public string inputString; public TMP_InputField input; // Start is called before the first frame update void Start() { loadJson(); currentTheme = themeList.themes[0]; SetRandomWord(); } void SetRandomWord() { currentIndex = 0; int randomIndex = UnityEngine.Random.Range(0, words.Length - 1); string randomWord = words[randomIndex]; letters = new GameObject[randomWord.Length]; currentWord = randomWord; changeSprite(randomWord); changeWord(randomWord); } // Update is called once per frame void Update() { if (input.text.Length > 0) { if (Char.ToUpper(input.text[0]) == Char.ToUpper(currentWord[currentIndex]) && input.text.Length == 1) { letters[currentIndex].GetComponent().color = Color.green; input.text = ""; currentIndex++; if (currentIndex >= currentWord.Length) { for (int i = 0; i < currentWord.Length; i++) { Destroy(letters[i]); } StartCoroutine(Wait()); SetRandomWord(); } } } } void changeWord(string word) { int length = word.Length; int canvasWidth = 1920; int maxWidth = 1080; int spacing = maxWidth / (length - 1); letters = new GameObject[length]; int[] xvalues = new int[length]; for (int i = 0; i < length; i++) { xvalues[i] = (canvasWidth - maxWidth) / 2 + i * spacing; } for (int i = 0; i < length; i++) { GameObject colorBox = new GameObject("Letter box"); colorBox.transform.SetParent(gameObject.transform); letters[i] = colorBox; // Add an Image component to the new GameObject Image background = colorBox.AddComponent(); background.color = Color.red; background.sprite = UnityEditor.AssetDatabase.GetBuiltinExtraResource("UI/Skin/UISprite.psd"); // Create a new child GameObject to hold the Text component GameObject letterObject = new GameObject("Text"); letterObject.transform.SetParent(colorBox.transform); // Add a Text component to the new child GameObject Text letterComponent = letterObject.AddComponent(); letterComponent.text = Char.ToString(Char.ToUpper(word[i])); letterComponent.alignment = TextAnchor.MiddleCenter; letterComponent.fontSize = 60; // Set the font of the Text component letterComponent.font = Resources.GetBuiltinResource("Arial.ttf"); // Set the position of the parent GameObject colorBox.transform.position = new Vector2(xvalues[i], 450); } } void changeSprite(string spriteName) { Image imageComponent = image.GetComponent(); // Load the new sprite from the Resources folder Sprite sprite = Resources.Load("SpellingBee/images/" + spriteName); // Set the new sprite as the Image component's source image image.sprite = sprite; } void loadJson() { TextAsset themeJson = Resources.Load("SpellingBee/words"); string jsonString = themeJson.text; themeList = JsonUtility.FromJson(jsonString); words = themeList.themes[UnityEngine.Random.Range(0, themeList.themes.Length - 1)].words; } IEnumerator Wait() { yield return new WaitForSecondsRealtime(2); } }