feat: terrain mesh material
This commit is contained in:
parent
957a39af14
commit
becef85f20
3 changed files with 223 additions and 30 deletions
|
|
@ -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()) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue