Skip to content

Commit

Permalink
Use built in scale for MMIs
Browse files Browse the repository at this point in the history
  • Loading branch information
TokisanGames committed Sep 24, 2024
1 parent a4ce492 commit 438e5f7
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 31 deletions.
10 changes: 9 additions & 1 deletion src/terrain_3d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -858,7 +858,15 @@ void Terrain3D::set_vertex_spacing(const real_t p_spacing) {
_destroy_instancer();
_initialize();
_data->_vertex_spacing = _vertex_spacing;
_instancer->scale_positions(scale);
Dictionary mmis = _instancer->get_mmis();
Array keys = mmis.keys();
for (int i = 0; i < keys.size(); i++) {
MultiMeshInstance3D *mmi = cast_to<MultiMeshInstance3D>(mmis[keys[i]]);
if (mmi != nullptr) {
mmi->set_scale(Vector3(_vertex_spacing, 1.f, _vertex_spacing));
}
}
update_region_labels();
}
if (IS_EDITOR && _plugin != nullptr) {
_plugin->call("update_region_grid");
Expand Down
29 changes: 0 additions & 29 deletions src/terrain_3d_instancer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -515,35 +515,6 @@ void Terrain3DInstancer::update_transforms(const AABB &p_aabb) {
}
}

void Terrain3DInstancer::scale_positions(const real_t p_scale) {
IS_DATA_INIT_MESG("Instancer isn't initialized.", VOID);
real_t scale = CLAMP(p_scale, 0.01f, 100.0f);
if (p_scale == 1.f) {
return;
}
LOG(INFO, "Scaling all instancer transforms by: ", scale);
TypedArray<Terrain3DRegion> regions = _terrain->get_data()->get_regions_active();
for (int i = 0; i < regions.size(); i++) {
Ref<Terrain3DRegion> region = regions[i];
if (region.is_null()) {
continue;
}
Dictionary mms = region->get_multimeshes();
for (int j = 0; j < mms.keys().size(); j++) {
Ref<MultiMesh> mm = mms.get(mms.keys()[j], nullptr);
if (mm.is_null()) {
continue;
}
for (int k = 0; k < mm->get_instance_count(); k++) {
Transform3D xf = mm->get_instance_transform(k);
xf.origin.x *= scale;
xf.origin.z *= scale;
mm->set_instance_transform(k, xf);
}
}
}
}

// Changes the ID of a mesh, without changing the mesh on the ground
// Called when the mesh asset id has changed. Updates Multimeshes and MMIs dictionary keys
void Terrain3DInstancer::swap_ids(const int p_src_id, const int p_dst_id) {
Expand Down
1 change: 0 additions & 1 deletion src/terrain_3d_instancer.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ class Terrain3DInstancer : public Object {
void add_transforms(const int p_mesh_id, const TypedArray<Transform3D> &p_xforms, const TypedArray<Color> &p_colors = TypedArray<Color>());
void append_multimesh(const Vector2i &p_region_loc, const int p_mesh_id, const TypedArray<Transform3D> &p_xforms, const TypedArray<Color> &p_colors, const bool p_clear = false);
void update_transforms(const AABB &p_aabb);
void scale_positions(const real_t p_scale);

void swap_ids(const int p_src_id, const int p_dst_id);
Ref<MultiMesh> get_multimeshp(const Vector3 &p_global_position, const int p_mesh_id) const;
Expand Down

0 comments on commit 438e5f7

Please sign in to comment.