From 0d04ef63c571d9b455ada874b5f8f65a38f0a20b Mon Sep 17 00:00:00 2001 From: Torsten Date: Fri, 7 Nov 2025 09:07:55 +0100 Subject: [PATCH] Started working on updating map serialization/deserialization --- hexmapper/resources/map_data.gd | 2 +- hexmapper/scenes/MainMap/resource_saver.gd | 28 ++++++++++++++++------ hexmapper/scenes/MainMap/startup.gd | 1 + 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/hexmapper/resources/map_data.gd b/hexmapper/resources/map_data.gd index 91df244..800acf7 100644 --- a/hexmapper/resources/map_data.gd +++ b/hexmapper/resources/map_data.gd @@ -1,4 +1,4 @@ class_name MapData extends Resource -@export var cells:Array[Vector2i] = [] +@export var ground_tiles:Array[Vector3i] = [] # x,y,tile_id diff --git a/hexmapper/scenes/MainMap/resource_saver.gd b/hexmapper/scenes/MainMap/resource_saver.gd index bb0ff98..edf51e0 100644 --- a/hexmapper/scenes/MainMap/resource_saver.gd +++ b/hexmapper/scenes/MainMap/resource_saver.gd @@ -8,16 +8,30 @@ func _ready(): func saveMap(absolute_map_filename:String): print("Triggered ResourceSaver.saveMap(%s)" % [absolute_map_filename]) var map_data = MapData.new() - map_data.cells = %GroundMapLayer.get_used_cells() + + var cell_count:int = len(%GroundMapLayer.get_used_cells()) + print("Number of used cells: %i" % [cell_count]) + + for cell_pos in %GroundMapLayer.get_used_cells(): + var tile_id = %GroundMapLayer.get_cell_source_id(cell_pos) + map_data.ground_tiles.append( Vector3i(cell_pos.x, cell_pos.y, tile_id)) + ResourceSaver.save(map_data, absolute_map_filename) print("Saved {0}".format([absolute_map_filename])) func loadMap(map_file_name): # TODO: Clear TilemapLayers before loading - print("loadMap: {0}".format([map_file_name])) - var map:MapData = load(map_file_name) + %GroundMapLayer.clear() - # TODO: Set TileMapLayer cells according to loaded info - for cell in map.cells: - #%GroundMapLayer.get_used_cells() = map.cells - print(cell) + print("loadMap: {0}".format([map_file_name])) + #var map:MapData = load(map_file_name) + var map:MapData = ResourceLoader.load(map_file_name) + for tile_info:Vector3i in map.ground_tiles: + var cell_pos:Vector2i = Vector2i(tile_info[0], tile_info[1]) + var tile_id:int = tile_info[2] + %GroundMapLayer.set_cell(cell_pos, tile_id) + + ## TODO: Set TileMapLayer cells according to loaded info + #for cell in map.cells: +# #%GroundMapLayer.get_used_cells() = map.cells# +# print(cell) diff --git a/hexmapper/scenes/MainMap/startup.gd b/hexmapper/scenes/MainMap/startup.gd index b1037d2..adf0734 100644 --- a/hexmapper/scenes/MainMap/startup.gd +++ b/hexmapper/scenes/MainMap/startup.gd @@ -46,6 +46,7 @@ func load_settings(): var full_map_name = Global.settings.current_project_dir + "/" + Global.settings.current_map_name if FileAccess.file_exists(full_map_name): print("Loading Map: ({0})".format([full_map_name])) + %ResourceSaver.loadMap(full_map_name) else: if DirAccess.dir_exists_absolute(cur_dir) and len(cur_dir)>0: print("Select Map Dialog, because Dir exists: {0}".format([cur_dir]))