101 lines
3.2 KiB
GDScript
101 lines
3.2 KiB
GDScript
extends Node
|
|
|
|
var cooldown:int = 0
|
|
static var SCREAM_ARRAY:Array = [0,1]
|
|
|
|
func _determine_seconds_left() -> float:
|
|
var difficulty_calc:float = 20-float(GLOBALVARS.difficulty)
|
|
return difficulty_calc if difficulty_calc >= 3.0 else 3.0
|
|
|
|
func _on_answer_text_submitted(_new_text: String) -> void:
|
|
if GLOBALVARS.current_solution == (%ANSWER.text).to_int() and (%ANSWER.text).is_valid_int():
|
|
GLOBALVARS.selected_player = (GLOBALVARS.selected_player+1)%4
|
|
while GLOBALVARS.selected_player not in GLOBALVARS.players_remaining:
|
|
GLOBALVARS.selected_player = (GLOBALVARS.selected_player+1)%4
|
|
|
|
GLOBALVARS.difficulty+=.5
|
|
GLOBALVARS.seconds_left = _determine_seconds_left()
|
|
_generate_question()
|
|
else:
|
|
%SCREAM.stream = load("res://assets/sounds/scream_%s.wav" % SCREAM_ARRAY.pick_random())
|
|
%SCREAM.play()
|
|
%RULE_ENFORCEMENT.explode()
|
|
cooldown = 60
|
|
GLOBALVARS.rotation_paused = true
|
|
GLOBALVARS.players_remaining.erase(GLOBALVARS.selected_player)
|
|
get_node("players/player_%s" % GLOBALVARS.selected_player).queue_free()
|
|
|
|
%ANSWER.text = ""
|
|
|
|
func _generate_question() -> void:
|
|
# 0 - add
|
|
# 1 - subtract
|
|
# 2 - multiply
|
|
# 3 - divide
|
|
|
|
var x:int = randi_range(1,100)
|
|
var y:int = randi_range(1,100)
|
|
var rand_int:int = randi_range(0,3)
|
|
|
|
if rand_int == 0:
|
|
GLOBALVARS.current_solution = x+y
|
|
GLOBALVARS.current_operand = "+"
|
|
elif rand_int == 1:
|
|
GLOBALVARS.current_solution = x-y
|
|
GLOBALVARS.current_operand = "-"
|
|
elif rand_int == 2:
|
|
x = randi_range(0,15) # simplify multiplication
|
|
y = randi_range(0,15)
|
|
GLOBALVARS.current_solution = x*y
|
|
GLOBALVARS.current_operand = "*"
|
|
elif rand_int == 3:
|
|
GLOBALVARS.current_operand = "/"
|
|
while x%y != 0: # keep going til the remainder is 0
|
|
x = randi_range(0,100)
|
|
y = randi_range(1,100)
|
|
|
|
@warning_ignore('integer_division')
|
|
GLOBALVARS.current_solution = int(x/y)
|
|
|
|
%QUESTION.text = "%s %s %s = " % [x,GLOBALVARS.current_operand,y]
|
|
|
|
func _ready() -> void:
|
|
GLOBALVARS.seconds_left = _determine_seconds_left()
|
|
_generate_question()
|
|
|
|
func _physics_process(_delta: float) -> void:
|
|
if not GLOBALVARS.rotation_paused:
|
|
GLOBALVARS.seconds_left -= 0.01666666667
|
|
if GLOBALVARS.selected_player == 0:
|
|
%ANSWER.editable = true
|
|
%ANSWER.grab_focus()
|
|
else:
|
|
%ANSWER.editable = false
|
|
|
|
if GLOBALVARS.seconds_left <= 0:
|
|
%RULE_ENFORCEMENT.explode()
|
|
cooldown = 60
|
|
GLOBALVARS.seconds_left = _determine_seconds_left()
|
|
GLOBALVARS.rotation_paused = true
|
|
if GLOBALVARS.selected_player in GLOBALVARS.players_remaining:
|
|
GLOBALVARS.players_remaining.erase(GLOBALVARS.selected_player)
|
|
get_node("players/player_%s" % GLOBALVARS.selected_player).queue_free()
|
|
|
|
if cooldown <= 0 and GLOBALVARS.rotation_paused:
|
|
if len(GLOBALVARS.players_remaining) > 1 and 0 in GLOBALVARS.players_remaining:
|
|
while GLOBALVARS.selected_player not in GLOBALVARS.players_remaining:
|
|
GLOBALVARS.selected_player = (GLOBALVARS.selected_player+1)%4
|
|
|
|
_generate_question()
|
|
%RULE_ENFORCEMENT.reset_rule_enforcement_device()
|
|
GLOBALVARS.rotation_paused = false
|
|
elif 0 in GLOBALVARS.players_remaining:
|
|
get_tree().change_scene_to_file("res://main_scenes/menu.tscn")
|
|
|
|
else:
|
|
get_tree().change_scene_to_file("res://main_scenes/menu.tscn")
|
|
|
|
|
|
elif GLOBALVARS.rotation_paused:
|
|
cooldown -= 1
|