Added mesh_data_resource_add() helper method to TerrainWorld.

This commit is contained in:
Relintai 2025-04-04 15:05:31 +02:00
parent f770c598ed
commit 74ddba1eb1
2 changed files with 41 additions and 0 deletions

View File

@ -33,6 +33,8 @@
#include "core/containers/hash_set.h"
#include "core/object/method_bind_ext.gen.inc"
#include "core/object/message_queue.h"
#include "core/os/main_loop.h"
#include "terrain_chunk.h"
@ -59,6 +61,10 @@
#include "scene/3d/camera.h"
#endif
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
#include "modules/mesh_data_resource/mesh_data_resource.h"
#endif
const String TerrainWorld::BINDING_STRING_CHANNEL_TYPE_INFO = "Type,Isolevel,Liquid,Liquid Level";
bool TerrainWorld::get_active() const {
@ -734,6 +740,30 @@ void TerrainWorld::prop_add(Transform transform, const Ref<PropData> &prop, cons
}
#endif
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
void TerrainWorld::mesh_data_resource_add(const Ref<MeshDataResource> &p_mesh, const Transform &p_transform, const Ref<Texture> &p_texture, const Color &p_color, const bool p_original, const String &p_name) {
ERR_FAIL_COND(!p_mesh.is_valid());
Vector3 wp;
wp = p_transform.xform(wp);
Ref<TerrainChunk> chunk = get_or_create_chunk_at_world_position(wp);
chunk->mesh_data_resource_add(chunk->get_global_transform().affine_inverse() * p_transform, p_mesh, p_texture, p_color, false, p_original, p_name);
chunk->build();
}
void TerrainWorld::mesh_data_resource_add_material(const Ref<MeshDataResource> &p_mesh, const Transform &p_transform, const Ref<Texture> &p_texture, const Ref<Material> &p_material, const bool p_original, const String &p_name) {
ERR_FAIL_COND(!p_mesh.is_valid());
Vector3 wp;
wp = p_transform.xform(wp);
Ref<TerrainChunk> chunk = get_or_create_chunk_at_world_position(wp);
chunk->mesh_data_resource_add_material(chunk->get_global_transform().affine_inverse() * p_transform, p_mesh, p_texture, p_material, false, p_original, p_name);
chunk->build();
}
#endif
//Lights
void TerrainWorld::light_add(const Ref<TerrainLight> &light) {
if (!light.is_valid()) {
@ -1625,6 +1655,11 @@ void TerrainWorld::_bind_methods() {
ClassDB::bind_method(D_METHOD("prop_add", "transform", "prop", "apply_voxel_scale", "original", "name"), &TerrainWorld::prop_add, DEFVAL(true), DEFVAL(true), DEFVAL(String()));
#endif
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
ClassDB::bind_method(D_METHOD("mesh_data_resource_add", "mesh", "transform", "texture", "color", "original", "name"), &TerrainWorld::mesh_data_resource_add, DEFVAL(Ref<Texture>()), DEFVAL(Color(1, 1, 1, 1)), DEFVAL(true), DEFVAL(String()));
ClassDB::bind_method(D_METHOD("mesh_data_resource_add_material", "mesh", "transform", "texture", "material", "original", "name"), &TerrainWorld::mesh_data_resource_add_material, DEFVAL(Ref<Texture>()), DEFVAL(Color(1, 1, 1, 1)), DEFVAL(true), DEFVAL(String()));
#endif
//Lights
ClassDB::bind_method(D_METHOD("light_add", "chunk"), &TerrainWorld::light_add);
ClassDB::bind_method(D_METHOD("light_remove", "chunk"), &TerrainWorld::light_remove);

View File

@ -54,6 +54,7 @@
class TerrainStructure;
class TerrainChunk;
class PropData;
class MeshDataResource;
class TerrainWorld : public Spatial {
GDCLASS(TerrainWorld, Spatial);
@ -181,6 +182,11 @@ public:
void prop_add(Transform transform, const Ref<PropData> &prop, const bool apply_voxel_scale = true, const bool p_original = true, const String &p_name = String());
#endif
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
void mesh_data_resource_add(const Ref<MeshDataResource> &p_mesh, const Transform &p_transform, const Ref<Texture> &p_texture = Ref<Texture>(), const Color &p_color = Color(1, 1, 1, 1), const bool p_original = true, const String &p_name = String());
void mesh_data_resource_add_material(const Ref<MeshDataResource> &p_mesh, const Transform &p_transform, const Ref<Texture> &p_texture = Ref<Texture>(), const Ref<Material> &p_material = Ref<Material>(), const bool p_original = true, const String &p_name = String());
#endif
//Lights
void light_add(const Ref<TerrainLight> &light);
void light_remove(const Ref<TerrainLight> &light);