Add timer to spelling bee
This commit is contained in:
@@ -1128,6 +1128,7 @@ RectTransform:
|
|||||||
- {fileID: 1355716509}
|
- {fileID: 1355716509}
|
||||||
- {fileID: 1338727893}
|
- {fileID: 1338727893}
|
||||||
- {fileID: 2029045140}
|
- {fileID: 2029045140}
|
||||||
|
- {fileID: 1843239269}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 3
|
m_RootOrder: 3
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
@@ -1149,8 +1150,143 @@ MonoBehaviour:
|
|||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
image: {fileID: 1338727891}
|
image: {fileID: 1338727891}
|
||||||
inputString:
|
|
||||||
input: {fileID: 2029045139}
|
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
|
--- !u!1 &1926745377
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|||||||
@@ -31,36 +31,65 @@ public class SpellingBeeController : MonoBehaviour {
|
|||||||
// The input field for testing purposes
|
// The input field for testing purposes
|
||||||
public TMP_InputField input;
|
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
|
// Start is called before the first frame update
|
||||||
void Start() {
|
void Start() {
|
||||||
themeList = ThemeLoader.loadJson();
|
themeList = ThemeLoader.loadJson();
|
||||||
|
|
||||||
currentTheme = findThemeByName(PlayerPrefs.GetString("themeName"));
|
currentTheme = findThemeByName(PlayerPrefs.GetString("themeName"));
|
||||||
words = currentTheme.words;
|
words = currentTheme.words;
|
||||||
|
|
||||||
SetRandomWord();
|
SetRandomWord();
|
||||||
|
addSeconds(currentWord.Length * secondsPerLetter + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update is called once per frame
|
// Update is called once per frame
|
||||||
void Update() {
|
void Update() {
|
||||||
if (input.text.Length > 0) {
|
if (input.text.Length > 0) {
|
||||||
if (Char.ToUpper(input.text[0]) == Char.ToUpper(currentWord[currentIndex]) && input.text.Length == 1) {
|
checkChar(input.text[0]);
|
||||||
letters[currentIndex].GetComponent<Image>().color = Color.green;
|
}
|
||||||
input.text = "";
|
|
||||||
currentIndex++;
|
|
||||||
|
|
||||||
if (currentIndex >= currentWord.Length) {
|
timerValue -= Time.deltaTime;
|
||||||
for (int i = 0; i < currentWord.Length; i++) {
|
|
||||||
Destroy(letters[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
StartCoroutine(Wait());
|
if (timerValue <= 0.0f)
|
||||||
SetRandomWord();
|
{
|
||||||
|
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<Image>().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) {
|
Theme findThemeByName(string themeName) {
|
||||||
int themeIndex = 0;
|
int themeIndex = 0;
|
||||||
|
|
||||||
@@ -87,6 +116,7 @@ public class SpellingBeeController : MonoBehaviour {
|
|||||||
currentWord = randomWord;
|
currentWord = randomWord;
|
||||||
changeSprite(randomWord);
|
changeSprite(randomWord);
|
||||||
displayWord(randomWord);
|
displayWord(randomWord);
|
||||||
|
addSeconds(currentWord.Length * secondsPerLetter + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Displays the word that needs to be spelled
|
// Displays the word that needs to be spelled
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ public class SpellingBeeThemeSelectionController : MonoBehaviour {
|
|||||||
|
|
||||||
// Then, add the button component to the game object
|
// Then, add the button component to the game object
|
||||||
Button buttonComponent = newButton.AddComponent<Button>();
|
Button buttonComponent = newButton.AddComponent<Button>();
|
||||||
|
buttonComponent.onClick.AddListener(() => OnButtonClick(theme.name));
|
||||||
|
|
||||||
GameObject colorBox = new GameObject("Letter box");
|
GameObject colorBox = new GameObject("Letter box");
|
||||||
colorBox.transform.SetParent(newButton.transform);
|
colorBox.transform.SetParent(newButton.transform);
|
||||||
@@ -36,12 +37,11 @@ public class SpellingBeeThemeSelectionController : MonoBehaviour {
|
|||||||
background.color = Color.black;
|
background.color = Color.black;
|
||||||
background.sprite = UnityEditor.AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/UIMask.psd");
|
background.sprite = UnityEditor.AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/UIMask.psd");
|
||||||
|
|
||||||
// Set the position of the button game object
|
|
||||||
|
|
||||||
// Create the text game object
|
// Create the text game object
|
||||||
GameObject textObject = new GameObject("Text - " + theme.name);
|
GameObject textObject = new GameObject("Text - " + theme.name);
|
||||||
textObject.transform.SetParent(newButton.transform);
|
textObject.transform.SetParent(newButton.transform);
|
||||||
|
|
||||||
|
// Set the position of the button game object
|
||||||
int xPos = (int) (i % 2 == 0 ? canvasWidth * 0.25f : canvasWidth * 0.75f);
|
int xPos = (int) (i % 2 == 0 ? canvasWidth * 0.25f : canvasWidth * 0.75f);
|
||||||
int yPos = (1 + i / 2) * 180;
|
int yPos = (1 + i / 2) * 180;
|
||||||
|
|
||||||
@@ -51,38 +51,18 @@ public class SpellingBeeThemeSelectionController : MonoBehaviour {
|
|||||||
Text textComponent = textObject.AddComponent<Text>();
|
Text textComponent = textObject.AddComponent<Text>();
|
||||||
textComponent.alignment = TextAnchor.MiddleCenter;
|
textComponent.alignment = TextAnchor.MiddleCenter;
|
||||||
|
|
||||||
// Set the text content and font size
|
|
||||||
textComponent.color = new Color(50, 50, 50);
|
textComponent.color = new Color(50, 50, 50);
|
||||||
textComponent.text = theme.name;
|
textComponent.text = theme.name;
|
||||||
textComponent.rectTransform.sizeDelta = new Vector2(buttonWidth, buttonHeight);
|
textComponent.rectTransform.sizeDelta = new Vector2(buttonWidth, buttonHeight);
|
||||||
|
|
||||||
// Set the parent of the text game object to the button game object
|
|
||||||
textComponent.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
|
textComponent.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
|
||||||
textComponent.fontSize = 36;
|
textComponent.fontSize = 36;
|
||||||
buttonComponent.onClick.AddListener(() => OnButtonClick(theme.name));
|
|
||||||
|
|
||||||
// Set the size and position of the text game object
|
|
||||||
/*
|
|
||||||
RectTransform textTransform = textObject.GetComponent<RectTransform>();
|
|
||||||
textTransform.sizeDelta = new Vector2(200, 50);
|
|
||||||
textTransform.anchoredPosition = Vector2.zero;
|
|
||||||
|
|
||||||
// Set the parent of the button game object to the canvas
|
|
||||||
newButton.transform.SetParent(canvas.transform, false);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnButtonClick(string clickedTheme)
|
void OnButtonClick(string clickedTheme)
|
||||||
{
|
{
|
||||||
Debug.Log("Button " + clickedTheme + " clicked!");
|
|
||||||
PlayerPrefs.SetString("themeName", clickedTheme);
|
PlayerPrefs.SetString("themeName", clickedTheme);
|
||||||
ChangeSceneOnClick.loadScene("SpellingBee");
|
ChangeSceneOnClick.loadScene("SpellingBee");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update is called once per frame
|
|
||||||
void Update()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
34
Assets/Scripts/Timer.cs
Normal file
34
Assets/Scripts/Timer.cs
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
public class Timer : MonoBehaviour
|
||||||
|
{
|
||||||
|
private float timerValue;
|
||||||
|
public Text timerText;
|
||||||
|
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
timerValue = 0.0f;
|
||||||
|
timerText = GetComponent<Text>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
timerValue -= Time.deltaTime;
|
||||||
|
|
||||||
|
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 addSeconds(int seconds) {
|
||||||
|
timerValue += (float) seconds;
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Assets/Scripts/Timer.cs.meta
Normal file
11
Assets/Scripts/Timer.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 531e5c20048e1923fa3ed13005bd4a0b
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Reference in New Issue
Block a user