feat: terrain mesh material

This commit is contained in:
Sara Gerretsen 2026-03-03 22:57:41 +01:00
parent 957a39af14
commit becef85f20
3 changed files with 223 additions and 30 deletions

View file

@ -3,6 +3,7 @@
#include "terrain/terrain_modifier.h"
void Terrain::_bind_methods() {
BIND_HPROPERTY(Variant::OBJECT, mesh_material, PROPERTY_HINT_RESOURCE_TYPE, "Material");
BIND_PROPERTY(Variant::INT, side_length);
BIND_PROPERTY(Variant::INT, chunk_size);
BIND_PROPERTY(Variant::INT, detail);
@ -136,6 +137,7 @@ void Terrain::construct_chunk_grid() {
chunk->set_size(this->chunk_size);
chunk->set_detail(this->detail);
chunk->set_terrain(this);
chunk->set_material_override(this->mesh_material);
chunk->set_position(origin + Vector3{ (float)this->chunk_size * (float)x, 0.f, (float)this->chunk_size * (float)y });
add_child(chunk);
chunk->set_owner(this);
@ -179,6 +181,17 @@ void Terrain::mesh_dirty(TerrainChunkMesh *mesh) {
this->dirty_meshes_lock.unlock();
}
void Terrain::set_mesh_material(Ref<Material> material) {
this->mesh_material = material;
for (TerrainChunkMesh *mesh : this->meshes) {
mesh->set_material_override(material);
}
}
Ref<Material> Terrain::get_mesh_material() const {
return this->mesh_material;
}
void Terrain::set_side_length(size_t length) {
this->side_length = length;
if (is_inside_tree()) {

View file

@ -5,6 +5,7 @@
#include "core/os/thread.h"
#include "core/templates/vector.h"
#include "scene/main/node.h"
#include "scene/resources/material.h"
class TerrainChunkMesh;
class TerrainModifier;
@ -26,6 +27,7 @@ public:
void mesh_dirty(TerrainChunkMesh *mesh);
private:
Ref<Material> mesh_material{};
Vector<TerrainChunkMesh *> workload{};
bool threads_stop{ false };
Mutex workload_lock;
@ -42,6 +44,8 @@ private:
size_t detail{ 1 };
public:
void set_mesh_material(Ref<Material> material);
Ref<Material> get_mesh_material() const;
void set_side_length(size_t length);
size_t get_side_length() const;
void set_chunk_size(size_t size);