diff --git a/enemy.gd b/enemy.gd index 87972c8..e9e4046 100644 --- a/enemy.gd +++ b/enemy.gd @@ -36,7 +36,7 @@ func _process(delta): func explode(): - print_debug("Enemy died!") + print_debug("Enemy explode!") speed = 0 $AnimationPlayer.play("explode") set_deferred("monitoring", false) diff --git a/event_bus.gd b/event_bus.gd index d2b4464..95a4a10 100644 --- a/event_bus.gd +++ b/event_bus.gd @@ -4,6 +4,6 @@ extends Node signal shield_changed(max_value: int, old_value: int, new_value: int) signal player_died() -signal enemy_died() +signal enemy_died(value: int) @warning_ignore_restore("unused_signal") # put any future signals you add between the two ignore annotations diff --git a/main.gd b/main.gd index 08652df..3c70bcf 100644 --- a/main.gd +++ b/main.gd @@ -3,6 +3,7 @@ extends Node2D var enemy = preload("res://enemy.tscn") var score = 0 var playing = false +var enemy_count: int = 0 @onready var start_button = $CanvasLayer/CenterContainer/Start @onready var game_over = $CanvasLayer/CenterContainer/GameOver @@ -15,20 +16,25 @@ func _ready(): # spawn_enemies() func spawn_enemies(): + for x in range(9): - for y in range(3): + for y in range(3): var e = enemy.instantiate() var pos = Vector2(x * (16 + 8) + 24, 16 * 4 + y * 16) add_child(e) e.start(pos) - EventBus.enemy_died.emit() + enemy_count = get_tree().get_nodes_in_group("enemies").size() + print(enemy_count) - -func _on_enemy_died(value): - print_debug("Enemy died!") +func _on_enemy_died(value: int): score += value + enemy_count -= 1 $CanvasLayer/UI.update_score(score) + print_debug(enemy_count) + if enemy_count == 0: + print("All enemies defeated!") + win_game() func _on_player_died(): playing = false @@ -48,3 +54,10 @@ func new_game(): func _on_start_pressed(): start_button.hide() new_game() + +func win_game(): + playing = false + game_over.show() + await get_tree().create_timer(2).timeout + game_over.hide() + start_button.show() diff --git a/player.gd b/player.gd index 317437e..c52128b 100644 --- a/player.gd +++ b/player.gd @@ -77,7 +77,7 @@ func _on_gun_cooldown_timeout() -> void: func _on_area_entered(area): if area.is_in_group("enemies"): area.explode() - shield -= max_shield / 2 + shield -= int(max_shield / 2) damage_taken.emit() if area.is_in_group("enemy_bullets"): damage_taken.emit() diff --git a/ui.gd b/ui.gd index b36b0b2..633abf8 100644 --- a/ui.gd +++ b/ui.gd @@ -24,8 +24,6 @@ func _on_shield_changed(max_value: int, old_value: int, new_value: int) -> void: _on_fx_shield_ui() - - func _on_fx_shield_ui(): shader_active = true shield_bar.material.set_shader_parameter("toggle", 1.0)