Skip to content

Commit

Permalink
Redo enemy spawning
Browse files Browse the repository at this point in the history
  • Loading branch information
davnotdev committed May 17, 2024
1 parent a1def39 commit cdfae9a
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 41 deletions.
57 changes: 19 additions & 38 deletions scripts/RoomBattleInstance.gd
Original file line number Diff line number Diff line change
Expand Up @@ -12,44 +12,30 @@ class_name RoomBattleInstance
@export var ogre_scene: PackedScene
@export var goblin_scene: PackedScene

var waves_left: Array[BattleWave]
signal battle_ended

class BattleWave:
var total_enemy_count: int
var enemies_left: int
var current_wave = 0
var current_wave_enemy_count = 0
var total_waves

static func init_empty() -> BattleWave:
var this = BattleWave.new()
this.total_enemy_count = 0
this.enemies_left = 0
return this
signal battle_ended

func begin_battle():
# TODO: Make this less bad
for i in log(room_level) / log(2) + 1:
var wave = BattleWave.new()
wave.total_enemy_count = clamp(i + Progression.get_initial_enemy_count(), 1, 12)
wave.enemies_left = wave.total_enemy_count + 1
waves_left.push_front(wave)
waves_left[0].enemies_left = 0
var last = BattleWave.new()
last.total_enemy_count = 0
last.enemies_left = 0
waves_left.push_back(last)
total_waves = roundi(log(room_level) / log(2) + 1)

func _process(_delta):
if len(waves_left) <= 1:
return

var current_wave = waves_left[0]
if current_wave.enemies_left == 0:
if len(waves_left) <= 2:
# Prepare to call the pop_enemy function
current_wave -= 1
current_wave_enemy_count += 1
pop_enemy()

func pop_enemy():
current_wave_enemy_count -= 1
if current_wave_enemy_count == 0:
if current_wave == total_waves:
battle_ended.emit()
queue_free()
return

for _i in current_wave.total_enemy_count:

current_wave_enemy_count = clamp(roundi(current_wave + Progression.get_initial_enemy_count()), 1, 15)
for _i in range(current_wave_enemy_count):
var rand_position = get_random_room_position()

var enemy_type = randi_range(0, 4)
Expand All @@ -65,20 +51,15 @@ func _process(_delta):
enemy = ogre_scene.instantiate()
elif enemy_type == 4:
enemy = goblin_scene.instantiate()

enemy.player = player
enemy.position = rand_position
enemy.room_battle_instance = self
enemy.indicator_border = indicator_border
enemy.room_level = room_level
get_parent().add_child(enemy)
waves_left.pop_front()

func pop_enemy():
if len(waves_left) == 0:
return
var current_wave = waves_left[0]
current_wave.enemies_left -= 1
print(current_wave.enemies_left)
current_wave += 1;

func get_random_room_position() -> Vector2:
var x = randf_range(-room_size.x, room_size.x)
Expand Down
2 changes: 1 addition & 1 deletion scripts/RoomManager.gd
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ var entered_room_areas: Array[int]
var triggered_room: Room = null
var triggered_battle: RoomBattleInstance

var room_level = 2
var room_level = 1

# It can be assumed that these arrays can be indexed with orginal room idx
var doors: Array[Door]
Expand Down
4 changes: 2 additions & 2 deletions scripts/progression.gd
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
extends Node2D

var dungeon_level = 1
var initial_enemy_count = 2
var initial_enemy_count = 3
var player_health = null

func get_dungeon_level() -> int:
Expand All @@ -10,7 +10,7 @@ func get_dungeon_level() -> int:
func get_room_count() -> int:
if dungeon_level == 0:
return 1
if dungeon_level <= 8:
elif dungeon_level <= 8:
return round((0.4 * (dungeon_level - 1)) ** 2 + 5)
else:
return round(log(dungeon_level) / log(2) + 24)
Expand Down

0 comments on commit cdfae9a

Please sign in to comment.