diff options
Diffstat (limited to 'scripts/dungeon_manager.gd')
-rw-r--r-- | scripts/dungeon_manager.gd | 68 |
1 files changed, 17 insertions, 51 deletions
diff --git a/scripts/dungeon_manager.gd b/scripts/dungeon_manager.gd index 39b6131..e08814f 100644 --- a/scripts/dungeon_manager.gd +++ b/scripts/dungeon_manager.gd @@ -19,56 +19,24 @@ func spawn_level() -> void: bsp_level.connect("grid_generated", _grid_generated) $LevelContainer.add_child(bsp_level) -func create_enemies() -> void: - var num_enemies = randi_range(4, 10) - - for i in range(num_enemies): - var enemy = enemy_inst.instantiate() - - # Target is controlled through enemy wander AI - enemy.target = null - - var found_pos = false - while not found_pos: - var pos = Vector2i(randi_range(0, grid_width-1), randi_range(0, grid_height-1)) - - if grid[pos.y * grid_width + pos.x] == Tile.Tile.FLOOR: +func place_objects() -> void: + for y in range(grid_height): + for x in range(grid_width): + var pos = Vector2i(x, y) + if grid[pos.y * grid_width + pos.x] == Tile.Tile.PLAYER: + $Player.position = Vector3(pos.x, 0, pos.y) + Vector3(0.5, 0, 0.5) + elif grid[pos.y * grid_width + pos.x] == Tile.Tile.ENEMY: + var enemy = enemy_inst.instantiate() + # Target is controlled through enemy wander AI + enemy.target = null enemy.position = Vector3(pos.x, 0, pos.y) + Vector3(0.5, 0, 0.5) - found_pos = true - print("Placing at ", pos) - - $LevelContainer.add_child.call_deferred(enemy) - -func create_exit() -> void: - var found_pos = false - var exit: Area3D = exit_inst.instantiate() - exit.connect("body_entered", _on_player_exit) - while not found_pos: - var pos = Vector2i(randi_range(0, grid_width-1), randi_range(0, grid_height-1)) - var left = pos + Vector2i.LEFT - var right = pos + Vector2i.RIGHT - var up = pos + Vector2i.UP - var down = pos + Vector2i.DOWN - - if grid[pos.y * grid_width + pos.x] == Tile.Tile.FLOOR \ - and grid[left.y * grid_width + left.x] == Tile.Tile.FLOOR \ - and grid[right.y * grid_width + right.x] == Tile.Tile.FLOOR \ - and grid[up.y * grid_width + up.x] == Tile.Tile.FLOOR \ - and grid[down.y * grid_width + down.x] == Tile.Tile.FLOOR: - exit.position = Vector3(pos.x, 0, pos.y) + Vector3(0.5, 0, 0.5) - found_pos = true - - $LevelContainer.add_child.call_deferred(exit) + $LevelContainer.add_child.call_deferred(enemy) + elif grid[pos.y * grid_width + pos.x] == Tile.Tile.PORTAL: + var exit: Area3D = exit_inst.instantiate() + exit.connect("body_entered", _on_player_exit) + exit.position = Vector3(pos.x, 0, pos.y) + Vector3(0.5, 0, 0.5) + $LevelContainer.add_child.call_deferred(exit) -func place_player() -> void: - var found_pos = false - while not found_pos: - var pos = Vector2i(randi_range(0, grid_width-1), randi_range(0, grid_height-1)) - - if grid[pos.y * grid_width + pos.x] == Tile.Tile.FLOOR: - $Player.position = Vector3(pos.x, 0, pos.y) + Vector3(0.5, 0, 0.5) - found_pos = true - func reset_level() -> void: for child in $LevelContainer.get_children(): print("Child is ", child) @@ -90,6 +58,4 @@ func _grid_generated(p_grid: Array[Tile.Tile], p_grid_width: int, p_grid_height: grid_width = p_grid_width grid_height = p_grid_height - create_enemies() - create_exit() - place_player() + place_objects() |