diff options
Diffstat (limited to 'client/map/map.gd')
-rw-r--r-- | client/map/map.gd | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/client/map/map.gd b/client/map/map.gd index fe8ddd66..5d6719e9 100644 --- a/client/map/map.gd +++ b/client/map/map.gd @@ -21,8 +21,8 @@ extends Node3D var tile_by_pos: Dictionary = {} # Dictionary[String, [Vector2i, String, Tile, Array]] var autobake = false var currently_baked = false -var floor_mesher := FloorMesher.new() var floor_node := MeshInstance3D.new() +var tile_factory = TileFactory.new() func get_tile_name(pos: Vector2i): # -> String? var e = tile_by_pos.get(str(pos)) @@ -35,7 +35,7 @@ func get_tile_instance(pos: Vector2i) -> Tile: func set_tile(pos: Vector2i, name_: String, neighbors: Array = [null,null,null,null]) -> Tile: clear_tile(pos) - var tile := TileFactory.produce(name_, pos, neighbors, floor_mesher) + var tile := tile_factory.produce(name_, pos, neighbors) add_child(tile) tile.position = Vector3(pos.x, 0, pos.y) tile_by_pos[str(pos)] = [pos, name_, tile, neighbors] @@ -45,20 +45,26 @@ func clear_tile(pos: Vector2i): var tile = get_tile_instance(pos) if tile == null: return if tile.item != null: tile.item.queue_free() + if tile is FloorLike: + var floor_mesher = tile_factory.floor_meshers.get(tile.fm_id()) + if floor_mesher != null: + floor_mesher.remove_tile(pos) + tile.queue_free() tile_by_pos.erase(str(pos)) tile.name += "_queued_free" - tile.queue_free() - floor_mesher.remove_tile(pos) @onready var voxelgi: VoxelGI = $VoxelGI func _ready(): Settings.hook_changed("graphics.gi", false, apply_gi_setting) floor_node.material_override = preload("res://map/tiles/floor_material.tres") + for fm in tile_factory.floor_meshers.values(): + add_child(fm.mesh_instance) add_child(floor_node) func flush() -> void: - if floor_mesher != null: floor_node.mesh = floor_mesher.flush() + for fm in tile_factory.floor_meshers.values(): + fm.flush() gi_bake() func apply_gi_setting(state): |