mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-04-08 04:51:49 +02:00
Now TerrainChunks can also store a name and material for MeshDataResources.
This commit is contained in:
parent
a0219e12e6
commit
f770c598ed
@ -1331,7 +1331,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, const bool p_original) {
|
||||
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, const String &p_name) {
|
||||
ERR_FAIL_COND_V(!mesh.is_valid(), 0);
|
||||
|
||||
int index = _mesh_data_resources.size();
|
||||
@ -1345,6 +1345,52 @@ int TerrainChunk::mesh_data_resource_addv(const Vector3 &local_data_pos, const R
|
||||
e.transform.origin = local_data_pos;
|
||||
}
|
||||
|
||||
e.name = p_name;
|
||||
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());
|
||||
e.is_inside = aabb.encloses(mesh_aabb);
|
||||
|
||||
#ifdef MODULE_PROPS_ENABLED
|
||||
if (get_library().is_valid() && texture.is_valid()) {
|
||||
e.uv_rect = get_library()->get_prop_uv_rect(texture);
|
||||
} else {
|
||||
e.uv_rect = Rect2(0, 0, 1, 1);
|
||||
}
|
||||
#else
|
||||
e.uv_rect = Rect2(0, 0, 1, 1);
|
||||
#endif
|
||||
|
||||
_mesh_data_resources.push_back(e);
|
||||
|
||||
if (has_method("_mesh_data_resource_added")) {
|
||||
call("_mesh_data_resource_added", index);
|
||||
}
|
||||
|
||||
emit_changed();
|
||||
|
||||
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, const bool p_original, const String &p_name) {
|
||||
ERR_FAIL_COND_V(!mesh.is_valid(), 0);
|
||||
|
||||
int index = _mesh_data_resources.size();
|
||||
|
||||
MeshDataResourceEntry e;
|
||||
|
||||
e.name = p_name;
|
||||
e.transform = local_transform;
|
||||
|
||||
if (apply_voxel_scale) {
|
||||
e.transform.basis = e.transform.basis.scaled(Vector3(_voxel_scale, _voxel_scale, _voxel_scale));
|
||||
e.transform.origin = e.transform.origin * _voxel_scale;
|
||||
}
|
||||
|
||||
e.mesh = mesh;
|
||||
e.texture = texture;
|
||||
e.color = color;
|
||||
@ -1375,13 +1421,14 @@ 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, const bool p_original) {
|
||||
int TerrainChunk::mesh_data_resource_add_material(const Transform &local_transform, const Ref<MeshDataResource> &mesh, const Ref<Texture> &texture, const Ref<Material> &p_material, const bool apply_voxel_scale, const bool p_original, const String &p_name) {
|
||||
ERR_FAIL_COND_V(!mesh.is_valid(), 0);
|
||||
|
||||
int index = _mesh_data_resources.size();
|
||||
|
||||
MeshDataResourceEntry e;
|
||||
|
||||
e.name = p_name;
|
||||
e.transform = local_transform;
|
||||
|
||||
if (apply_voxel_scale) {
|
||||
@ -1391,7 +1438,8 @@ int TerrainChunk::mesh_data_resource_add(const Transform &local_transform, const
|
||||
|
||||
e.mesh = mesh;
|
||||
e.texture = texture;
|
||||
e.color = color;
|
||||
e.color = Color(1, 1, 1, 1);
|
||||
e.material = p_material;
|
||||
e.is_original = p_original;
|
||||
|
||||
AABB aabb = AABB(Vector3(), get_world_size());
|
||||
@ -1511,6 +1559,32 @@ void TerrainChunk::mesh_data_resource_set_is_original(const int index, const boo
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
String TerrainChunk::mesh_data_resource_get_name(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _mesh_data_resources.size(), String());
|
||||
|
||||
return _mesh_data_resources[index].name;
|
||||
}
|
||||
void TerrainChunk::mesh_data_resource_set_name(const int index, const String &p_name) {
|
||||
ERR_FAIL_INDEX(index, _mesh_data_resources.size());
|
||||
|
||||
_mesh_data_resources.write[index].name = p_name;
|
||||
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
Ref<Material> TerrainChunk::mesh_data_resource_get_material(const int index) {
|
||||
ERR_FAIL_INDEX_V(index, _mesh_data_resources.size(), Ref<Material>());
|
||||
|
||||
return _mesh_data_resources[index].material;
|
||||
}
|
||||
void TerrainChunk::mesh_data_resource_set_material(const int index, const Ref<Material> &p_material) {
|
||||
ERR_FAIL_INDEX(index, _mesh_data_resources.size());
|
||||
|
||||
_mesh_data_resources.write[index].material = p_material;
|
||||
|
||||
emit_changed();
|
||||
}
|
||||
|
||||
int TerrainChunk::mesh_data_resource_get_count() const {
|
||||
return _mesh_data_resources.size();
|
||||
}
|
||||
@ -1540,6 +1614,8 @@ Array TerrainChunk::mesh_data_resources_get() {
|
||||
mdr_data.push_back(e.color);
|
||||
mdr_data.push_back(e.transform);
|
||||
mdr_data.push_back(e.is_original);
|
||||
mdr_data.push_back(e.name);
|
||||
mdr_data.push_back(e.material);
|
||||
|
||||
ret.push_back(mdr_data);
|
||||
}
|
||||
@ -1553,15 +1629,47 @@ 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() != 5);
|
||||
ERR_CONTINUE(mdr_data.size() != 5 && mdr_data.size() != 7);
|
||||
|
||||
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];
|
||||
MeshDataResourceEntry e;
|
||||
|
||||
mesh_data_resource_add(transform, mesh, texture, color, false, is_original);
|
||||
e.mesh = Ref<MeshDataResource>(mdr_data[0]);
|
||||
|
||||
ERR_CONTINUE(e.mesh.is_null());
|
||||
|
||||
e.texture = Ref<Texture>(mdr_data[1]);
|
||||
e.color = mdr_data[2];
|
||||
e.transform = mdr_data[3];
|
||||
e.is_original = mdr_data[4];
|
||||
if (mdr_data.size() > 5) {
|
||||
e.name = mdr_data[5];
|
||||
}
|
||||
if (mdr_data.size() > 6) {
|
||||
e.material = mdr_data[6];
|
||||
}
|
||||
|
||||
AABB aabb = AABB(Vector3(), get_world_size());
|
||||
AABB mesh_aabb = e.transform.xform(e.mesh->get_aabb());
|
||||
e.is_inside = aabb.encloses(mesh_aabb);
|
||||
|
||||
#ifdef MODULE_PROPS_ENABLED
|
||||
if (get_library().is_valid() && e.texture.is_valid()) {
|
||||
e.uv_rect = get_library()->get_prop_uv_rect(e.texture);
|
||||
} else {
|
||||
e.uv_rect = Rect2(0, 0, 1, 1);
|
||||
}
|
||||
#else
|
||||
e.uv_rect = Rect2(0, 0, 1, 1);
|
||||
#endif
|
||||
|
||||
int index = _mesh_data_resources.size();
|
||||
_mesh_data_resources.push_back(e);
|
||||
|
||||
if (has_method("_mesh_data_resource_added")) {
|
||||
call("_mesh_data_resource_added", index);
|
||||
}
|
||||
|
||||
emit_changed();
|
||||
}
|
||||
}
|
||||
|
||||
@ -2277,8 +2385,9 @@ void TerrainChunk::_bind_methods() {
|
||||
//Meshes
|
||||
|
||||
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_addv", "local_data_pos", "mesh", "texture", "color", "apply_voxel_scale"), &TerrainChunk::mesh_data_resource_addv, DEFVAL(Ref<Texture>()), DEFVAL(Color(1, 1, 1, 1)), DEFVAL(true));
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_add", "local_transform", "mesh", "texture", "color", "apply_voxel_scale"), &TerrainChunk::mesh_data_resource_add, DEFVAL(Ref<Texture>()), DEFVAL(Color(1, 1, 1, 1)), DEFVAL(true));
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_addv", "local_data_pos", "mesh", "texture", "color", "apply_voxel_scale", "original", "name"), &TerrainChunk::mesh_data_resource_addv, DEFVAL(Ref<Texture>()), DEFVAL(Color(1, 1, 1, 1)), DEFVAL(true), DEFVAL(true), DEFVAL(String()));
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_add", "local_transform", "mesh", "texture", "color", "apply_voxel_scale", "original", "name"), &TerrainChunk::mesh_data_resource_add, DEFVAL(Ref<Texture>()), DEFVAL(Color(1, 1, 1, 1)), DEFVAL(true), DEFVAL(true), DEFVAL(String()));
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_add_material", "local_transform", "mesh", "texture", "material", "apply_voxel_scale", "original", "name"), &TerrainChunk::mesh_data_resource_add_material, DEFVAL(Ref<Texture>()), DEFVAL(Ref<Material>()), DEFVAL(true), DEFVAL(true), DEFVAL(String()));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_get", "index"), &TerrainChunk::mesh_data_resource_get);
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_set", "index", "mesh"), &TerrainChunk::mesh_data_resource_set);
|
||||
@ -2301,6 +2410,12 @@ void TerrainChunk::_bind_methods() {
|
||||
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_name", "index"), &TerrainChunk::mesh_data_resource_get_name);
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_set_name", "index", "name"), &TerrainChunk::mesh_data_resource_set_name);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_get_material", "index"), &TerrainChunk::mesh_data_resource_get_material);
|
||||
ClassDB::bind_method(D_METHOD("mesh_data_resource_set_material", "index", "material"), &TerrainChunk::mesh_data_resource_set_material);
|
||||
|
||||
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);
|
||||
|
@ -315,8 +315,9 @@ 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, 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);
|
||||
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, const String &p_name = String());
|
||||
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, const String &p_name = String());
|
||||
int mesh_data_resource_add_material(const Transform &local_transform, const Ref<MeshDataResource> &mesh, const Ref<Texture> &texture = Ref<Texture>(), const Ref<Material> &p_material = Ref<Texture>(), const bool apply_voxel_scale = true, const bool p_original = true, const String &p_name = String());
|
||||
|
||||
Ref<MeshDataResource> mesh_data_resource_get(const int index);
|
||||
void mesh_data_resource_set(const int index, const Ref<MeshDataResource> &mesh);
|
||||
@ -339,6 +340,12 @@ public:
|
||||
bool mesh_data_resource_get_is_original(const int index);
|
||||
void mesh_data_resource_set_is_original(const int index, const bool p_original);
|
||||
|
||||
String mesh_data_resource_get_name(const int index);
|
||||
void mesh_data_resource_set_name(const int index, const String &p_name);
|
||||
|
||||
Ref<Material> mesh_data_resource_get_material(const int index);
|
||||
void mesh_data_resource_set_material(const int index, const Ref<Material> &p_material);
|
||||
|
||||
int mesh_data_resource_get_count() const;
|
||||
void mesh_data_resource_remove(const int index);
|
||||
void mesh_data_resource_clear();
|
||||
@ -416,6 +423,7 @@ protected:
|
||||
|
||||
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
|
||||
struct MeshDataResourceEntry {
|
||||
String name;
|
||||
Ref<MeshDataResource> mesh;
|
||||
Ref<Texture> texture;
|
||||
Color color;
|
||||
@ -423,6 +431,7 @@ protected:
|
||||
Transform transform;
|
||||
bool is_inside;
|
||||
bool is_original;
|
||||
Ref<Material> material;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user