mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-03-20 03:26:22 +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 "modules/modules_enabled.gen.h"
|
||||||
|
|
||||||
|
#include "core/object/method_bind_ext.gen.inc"
|
||||||
|
|
||||||
#ifdef MODULE_LZ4_ENABLED
|
#ifdef MODULE_LZ4_ENABLED
|
||||||
#include "modules/lz4/lz4_compressor.h"
|
#include "modules/lz4/lz4_compressor.h"
|
||||||
#endif
|
#endif
|
||||||
@ -999,7 +1001,7 @@ void TerrainChunk::props_set(const Array &p_props) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
|
#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);
|
ERR_FAIL_COND_V(!mesh.is_valid(), 0);
|
||||||
|
|
||||||
int index = _mesh_data_resources.size();
|
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.mesh = mesh;
|
||||||
e.texture = texture;
|
e.texture = texture;
|
||||||
e.color = color;
|
e.color = color;
|
||||||
|
e.is_original = p_original;
|
||||||
|
|
||||||
AABB aabb = AABB(Vector3(), get_world_size());
|
AABB aabb = AABB(Vector3(), get_world_size());
|
||||||
AABB mesh_aabb = e.transform.xform(mesh->get_aabb());
|
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;
|
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);
|
ERR_FAIL_COND_V(!mesh.is_valid(), 0);
|
||||||
|
|
||||||
int index = _mesh_data_resources.size();
|
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.mesh = mesh;
|
||||||
e.texture = texture;
|
e.texture = texture;
|
||||||
e.color = color;
|
e.color = color;
|
||||||
|
e.is_original = p_original;
|
||||||
|
|
||||||
AABB aabb = AABB(Vector3(), get_world_size());
|
AABB aabb = AABB(Vector3(), get_world_size());
|
||||||
AABB mesh_aabb = e.transform.xform(mesh->get_aabb());
|
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;
|
_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 {
|
int TerrainChunk::mesh_data_resource_get_count() const {
|
||||||
return _mesh_data_resources.size();
|
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.texture);
|
||||||
mdr_data.push_back(e.color);
|
mdr_data.push_back(e.color);
|
||||||
mdr_data.push_back(e.transform);
|
mdr_data.push_back(e.transform);
|
||||||
|
mdr_data.push_back(e.is_original);
|
||||||
|
|
||||||
ret.push_back(mdr_data);
|
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) {
|
for (int i = 0; i < p_mesh_data_resources.size(); ++i) {
|
||||||
Array mdr_data = p_mesh_data_resources[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<MeshDataResource> mesh = Ref<MeshDataResource>(mdr_data[0]);
|
||||||
Ref<Texture> texture = Ref<Texture>(mdr_data[1]);
|
Ref<Texture> texture = Ref<Texture>(mdr_data[1]);
|
||||||
Color color = mdr_data[2];
|
Color color = mdr_data[2];
|
||||||
Transform transform = mdr_data[3];
|
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_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_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_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_remove", "index"), &TerrainChunk::mesh_data_resource_remove);
|
||||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_clear"), &TerrainChunk::mesh_data_resource_clear);
|
ClassDB::bind_method(D_METHOD("mesh_data_resource_clear"), &TerrainChunk::mesh_data_resource_clear);
|
||||||
|
@ -280,8 +280,8 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
|
#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_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);
|
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);
|
Ref<MeshDataResource> mesh_data_resource_get(const int index);
|
||||||
void mesh_data_resource_set(const int index, const Ref<MeshDataResource> &mesh);
|
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);
|
bool mesh_data_resource_get_is_inside(const int index);
|
||||||
void mesh_data_resource_set_is_inside(const int index, const bool inside);
|
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;
|
int mesh_data_resource_get_count() const;
|
||||||
void mesh_data_resource_remove(const int index);
|
void mesh_data_resource_remove(const int index);
|
||||||
void mesh_data_resource_clear();
|
void mesh_data_resource_clear();
|
||||||
@ -375,6 +378,7 @@ protected:
|
|||||||
Rect2 uv_rect;
|
Rect2 uv_rect;
|
||||||
Transform transform;
|
Transform transform;
|
||||||
bool is_inside;
|
bool is_inside;
|
||||||
|
bool is_original;
|
||||||
};
|
};
|
||||||
#endif
|
#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_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;
|
continue;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user