Skip to content

Commit

Permalink
Implement very basic Enemy Waves
Browse files Browse the repository at this point in the history
This has a lot of flaws which need to be fixed or changed, but the basic thing works.
  • Loading branch information
EinsKatze committed Dec 13, 2023
1 parent ab04194 commit d8e044f
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 18 deletions.
13 changes: 12 additions & 1 deletion entities/ui/game_ui.tscn
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
[gd_scene load_steps=8 format=3 uid="uid://c5bpm1i4e17tu"]
[gd_scene load_steps=9 format=3 uid="uid://c5bpm1i4e17tu"]

[ext_resource type="Script" path="res://scripts/ui/towers_panel.gd" id="1_x58qh"]
[ext_resource type="PackedScene" uid="uid://cxhkiae15b8lv" path="res://entities/tower/speed_tower.tscn" id="2_cya8s"]
[ext_resource type="PackedScene" uid="uid://deuhw3whq8lk5" path="res://entities/ui/tower_button.tscn" id="2_h3r6b"]
[ext_resource type="Script" path="res://scripts/ui/healthui.gd" id="2_y5457"]
[ext_resource type="PackedScene" uid="uid://c5ouqw68u8sy3" path="res://entities/ui/money_ui.tscn" id="3_15x11"]
[ext_resource type="Script" path="res://entities/ui/waveui.gd" id="5_a80xb"]
[ext_resource type="PackedScene" uid="uid://dofqeudsrivo2" path="res://entities/ui/game_speed.tscn" id="6_mepws"]

[sub_resource type="SystemFont" id="SystemFont_lad62"]
Expand Down Expand Up @@ -43,6 +44,16 @@ theme_override_font_sizes/font_size = 28
text = "100 ❤️"
script = ExtResource("2_y5457")

[node name="Wave" type="Label" parent="."]
offset_left = 10.0
offset_top = 50.0
offset_right = 184.0
offset_bottom = 98.0
theme_override_fonts/font = SubResource("SystemFont_lad62")
theme_override_font_sizes/font_size = 28
text = "Wave: "
script = ExtResource("5_a80xb")

[node name="Money" parent="." instance=ExtResource("3_15x11")]
offset_left = 831.0
offset_top = 913.0
Expand Down
7 changes: 7 additions & 0 deletions entities/ui/waveui.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
extends Label

func _ready():
helper.get_game().connect("wave_update", _on_wave_update)

func _on_wave_update(amount) -> void:
text = "Wave: " + str(amount)
34 changes: 24 additions & 10 deletions main.gd
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@ extends Node2D

var health: int = 100
var money: int = 100
var difficulty: int = 5
var wave: int = 0
var enemyList: Array

var b_in_ui = false
@onready var enemy = preload("res://entities/enemy.tscn")
@onready var spawners: Array = get_tree().get_nodes_in_group("spawn_location")

signal player_health_update
signal player_money_update
signal wave_update

func set_game_speed(speed):
Engine.time_scale = speed
Expand All @@ -21,13 +25,9 @@ func _ready():
eventmanager.connect("on_buy_tower", _on_buy_tower)
eventmanager.connect("on_player_hover_ui", on_player_hover_ui)
eventmanager.connect("on_toggle_game_speed", _on_toggle_game_speed)
eventmanager.connect("on_enemy_killed", onEnemyKilled)

emit_signal("player_money_update", money)
for spawner in spawners:
var new_enemy = enemy.instantiate()
new_enemy.speed = randf_range(60.0, 120.0)
new_enemy.set_progress(randf_range(0.0, 20.0)) # avoid enemies spawning exactly on top of each other
spawner.add_child(new_enemy)

func _on_buy_tower(price) -> void:
money -= price
Expand All @@ -37,11 +37,19 @@ func on_player_hover_ui(b_is_in_ui) -> void:
b_in_ui = b_is_in_ui

func _on_timer_timeout():
for spawner in spawners:
var new_enemy = enemy.instantiate()
new_enemy.speed = randf_range(40.0, 120.0)
new_enemy.set_progress(randf_range(0.0, 20.0))
spawner.add_child(new_enemy)
# TODO: Different Enemy Types | ex. Instead of Spawning 5 Enemies, spawn a more difficult one
# TODO: (may be fixed with the todo above): When large amounts of enemies need to be spawned, the spawning lags the game
if enemyList == []:
wave += 1
emit_signal("wave_update", wave)
for i in difficulty:
var spawner = spawners[randi_range(0, spawners.size()-1)]
var new_enemy = enemy.instantiate()
new_enemy.speed = randf_range(40.0, 120.0)
spawner.add_child(new_enemy)
enemyList.append(new_enemy)
difficulty = difficulty + ceil(wave * 1.2)
print("Difficulty: " + str(difficulty))

func get_health() -> int:
return health
Expand All @@ -56,6 +64,12 @@ func _on_damage_player(value) -> void:
health -= value
emit_signal("player_health_update")

func onEnemyKilled(enemy) -> void:
enemyList.erase(enemy)
money += 1
emit_signal("player_money_update", money)
# TODO: Dont add money when the enemy gets destroyed due to finishing the path

func _on_toggle_game_speed(b_sped_up):
if b_sped_up:
set_game_speed(3)
Expand Down
15 changes: 10 additions & 5 deletions main.tscn

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions scripts/autoload/eventmanager.gd
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ signal tower_button_pressed(towerButton)
signal on_buy_tower(price)
signal on_player_hover_ui(b_is_hovered)
signal on_toggle_game_speed(bSpedUp)
signal on_enemy_killed(enemy)

func broadcast_player_take_damage(amount):
emit_signal("on_player_take_damage", amount)
Expand All @@ -22,3 +23,6 @@ func broadcast_hover_ui(b_is_hovered):

func broadcast_toggle_game_speed(b_sped_up):
emit_signal("on_toggle_game_speed", b_sped_up)

func broadcast_on_enemy_killed(enemy):
emit_signal("on_enemy_killed", enemy)
5 changes: 3 additions & 2 deletions scripts/enemy.gd
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ var health = 2
var damage = 5

func _ready():
progress = 0
progress = randf_range(0.0, 40.0) # avoid enemies spawning exactly on top of each other

func _process(delta):
sprite_reference.material.set_shader_parameter("progress", get_hit_timer_progress())
Expand All @@ -21,6 +21,7 @@ func _physics_process(delta):
progress += speed * delta
else:
eventmanager.broadcast_player_take_damage(get_damage())
eventmanager.broadcast_on_enemy_killed(self) # broadcast enemy got killed
queue_free()

func get_damage():
Expand All @@ -32,5 +33,5 @@ func _on_area_2d_area_entered(area):
health -= area.get_damage()
area.queue_free() # destroy the projectile
if health == 0:
eventmanager.broadcast_on_enemy_killed(self) # broadcast enemy got killed
queue_free() # "kill" the enemy
print("Enemy died")

0 comments on commit d8e044f

Please sign in to comment.