added support for obstacles to levels again

This commit is contained in:
2026-02-07 04:29:19 +11:00
parent 35a0ec30a5
commit f7e478357b
19 changed files with 49 additions and 43 deletions

View File

@@ -5,4 +5,3 @@ class_name LevelSpecs extends Resource
@export var waves: Array[WaveConfig]
@export var points_blocked: Array[int]
@export var zone_scene: PackedScene
@export var data_path: String

View File

@@ -89,12 +89,12 @@ func networked_set_wave(wave_number: int) -> void:
set_upcoming_wave()
func spawn_level(scene: PackedScene, path: String) -> void:
func spawn_level(scene: PackedScene) -> void:
level = scene.instantiate() as Level
var flow_field: FlowField = FlowField.new()
level.flow_field = flow_field
level.add_child(flow_field)
flow_field.load_from_data(FlowFieldTool.load_flow_field_from_disc(path))
flow_field.load_from_data(FlowFieldTool.load_flow_field_from_disc(level.data_path))
level.load_flow_field()
level.game_manager = self
for x: EnemySpawner in level.enemy_spawns:
@@ -106,6 +106,7 @@ func spawn_level(scene: PackedScene, path: String) -> void:
root_scene.add_child(level)
for spawner: EnemySpawner in level.enemy_spawns:
spawner.create_path()
level.generate_obstacle(level_specs.points_blocked)
func spawn_players() -> void:
@@ -298,7 +299,8 @@ func end_wave() -> void:
#else:
#shop_chance += 0.09
wave_finished.emit()
set_upcoming_wave()
if wave < wave_limit:
set_upcoming_wave()
@rpc("reliable", "call_local")
@@ -322,7 +324,7 @@ func setup() -> void:
connected_players_nodes.clear()
#Spawn new stuff
spawn_level(level_specs.zone_scene, level_specs.data_path)
spawn_level(level_specs.zone_scene)
#Set starting parameters
game_active = false

View File

@@ -12,6 +12,7 @@ extends Node3D
@export var shop: ShopStand
@export var obstacle_scenes: Array[PackedScene]
@export var obstacles: Array[PackedScene]
@export var data_path: String
var walls: Dictionary[FlowNode, TowerBase] = {}
var wall_id: int = 0
var tower_base_scene: PackedScene = load("res://Scenes/TowerBase/tower_base.tscn")
@@ -84,6 +85,20 @@ func spawn_wall(point: FlowNode, name_id: int, caller_id: int) -> void:
disable_path_tower_frames()
func generate_obstacle(ids: Array[int]) -> void:
var points: Array[FlowNode] = []
for node: FlowNode in flow_field.nodes:
if ids.has(node.node_id):
points.append(node)
for node: FlowNode in points:
var obstacle: Node3D = obstacles[0].instantiate()
obstacle.position = node.position
flow_field.toggle_buildable(node)
if node.traversable:
flow_field.toggle_traversable(node)
add_child(obstacle)
func generate_obstacles() -> void:
pass
#print(str(multiplayer.get_unique_id()) + " spawning obstacles with seed: " + str(Game.rng.seed))