Skip to content

Commit

Permalink
Upgrade instancer data from 0.9.2 or 0.9.3-dev
Browse files Browse the repository at this point in the history
  • Loading branch information
TokisanGames committed Oct 20, 2024
1 parent b32c60d commit ac156ce
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 10 deletions.
18 changes: 15 additions & 3 deletions src/terrain_3d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1604,6 +1604,7 @@ void Terrain3D::set_storage(const Ref<Terrain3DStorage> &p_storage) {
}
}

// This function upgrades a v0.9.2 storage to split regions in v0.9.3
void Terrain3D::split_storage() {
if (_storage.is_null()) {
LOG(ERROR, "Storage has not been loaded");
Expand All @@ -1618,24 +1619,35 @@ void Terrain3D::split_storage() {
return;
}

// Upgrade maps
set_region_size(SIZE_1024);
TypedArray<Vector2i> locations = _storage->get_region_offsets();
TypedArray<Image> hmaps = _storage->get_maps(Terrain3DStorage::TYPE_HEIGHT);
TypedArray<Image> ctlmaps = _storage->get_maps(Terrain3DStorage::TYPE_CONTROL);
TypedArray<Image> clrmaps = _storage->get_maps(Terrain3DStorage::TYPE_COLOR);
Dictionary mms = _storage->get_multimeshes();

for (int i = 0; i < locations.size(); i++) {
Ref<Terrain3DRegion> region;
region.instantiate();
region->set_location(locations[i]);
region->set_height_map(hmaps[i]);
region->set_control_map(ctlmaps[i]);
region->set_color_map(clrmaps[i]);
region->set_instances(mms[locations[i]]); // TODO BROKEN - upgrade from 0.9.2
_data->add_region(region, false);
LOG(INFO, "Splicing region ", locations[i]);
}

//Upgrade instancer data
Dictionary mms = _storage->get_multimeshes();
Array rkeys = mms.keys();
for (int i = 0; i < rkeys.size(); i++) {
Vector2i region_loc = rkeys[i];
Dictionary mesh_dict = mms[region_loc];
Array mkeys = mesh_dict.keys();
for (int j = 0; j < mkeys.size(); j++) {
int mesh_id = mkeys[j];
_instancer->add_multimesh(mesh_id, mesh_dict[mesh_id], Transform3D(), false);
}
}
_storage.unref();
_data->force_update_maps();
_instancer->force_update_mmis();
Expand Down
22 changes: 22 additions & 0 deletions src/terrain_3d_instancer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,28 @@ void Terrain3DInstancer::initialize(Terrain3D *p_terrain) {
}
IS_DATA_INIT_MESG("Terrain or storage not ready yet", VOID);
LOG(INFO, "Initializing Instancer");

{ // DEPRECATED 0.9.3 - Remove 1.0
// This block upgrades 0.9.3-dev multimeshes to _instances
bool upgraded = false;
TypedArray<Terrain3DRegion> regions = _terrain->get_data()->get_regions_active();
for (int i = 0; i < regions.size(); i++) {
Ref<Terrain3DRegion> region = regions[i];
if (!region->get_multimeshes().is_empty()) {
Dictionary mesh_dict = region->get_multimeshes();
// Dictionary[mesh_id:int] -> MultiMesh
Array mkeys = mesh_dict.keys();
for (int j = 0; j < mkeys.size(); j++) {
int mesh_id = mkeys[j];
add_multimesh(mesh_id, mesh_dict[mesh_id], Transform3D(), false);
upgraded = true;
}
mesh_dict.clear();
}
}
LOG(WARN, "Upgrading v0.9.3-dev instancer data. Save to write changes to disk.");
}

_update_mmis();
}

Expand Down
6 changes: 0 additions & 6 deletions src/terrain_3d_region.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,6 @@ Dictionary Terrain3DRegion::get_data() const {
dict["deleted"] = _deleted;
dict["edited"] = _edited;
dict["modified"] = _modified;
//dict["instance_id"] = String::num_uint64(get_instance_id()); // don't commit
dict["version"] = _version;
dict["region_size"] = _region_size;
dict["vertex_spacing"] = _vertex_spacing;
Expand Down Expand Up @@ -310,11 +309,6 @@ Ref<Terrain3DRegion> Terrain3DRegion::duplicate(const bool p_deep) {

// DEPRECATED 0.9.3-dev - Remove 1.0
void Terrain3DRegion::set_multimeshes(const Dictionary &p_multimeshes) {
// TODO
// This function will upgrade 0.9.3-dev users to _instances
// Drop _multimeshes
// Translate p_multimeshes into _instances
// Consider changing data format to 0.931
_multimeshes = p_multimeshes;
}

Expand Down
1 change: 0 additions & 1 deletion src/terrain_3d_region.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ class Terrain3DRegion : public Resource {

// DEPRECATED 0.9.3-dev - Remove 1.0
void set_multimeshes(const Dictionary &p_multimeshes);
// TODO Drop this
Dictionary get_multimeshes() const { return _multimeshes; }

protected:
Expand Down

0 comments on commit ac156ce

Please sign in to comment.