Table of Contents

Class TerrainPersistence

Namespace
GridPlacement.GDScript
Assembly
MoonBark.GridPlacement.GDScript.dll

Utility for saving and loading painted terrain cells on TileMapLayer nodes.\n\nTerrain paint data (set via [method TileMapLayer.set_cells_terrain_connect]) is ephemeral — it lives only on the live TileMapLayer and is lost on scene reload. This class provides [method save_terrain] and [method load_terrain] to serialize/deserialize terrain cell data so painted terrain survives across sessions.\n\nEach cell record captures (cell, terrain_set, terrain) — the three values needed to restore via [method TileMapLayer.set_cells_terrain_connect]. The TileSet is assumed to be the same resource used at paint time; terrain indices are scoped to that TileSet.\n\nUsage: # Save TerrainPersistence.save_terrain(tile_map, "user://terrain_save.res") # Load TerrainPersistence.load_terrain(tile_map, "user://terrain_save.res")

class TerrainPersistence extends RefCounted
TerrainPersistence

Properties

save_data

var save_data = loaded as TerrainSaveData

tile_data

var tile_data = map.get_cell_tile_data(cell)

terrain_set

var terrain_set: int = tile_data.terrain_set

terrain

var terrain: int = tile_data.terrain

result

var result = ResourceSaver.save(save_data, p_path)

loaded

var loaded: Resource = ResourceLoader.load(p_path, "", ResourceLoader.CACHE_MODE_REPLACE)

save_data

var save_data = loaded as TerrainSaveData

save_data

var save_data = loaded as TerrainSaveData

layer_path

var layer_path = map.get_path()

tile_data

var tile_data = map.get_cell_tile_data(cell)

terrain_set

var terrain_set: int = tile_data.terrain_set

result

var result = ResourceSaver.save(save_data, p_path)

loaded

var loaded: Resource = ResourceLoader.load(p_path, "", ResourceLoader.CACHE_MODE_REPLACE)

save_data

var save_data = loaded as TerrainSaveData

map_by_path

var map_by_path: Dictionary = {}

cells_by_layer

var cells_by_layer: Dictionary = {}

unlayered_cells

var unlayered_cells: Array[Dictionary] = []

layer

var layer: String = entry.get("layer", "")

target_map

var target_map: TileMapLayer = map_by_path.get(layer_path, null)

fallback_map

var fallback_map: TileMapLayer = p_targeting_state.maps[0]

groups

var groups: Dictionary = {}

t_set

var t_set: int = entry.get("terrain_set", -1)

t

var t: int = entry.get("terrain", -1)

cell

var cell = Vector2i(entry.get("x", 0), entry.get("y", 0))

key

var key = "%d_%d" % [t_set, t]

group

var group: Dictionary = p_groups[key]

Methods

save_terrain

static func save_terrain(p_tile_map: TileMapLayer, p_path: String) -> Error:

Parameters

p_tile_map
p_path

Returns

load_terrain

static func load_terrain(p_tile_map: TileMapLayer, p_path: String) -> Error:

Parameters

p_tile_map
p_path

Returns

save_all_terrain

static func save_all_terrain(p_targeting_state: GridTargetingState, p_path: String) -> Error:

Parameters

p_targeting_state
p_path

Returns

load_all_terrain

static func load_all_terrain(p_targeting_state: GridTargetingState, p_path: String) -> Error:

Parameters

p_targeting_state
p_path

Returns