C
C#2y ago
kitty

❔ Code is completely skipping over an area

I'm writing a script for a game where if you don't press Spacebar within 4 seconds, the number of failures increase by 1, the sprite is changes, and the timer resets. This is supposed to happen twice if the button is missed, and if it happens a 3rd time, I want the GameOverScene to appear. What's happening is it directly goes to the GameOverScene when I miss the button and I'm unsure why it's missing the whole sprite change and reset timer aspect
3 Replies
kitty
kittyOP2y ago
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Random = UnityEngine.Random;
using UnityEngine.SceneManagement;
using TMPro;

//const int POPUP_COOLDOWN = 4;

public class Timer : MonoBehaviour

{
bool can_show_popup = true;
float timer = 0.0f;
bool do_timer = false;
public AudioSource playSound;
public string GameOverScene = "GameOverScene";
public Sprite[] sprites; // An array of sprites to change to if the button is not pressed in time
private bool promptActive = false;
public TextMeshProUGUI promptText; // The TextMeshProUGUI object to display the prompt
private int numFailures = 2; // The number of times the button has not been pressed in time
private SpriteRenderer spriteRenderer;

public void Start()
{
spriteRenderer = GetComponent<SpriteRenderer>(); // Get the sprite renderer component
}


void reset_timer()
{
do_timer = false;
timer = 0.0f;
}

IEnumerator do_popup_debounce()
{
can_show_popup = false;

yield return new WaitForSeconds(4);


can_show_popup = true;
}

void Update()
{

if (can_show_popup)
{
int coin_flip = Random.Range(0, 2);

if (coin_flip == 1)
{
//start timer
do_timer = true;
//show popup

ShowPrompt();

StartCoroutine(do_popup_debounce());

}
}

if (do_timer)
{
timer += 1 * Time.deltaTime;

if (Input.GetKey(KeyCode.Space) && timer < 3.9f)
{
//hide popup
Debug.Log("Space hit");
HidePrompt();
reset_timer();

}

else if (Input.GetKey(KeyCode.Space) == false && timer >= 4f)
{
Debug.Log("Recognized button not hit");
numFailures++;

if (numFailures < 2)
{
Debug.Log("Missed one, boat broke");
spriteRenderer.sprite = sprites[numFailures]; // Change the sprite to the corresponding sprite in the array
HidePrompt();
reset_timer();
playSound.Play();
}
else if (numFailures >= 3)
{
SceneManager.LoadScene(GameOverScene); // Load the game over scene
}
}


}

}
void ShowPrompt()
{
promptActive = true;
promptText.gameObject.SetActive(true); // Activate the prompt text object
}

void HidePrompt()
{
promptActive = false;
promptText.gameObject.SetActive(false); // Deactivate the prompt text object
}

}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Random = UnityEngine.Random;
using UnityEngine.SceneManagement;
using TMPro;

//const int POPUP_COOLDOWN = 4;

public class Timer : MonoBehaviour

{
bool can_show_popup = true;
float timer = 0.0f;
bool do_timer = false;
public AudioSource playSound;
public string GameOverScene = "GameOverScene";
public Sprite[] sprites; // An array of sprites to change to if the button is not pressed in time
private bool promptActive = false;
public TextMeshProUGUI promptText; // The TextMeshProUGUI object to display the prompt
private int numFailures = 2; // The number of times the button has not been pressed in time
private SpriteRenderer spriteRenderer;

public void Start()
{
spriteRenderer = GetComponent<SpriteRenderer>(); // Get the sprite renderer component
}


void reset_timer()
{
do_timer = false;
timer = 0.0f;
}

IEnumerator do_popup_debounce()
{
can_show_popup = false;

yield return new WaitForSeconds(4);


can_show_popup = true;
}

void Update()
{

if (can_show_popup)
{
int coin_flip = Random.Range(0, 2);

if (coin_flip == 1)
{
//start timer
do_timer = true;
//show popup

ShowPrompt();

StartCoroutine(do_popup_debounce());

}
}

if (do_timer)
{
timer += 1 * Time.deltaTime;

if (Input.GetKey(KeyCode.Space) && timer < 3.9f)
{
//hide popup
Debug.Log("Space hit");
HidePrompt();
reset_timer();

}

else if (Input.GetKey(KeyCode.Space) == false && timer >= 4f)
{
Debug.Log("Recognized button not hit");
numFailures++;

if (numFailures < 2)
{
Debug.Log("Missed one, boat broke");
spriteRenderer.sprite = sprites[numFailures]; // Change the sprite to the corresponding sprite in the array
HidePrompt();
reset_timer();
playSound.Play();
}
else if (numFailures >= 3)
{
SceneManager.LoadScene(GameOverScene); // Load the game over scene
}
}


}

}
void ShowPrompt()
{
promptActive = true;
promptText.gameObject.SetActive(true); // Activate the prompt text object
}

void HidePrompt()
{
promptActive = false;
promptText.gameObject.SetActive(false); // Deactivate the prompt text object
}

}
i'm really new to this nvm i think i figured it out ^_^ just sprites aren't changing grrrr
kakanics
kakanics2y ago
you are using the Input.GetKey function, use the Input.GetKeyDown function instead.. GetKey will return true whenever the key is being pressed while GetKeyDown will return true only once (when you press the key)
Accord
Accord2y ago
Was this issue resolved? If so, run /close - otherwise I will mark this as stale and this post will be archived until there is new activity.
Want results from more Discord servers?
Add your server