Now About Social Code
summaryrefslogtreecommitdiff
path: root/scripts/dungeon_manager.gd
diff options
context:
space:
mode:
authorLucas Fryzek <lucas.fryzek@fryzekconcepts.com>2024-09-29 23:04:54 +0100
committerLucas Fryzek <lucas.fryzek@fryzekconcepts.com>2024-09-29 23:04:54 +0100
commite668733042757942c0719a3c5966796b1032ba93 (patch)
treeab40716f1c7d4a1c3e3efb6bd8200b91377b07ec /scripts/dungeon_manager.gd
parenta10570d865106dcaf1037979cad1788da03e989d (diff)
bsp_level_generator: Add more tiles & move tile logic to level gen
Move more of the tile generation logic like player starting pos, level exit, enemy location, etc to bsp_level_generation and have dungeon_manager just place nodes based on whats in the grid.
Diffstat (limited to 'scripts/dungeon_manager.gd')
-rw-r--r--scripts/dungeon_manager.gd68
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()