diff --git a/addons/gaea/generators/generator.gd b/addons/gaea/generators/generator.gd index fa5e8eea..1019833e 100644 --- a/addons/gaea/generators/generator.gd +++ b/addons/gaea/generators/generator.gd @@ -73,6 +73,17 @@ func get_seed() -> int: return seed +## Returns the currently generated grid as a [PackedByteArray], allowing you to deserialize it later using [method deserialize]. +func serialize() -> PackedByteArray: + return var_to_bytes(grid.get_grid()) + + +## Deserializes the [param bytes] obtained from [method serialize], setting the grid to its value. +func deserialize(bytes: PackedByteArray): + grid.set_grid_serialized(bytes) + grid_updated.emit() + + ### Modifiers ### diff --git a/addons/gaea/grid.gd b/addons/gaea/grid.gd index f8195c23..1424f614 100644 --- a/addons/gaea/grid.gd +++ b/addons/gaea/grid.gd @@ -53,6 +53,21 @@ func set_grid(grid: Dictionary) -> void: _grid = grid +## Sets the grid to the serialized grid that [param bytes] represents. See [method GaeaGenerator.serialize] and [method GaeaGenerator.deserialize]. +func set_grid_serialized(bytes: PackedByteArray) -> void: + var grid = bytes_to_var(bytes) + if not (grid is Dictionary): + push_error("Attempted to deserialize invalid grid") + return + + for layer in grid: + for tile in grid[layer]: + var object = grid[layer][tile] + if object is EncodedObjectAsID: + grid[layer][tile] = instance_from_id(object.get_object_id()) + _grid = grid + + ## Returns the grid [Dictionary]. func get_grid() -> Dictionary: return _grid