Files
retro_missile/scripts/game_manager.gd
2017-11-12 16:56:20 +01:00

87 lines
2.2 KiB
GDScript

extends Node
const STATE_STARTUP = 0
const STATE_PLAYING = 1
const STATE_GAMEOVER = 2
const STAGE_TIME = 30
var active_asteroids = 0
var stage = 1
var total_time = 0
var slowmo_time = 5
var score = 0
var time_next_stage = 25
var state = STATE_STARTUP
func _ready():
set_fixed_process(true)
update_ui()
func game_over():
state = STATE_GAMEOVER
var restart_btn = game_manager.get_node_from_root("Node/UI/Restart")
restart_btn.show()
restart_btn.get_node("AnimationPlayer").connect("finished", self, "game_over_ts")
restart_btn.get_node("AnimationPlayer").play("anim_in")
func game_over_ts():
OS.set_time_scale(0.03)
func reset():
get_tree().reload_current_scene()
stage = 1
active_asteroids = 0
total_time = 0
slowmo_time = 0
score = 0
time_next_stage = 25
OS.set_time_scale(1)
state = STATE_PLAYING
update_ui()
func get_node_from_root(node_name):
return get_tree().get_root().get_node(node_name)
func _fixed_process(delta):
total_time += delta
if not state == STATE_GAMEOVER: slowmo_update(delta)
stage_update(delta)
func stage_update(delta):
time_next_stage -= delta
if time_next_stage <= 0:
get_node_from_root("Node/WorldAudio").play("level_up")
stage += 1
update_ui()
time_next_stage = STAGE_TIME
func slowmo_update(delta):
if slowmo_time >= 0:
slowmo_time -= delta / OS.get_time_scale()
else: set_slowmo(false)
if OS.get_time_scale() != 1.0: get_node_from_root("Node/UI/SlowmoBar").update_value(slowmo_time)
func set_slowmo(slowmo, time=5, scale=0.5):
if slowmo:
slowmo_time = time
OS.set_time_scale(scale)
get_node_from_root("Node/UI/SlowmoBar").set_max_val(time)
else:
OS.set_time_scale(1)
func update_ui():
var health = get_node_from_root("Node/Base").local_health
get_node_from_root("Node/UI/ScoreLabel").update_text(stage, active_asteroids, health)
func get_active_asteroids():
return active_asteroids
func add_asteroid():
active_asteroids += 1
update_ui()
if active_asteroids > stage + 7:
game_manager.set_slowmo(true, 15, 0.2)
elif active_asteroids > stage + 5:
game_manager.set_slowmo(true, 10, 0.25)
elif active_asteroids > stage + 3:
game_manager.set_slowmo(true, 10, 0.5)
func remove_asteroid():
active_asteroids -= 1
update_ui()