64 lines
1.7 KiB
GDScript
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
|