diff --git a/Assets/Scenes/SpellingBee.unity b/Assets/Scenes/SpellingBee.unity index 407eb63..67786f6 100644 --- a/Assets/Scenes/SpellingBee.unity +++ b/Assets/Scenes/SpellingBee.unity @@ -1128,6 +1128,7 @@ RectTransform: - {fileID: 1355716509} - {fileID: 1338727893} - {fileID: 2029045140} + - {fileID: 1843239269} m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1149,8 +1150,143 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: image: {fileID: 1338727891} - inputString: input: {fileID: 2029045139} + timerText: {fileID: 1843239267} +--- !u!1 &1843239266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1843239269} + - component: {fileID: 1843239268} + - component: {fileID: 1843239267} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1843239267 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843239266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 78 + m_fontSizeBase: 78 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1843239268 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843239266} + m_CullTransparentMesh: 1 +--- !u!224 &1843239269 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843239266} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1768150806} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 614, y: 414} + m_SizeDelta: {x: 390.7844, y: 148.7707} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1926745377 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/SpellingBeeController.cs b/Assets/Scripts/SpellingBeeController.cs index 9f474d6..c449723 100644 --- a/Assets/Scripts/SpellingBeeController.cs +++ b/Assets/Scripts/SpellingBeeController.cs @@ -31,36 +31,65 @@ public class SpellingBeeController : MonoBehaviour { // The input field for testing purposes public TMP_InputField input; + // Current value of timer in seconds + private float timerValue; + + // Timer display + public TMP_Text timerText; + + // Amount of seconds user gets per letter of the current word + private int secondsPerLetter = 6; + // Start is called before the first frame update void Start() { themeList = ThemeLoader.loadJson(); - currentTheme = findThemeByName(PlayerPrefs.GetString("themeName")); words = currentTheme.words; - SetRandomWord(); + addSeconds(currentWord.Length * secondsPerLetter + 1); } // 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++; + checkChar(input.text[0]); + } - if (currentIndex >= currentWord.Length) { - for (int i = 0; i < currentWord.Length; i++) { - Destroy(letters[i]); - } + timerValue -= Time.deltaTime; - StartCoroutine(Wait()); - SetRandomWord(); + if (timerValue <= 0.0f) + { + timerValue = 0.0f; + // Handle end of timer + } + + int minutes = Mathf.FloorToInt(timerValue / 60.0f); + int seconds = Mathf.FloorToInt(timerValue % 60.0f); + + timerText.text = string.Format("{0:00}:{1:00}", minutes, seconds); + } + + void checkChar(char letter) { + if (Char.ToUpper(letter) == 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 addSeconds(int seconds) { + timerValue += (float) seconds; + } + Theme findThemeByName(string themeName) { int themeIndex = 0; @@ -87,6 +116,7 @@ public class SpellingBeeController : MonoBehaviour { currentWord = randomWord; changeSprite(randomWord); displayWord(randomWord); + addSeconds(currentWord.Length * secondsPerLetter + 1); } // Displays the word that needs to be spelled diff --git a/Assets/Scripts/SpellingBeeThemeSelectionController.cs b/Assets/Scripts/SpellingBeeThemeSelectionController.cs index d2efdf9..8db65c6 100644 --- a/Assets/Scripts/SpellingBeeThemeSelectionController.cs +++ b/Assets/Scripts/SpellingBeeThemeSelectionController.cs @@ -28,6 +28,7 @@ public class SpellingBeeThemeSelectionController : MonoBehaviour { // Then, add the button component to the game object Button buttonComponent = newButton.AddComponent