asteroids/Scripts/game.gd

104 lines
2.3 KiB
GDScript

extends Node2D
var score: int = 0
var lives: int = 0
var added_lives: int = 0
var score_label: Label
var lives_box: HBoxContainer
var spawner: Node2D
var player: CharacterBody2D
var ui: CanvasLayer
var game_over_ui: Control
var menu_ui: Control
var credits_ui: Control
var life_icon = preload("res://Scenes/life.tscn")
var menu_scn = preload("res://Scenes/main_menu.tscn")
var credits_scn = preload("res://Scenes/credits.tscn")
var game_over_scn = preload("res://Scenes/game_over.tscn")
var ship = preload("res://Scenes/ship.tscn")
var life = preload("res://Sounds/extra_life.wav")
func _ready() -> void:
await get_tree().process_frame
_main_menu()
func set_score(amount: int):
score = amount
score_label.text = "Score: " + str(score)
if floor(score / 10000.0) > added_lives:
added_lives += 1
set_lives(lives + 1)
var snd = AudioStreamPlayer.new()
add_child(snd)
snd.stream = life
snd.play()
snd.finished.connect(func(): snd.queue_free())
func set_lives(amount: int):
lives = amount
var icons = lives_box.get_children()
var diff = lives - len(icons);
if diff > 0:
for i in range(diff):
lives_box.add_child(life_icon.instantiate())
else:
if lives >= 0:
for i in range(abs(diff)):
lives_box.remove_child(icons[len(icons) - 1])
icons.remove_at(len(icons) - 1)
if lives == 0:
spawner.stop()
for node in get_tree().get_nodes_in_group("enemies"):
node.queue_free()
player.queue_free()
score_label.visible = false
game_over_ui = game_over_scn.instantiate()
game_over_ui.new_game.connect(_new_game)
game_over_ui.set_score(score)
ui.add_child(game_over_ui)
func _new_game():
if score_label:
score_label.visible = true
set_lives(3)
spawner.start()
set_score(0)
if game_over_ui:
game_over_ui.queue_free()
if menu_ui:
menu_ui.queue_free()
player = ship.instantiate()
player.position = get_viewport_rect().size / 2
get_tree().current_scene.add_child(player)
func _credits():
if menu_ui:
menu_ui.queue_free()
credits_ui = credits_scn.instantiate()
credits_ui.connect("main_menu", _main_menu)
ui.add_child(credits_ui)
func _main_menu():
if credits_ui:
credits_ui.queue_free()
menu_ui = menu_scn.instantiate()
menu_ui.new_game.connect(_new_game)
menu_ui.credits.connect(_credits)
menu_ui.quit_game.connect(_quit_game)
ui.add_child(menu_ui)
func _quit_game():
get_tree().quit()