diff --git a/scripts/RoomBattleInstance.gd b/scripts/RoomBattleInstance.gd index dcb61dd..c3cb21b 100644 --- a/scripts/RoomBattleInstance.gd +++ b/scripts/RoomBattleInstance.gd @@ -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) @@ -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) diff --git a/scripts/RoomManager.gd b/scripts/RoomManager.gd index 14b194a..7134aab 100644 --- a/scripts/RoomManager.gd +++ b/scripts/RoomManager.gd @@ -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] diff --git a/scripts/progression.gd b/scripts/progression.gd index 7f94740..036939f 100644 --- a/scripts/progression.gd +++ b/scripts/progression.gd @@ -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: @@ -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)