chore: modifiers are aware of parent terrain

This commit is contained in:
Sara Gerretsen 2026-02-25 20:21:13 +01:00
parent 80eb6ef4c0
commit 953e4abe5b
3 changed files with 18 additions and 6 deletions

View file

@ -9,16 +9,27 @@ void Terrain::_bind_methods() {
BIND_PROPERTY(Variant::INT, thread_count); BIND_PROPERTY(Variant::INT, thread_count);
} }
void Terrain::ready() { void Terrain::child_order_changed() {
construct_chunk_grid(); this->modifiers.clear();
for (Variant var : get_children()) {
if (TerrainModifier * mod{ cast_to<TerrainModifier>(var) }) {
mod->set_terrain(this);
this->modifiers.push_back(mod);
}
}
} }
void Terrain::_notification(int what) { void Terrain::_notification(int what) {
switch (what) { switch (what) {
default: default:
return; return;
case NOTIFICATION_ENTER_TREE:
if (!is_ready()) {
connect("child_order_changed", callable_mp(this, &self_type::child_order_changed));
}
return;
case NOTIFICATION_READY: case NOTIFICATION_READY:
ready(); construct_chunk_grid();
return; return;
case NOTIFICATION_EXIT_TREE: case NOTIFICATION_EXIT_TREE:
this->workload_lock.lock(); this->workload_lock.lock();

View file

@ -3,16 +3,14 @@
#include "core/os/mutex.h" #include "core/os/mutex.h"
#include "core/os/thread.h" #include "core/os/thread.h"
#include "core/templates/vector.h" #include "core/templates/vector.h"
#include "macros.h"
#include "scene/main/node.h" #include "scene/main/node.h"
#include "scene/main/timer.h"
class TerrainChunkMesh; class TerrainChunkMesh;
class TerrainModifier; class TerrainModifier;
class Terrain : public Node { class Terrain : public Node {
GDCLASS(Terrain, Node); GDCLASS(Terrain, Node);
static void _bind_methods(); static void _bind_methods();
void ready(); void child_order_changed();
protected: protected:
void _notification(int what); void _notification(int what);

View file

@ -5,6 +5,7 @@
#include "macros.h" #include "macros.h"
#include "scene/3d/marker_3d.h" #include "scene/3d/marker_3d.h"
#include "scene/resources/curve.h" #include "scene/resources/curve.h"
class Terrain;
class TerrainModifier : public Marker3D { class TerrainModifier : public Marker3D {
GDCLASS(TerrainModifier, Marker3D); GDCLASS(TerrainModifier, Marker3D);
@ -27,6 +28,7 @@ private:
BlendMode blend_mode{ Add }; BlendMode blend_mode{ Add };
Vector3 thread_safe_global_position{}; Vector3 thread_safe_global_position{};
bool dirty{ false }; bool dirty{ false };
Terrain *terrain{ nullptr };
public: public:
Vector3 get_thread_safe_global_position() const; Vector3 get_thread_safe_global_position() const;
@ -35,6 +37,7 @@ public:
void set_blend_mode(BlendMode mode); void set_blend_mode(BlendMode mode);
BlendMode get_blend_mode() const; BlendMode get_blend_mode() const;
GET_SET_FNS(bool, dirty); GET_SET_FNS(bool, dirty);
GET_SET_FNS(Terrain *, terrain);
static String const sig_changed; static String const sig_changed;
}; };