gae_platformer/scripts/game_manager.gd

64 lines
1.7 KiB
GDScript

extends Node
class_name GameManager
@onready var overlay: CanvasLayer = %Overlay
static var health = 1
static var score = 0
var start_time: int = 0
var total_coins: int = 0
func _ready() -> void:
get_tree().paused = false
add_to_group("game_manager")
start_time = Time.get_ticks_msec()
_update_hearts()
overlay.get_node("ScoreLabel").text = "Score: " + str(score)
call_deferred("_count_coins")
func _update_hearts() -> void:
overlay.get_node("Heart1").visible = health >= 1
overlay.get_node("Heart2").visible = health >= 2
overlay.get_node("Heart3").visible = health >= 3
func _count_coins() -> void:
total_coins = get_tree().get_nodes_in_group("coin").size() + 2
func add_point():
score += 1
overlay.get_node("ScoreLabel").text = "Score: " + str(score)
func add_health():
if health < 3:
health += 1
_update_hearts()
func take_damage(force_reload: bool = false):
health -= 1
if health <= 0:
health = 1
score = 0
var player = get_tree().get_first_node_in_group("player")
if player:
player.die()
await get_tree().create_timer(1.0).timeout
get_tree().reload_current_scene()
elif force_reload:
score = 0
_update_hearts()
var player = get_tree().get_first_node_in_group("player")
if player:
player.die()
await get_tree().create_timer(1.0).timeout
get_tree().reload_current_scene()
else:
_update_hearts()
get_tree().get_first_node_in_group("player").take_hit()
func show_end_screen() -> void:
var elapsed = (Time.get_ticks_msec() - start_time) / 1000.0
var end_screen = load("res://scenes/end_screen.tscn").instantiate()
get_tree().root.add_child(end_screen)
end_screen.setup(elapsed, score, total_coins)
get_tree().paused = true