87 lines
2.2 KiB
GDScript
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()
|