[HELP] if statements working when they shouldn't

Problem:
Hi, I’m working on my Text101 game and before keep expanding the story I wanted to check if everything was working fine. I discovered that when I in a state with 3 options I press a “not theoretically supposed to work in that moment” option, it works.

Example:
State A, options are 1, 2 and 3.
State B, options are 4, 5 and 6.

I am in state A, I press 1, it works as expected.
I am in state A, I press 6, it should not do anything but works as if I were in state B.

Code:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class TextController : MonoBehaviour {

	public Text text;
	private enum States {intro, dormitorio, balcon, armario, pasillo, no_pasillo, muerte_pasillo, baño, salon, escalera, muerte_escalera, socorro, azotea_subir, azotea_armario, azotea_puerta};
	private States currentState;
	private bool rebequita;

	// Use this for initialization
	void Start () {
		currentState = States.intro;
		rebequita = false;
		text.text = "Pulsa cualquier tecla para empezar el juego.";
	
	}
	
	// Update is called once per frame
	void Update () {
		if (Input.anyKeyDown){
			state_intro();
			if (currentState == States.balcon){
				state_balcon();
			}else if (currentState == States.dormitorio){
					state_dormitorio();
			} else if (currentState == States.armario){
				state_armario();
			} else if (currentState == States.pasillo){
				state_pasillo();
			} else if (currentState == States.no_pasillo){
				state_noPasillo();
			}
		}
	}
	void state_intro () {
		text.text = "Eric y tu llegais a casa despues de una larga jornada. " +
					"Mientras ves un programa de humor en el televisor ves como Eric se levanta sin decir nada y va al baño, y al cabo " +
					"de un momento escuchas como empieza a hablar solo. Sales del salon y vas a su encuentro pensando que te dice algo, " +
					"pero no hablaba contigo, sino que con el espejo. Miras al espejo y ves como la figura del espejo, un ser con aspecto " +
					"demoniaco te mira, vuelve la mirada a Eric y grita '¡ATRAPALA!'. Acto seguido, ves como Eric cae al suelo al tiempo " +
					"que dice 'escondete y huye' mientras sus manos crecen y sus dedos se vuelven mas largos y finos, ideal para hacer " +
					"cosquillas durante horas. Temiendo por tu vida, sales corriendo del baño y te escondes en el interior de un mueble en" +
					"una habitacion cercana durante unos minutos. El tiempo se hacia eterno mientras escuchabas los pasos del monstruo en " +
					"el que Eric se acaba de convertir. Cuando entra a la misma habitacion en la que estas tu el pulso se te acelera, pero " +
					"reunes el valor necesario para mirar por una rendija y ves que ese ya no es el novio con el que salias, sino " +
					"Risallon, el demonio de las cosquillas en el cuerpo de Eric. Por suerte sale de la habitacion sin haberte visto, " +
					"es hora de escapar.\n\n" +
					"Opciones:    (B) Ir al balcon    (A) Revisar el armario    (P) Ir al pasillo";
					if (Input.GetKeyDown(KeyCode.B)){
						currentState = States.balcon;
					} else if (Input.GetKeyDown(KeyCode.A)){
						currentState = States.armario;
					} else if ((Input.GetKeyDown(KeyCode.P)) && rebequita == true){
						currentState = States.pasillo;
					} else if ((Input.GetKeyDown(KeyCode.P)) && rebequita == false){
						currentState = States.no_pasillo;
					}
	}
	void state_dormitorio (){
		text.text = "Has vuelto al dormitorio.\n\n" +
			"Opciones:    (B) Ir al balcon    (A) Revisar el armario    (P) Ir al pasillo";
			
	}
	void state_balcon (){
		text.text = "La puerta esta bloqueada, Eric debia haberla arreglado ya... capullo.\n\n" +
			"Opciones: (D) Dormitorio";
			
	}
	void state_armario (){
		text.text = "Hay una rebequita, vas a cogerla por si acaso que es invierno"+
					"Opciones:    (D) Dormitorio";
		rebequita = true;
		
	}
	void state_pasillo (){
		text.text = "No hay demonios a la vista, ¿a donde quieres ir?\n\n";
		
	}
	void state_noPasillo (){
		text.text = "Es invierno y hace frio, no puedo huir asi...\n\n";
		
	}
}

Possibly this will help? [Solved] Statement works fine without being in curly brackets

Modify your update function like this :

void Update () {
			if (currentState == States.balcon){
				state_balcon();
			}else if (currentState == States.dormitorio){
					state_dormitorio();
			} else if (currentState == States.armario){
				state_armario();
			} else if (currentState == States.pasillo){
				state_pasillo();
			} else if (currentState == States.no_pasillo){
				state_noPasillo();
			} 
		}

And after put an else if statement for launch state_intro, but only once and not everytime like your actual update function

Privacy & Terms