mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-03-18 10:36:23 +01:00
Store whether a mesh_data_resource in a TerrainChunk is original or not.
This commit is contained in:
parent
2054f60c6d
commit
7006c947cd
@ -44,6 +44,8 @@
|
||||
|
||||
#include "modules/modules_enabled.gen.h"
|
||||
|
||||
#include "core/object/method_bind_ext.gen.inc"
|
||||
|
||||
#ifdef MODULE_LZ4_ENABLED
|
||||
#include "modules/lz4/lz4_compressor.h"
|
||||
#endif
|
||||
@ -999,7 +1001,7 @@ void TerrainChunk::props_set(const Array &p_props) {
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
|
||||
int TerrainChunk::mesh_data_resource_addv(const Vector3 &local_data_pos, const Ref<MeshDataResource> &mesh, const Ref<Texture> &texture, const Color &color, const bool apply_voxel_scale) {
|
||||
int TerrainChunk::mesh_data_resource_addv(const Vector3 &local_data_pos, const Ref<MeshDataResource> &mesh, const Ref<Texture> &texture, const Color &color, const bool apply_voxel_scale, const bool p_original) {
|
||||
ERR_FAIL_COND_V(!mesh.is_valid(), 0);
|
||||
|
||||
int index = _mesh_data_resources.size();
|
||||
@ -1016,6 +1018,7 @@ int TerrainChunk::mesh_data_resource_addv(const Vector3 &local_data_pos, const R
|
||||
e.mesh = mesh;
|
||||
e.texture = texture;
|
||||
e.color = color;
|
||||
e.is_original = p_original;
|
||||
|
||||
AABB aabb = AABB(Vector3(), get_world_size());
|
||||
AABB mesh_aabb = e.transform.xform(mesh->get_aabb());
|
||||
@ -1040,7 +1043,7 @@ int TerrainChunk::mesh_data_resource_addv(const Vector3 &local_data_pos, const R
|
||||
return index;
|
||||
}
|
||||
|
||||
int TerrainChunk::mesh_data_resource_add(const Transform &local_transform, const Ref<MeshDataResource> &mesh, const Ref<Texture> &texture, const Color &color, const bool apply_voxel_scale) {
|
||||
int TerrainChunk::mesh_data_resource_add(const Transform &local_transform, const Ref<MeshDataResource> &mesh, const Ref<Texture> &texture, const Color &color, const bool apply_voxel_scale, const bool p_original) {
|
||||
ERR_FAIL_COND_V(!mesh.is_valid(), 0);
|
||||
|
||||
int index = _mesh_data_resources.size();
|
||||
@ -1057,6 +1060,7 @@ int TerrainChunk::mesh_data_resource_add(const Transform &local_transform, const
|
||||
e.mesh = mesh;
|
||||
e.texture = texture;
|
||||
e.color = color;
|
||||
e.is_original = p_original;
|
||||
|
||||
AABB aabb = AABB(Vector3(), get_world_size());
|
||||
AABB mesh_aabb = e.transform.xform(mesh->get_aabb());
|
||||
@ -1146,6 +1150,17 @@ void TerrainChunk::mesh_data_resource_set_is_inside(const int index, const bool
|
||||
_mesh_data_resources.write[index].is_inside = inside;
|
||||
}
|
||||
|
||||
bool TerrainChunk::mesh_data_resource_get_is_original(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _mesh_data_resources.size(), false);
|
||||
|
||||
return _mesh_data_resources[index].is_original;
|
||||
}
|
||||
void TerrainChunk::mesh_data_resource_set_is_original(const int index, const bool p_original) {
|
||||
ERR_FAIL_INDEX(index, _mesh_data_resources.size());
|
||||
|
||||
_mesh_data_resources.write[index].is_original = p_original;
|
||||
}
|
||||
|
||||
int TerrainChunk::mesh_data_resource_get_count() const {
|
||||
return _mesh_data_resources.size();
|
||||
}
|
||||
@ -1170,6 +1185,7 @@ Array TerrainChunk::mesh_data_resources_get() {
|
||||
mdr_data.push_back(e.texture);
|
||||
mdr_data.push_back(e.color);
|
||||
mdr_data.push_back(e.transform);
|
||||
mdr_data.push_back(e.is_original);
|
||||
|
||||
ret.push_back(mdr_data);
|
||||
}
|
||||
@ -1183,14 +1199,15 @@ void TerrainChunk::mesh_data_resources_set(const Array &p_mesh_data_resources) {
|
||||
for (int i = 0; i < p_mesh_data_resources.size(); ++i) {
|
||||
Array mdr_data = p_mesh_data_resources[i];
|
||||
|
||||
ERR_CONTINUE(mdr_data.size() != 4);
|
||||
ERR_CONTINUE(mdr_data.size() != 5);
|
||||
|
||||
Ref<MeshDataResource> mesh = Ref<MeshDataResource>(mdr_data[0]);
|
||||
Ref<Texture> texture = Ref<Texture>(mdr_data[1]);
|
||||
Color color = mdr_data[2];
|
||||
Transform transform = mdr_data[3];
|
||||
bool is_original = mdr_data[4];
|
||||
|
||||
mesh_data_resource_add(transform, mesh, texture, color, false);
|
||||
mesh_data_resource_add(transform, mesh, texture, color, false, is_original);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1864,6 +1881,9 @@ void TerrainChunk::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_get_is_inside", "index"), &TerrainChunk::mesh_data_resource_get_is_inside);
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_set_is_inside", "index", "inside"), &TerrainChunk::mesh_data_resource_set_is_inside);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_get_is_original", "index"), &TerrainChunk::mesh_data_resource_get_is_original);
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_set_is_original", "index", "original"), &TerrainChunk::mesh_data_resource_set_is_original);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_get_count"), &TerrainChunk::mesh_data_resource_get_count);
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_remove", "index"), &TerrainChunk::mesh_data_resource_remove);
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_clear"), &TerrainChunk::mesh_data_resource_clear);
|
||||
|
@ -280,8 +280,8 @@ public:
|
||||
#endif
|
||||
|
||||
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
|
||||
int mesh_data_resource_addv(const Vector3 &local_data_pos, const Ref<MeshDataResource> &mesh, const Ref<Texture> &texture = Ref<Texture>(), const Color &color = Color(1, 1, 1, 1), const bool apply_voxel_scale = true);
|
||||
int mesh_data_resource_add(const Transform &local_transform, const Ref<MeshDataResource> &mesh, const Ref<Texture> &texture = Ref<Texture>(), const Color &color = Color(1, 1, 1, 1), const bool apply_voxel_scale = true);
|
||||
int mesh_data_resource_addv(const Vector3 &local_data_pos, const Ref<MeshDataResource> &mesh, const Ref<Texture> &texture = Ref<Texture>(), const Color &color = Color(1, 1, 1, 1), const bool apply_voxel_scale = true, const bool p_original = true);
|
||||
int mesh_data_resource_add(const Transform &local_transform, const Ref<MeshDataResource> &mesh, const Ref<Texture> &texture = Ref<Texture>(), const Color &color = Color(1, 1, 1, 1), const bool apply_voxel_scale = true, const bool p_original = true);
|
||||
|
||||
Ref<MeshDataResource> mesh_data_resource_get(const int index);
|
||||
void mesh_data_resource_set(const int index, const Ref<MeshDataResource> &mesh);
|
||||
@ -301,6 +301,9 @@ public:
|
||||
bool mesh_data_resource_get_is_inside(const int index);
|
||||
void mesh_data_resource_set_is_inside(const int index, const bool inside);
|
||||
|
||||
bool mesh_data_resource_get_is_original(const int index);
|
||||
void mesh_data_resource_set_is_original(const int index, const bool p_original);
|
||||
|
||||
int mesh_data_resource_get_count() const;
|
||||
void mesh_data_resource_remove(const int index);
|
||||
void mesh_data_resource_clear();
|
||||
@ -375,6 +378,7 @@ protected:
|
||||
Rect2 uv_rect;
|
||||
Transform transform;
|
||||
bool is_inside;
|
||||
bool is_original;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -714,7 +714,7 @@ void TerrainWorld::prop_add(Transform transform, const Ref<PropData> &prop, cons
|
||||
|
||||
chunk_local_tform.origin = chunk->to_local(chunk_local_tform.origin);
|
||||
|
||||
chunk->mesh_data_resource_add(chunk_local_tform, mdr, mesh_data->get_texture(), Color(1, 1, 1, 1), false);
|
||||
chunk->mesh_data_resource_add(chunk_local_tform, mdr, mesh_data->get_texture(), Color(1, 1, 1, 1), false, false);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user