mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-03-20 19:42:28 +01:00
Now props and mesh data resources are saved with the TerrainChunks.
This commit is contained in:
parent
b0177a2c3a
commit
eb3ed4fa20
@ -833,6 +833,35 @@ void TerrainChunk::prop_remove(const int index) {
|
|||||||
void TerrainChunk::props_clear() {
|
void TerrainChunk::props_clear() {
|
||||||
_props.clear();
|
_props.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Array TerrainChunk::props_get() {
|
||||||
|
Array ret;
|
||||||
|
|
||||||
|
for (int i = 0; i < _props.size(); i++) {
|
||||||
|
Array prop_data;
|
||||||
|
|
||||||
|
prop_data.push_back(_props[i].transform);
|
||||||
|
prop_data.push_back(_props[i].prop.get_ref_ptr());
|
||||||
|
|
||||||
|
ret.push_back(prop_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
void TerrainChunk::props_set(const Array &p_props) {
|
||||||
|
props_clear();
|
||||||
|
|
||||||
|
for (int i = 0; i < p_props.size(); ++i) {
|
||||||
|
Array prop_data = p_props[i];
|
||||||
|
|
||||||
|
ERR_CONTINUE(prop_data.size() != 2);
|
||||||
|
|
||||||
|
Transform transform = prop_data[0];
|
||||||
|
Ref<PropData> prop = Ref<PropData>(prop_data[1]);
|
||||||
|
|
||||||
|
prop_add(transform, prop);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
|
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
|
||||||
@ -995,6 +1024,42 @@ void TerrainChunk::mesh_data_resource_clear() {
|
|||||||
_mesh_data_resources.clear();
|
_mesh_data_resources.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Array TerrainChunk::mesh_data_resources_get() {
|
||||||
|
Array ret;
|
||||||
|
|
||||||
|
for (int i = 0; i < _mesh_data_resources.size(); i++) {
|
||||||
|
MeshDataResourceEntry e = _mesh_data_resources[i];
|
||||||
|
|
||||||
|
Array mdr_data;
|
||||||
|
|
||||||
|
mdr_data.push_back(e.mesh.get_ref_ptr());
|
||||||
|
mdr_data.push_back(e.texture);
|
||||||
|
mdr_data.push_back(e.color);
|
||||||
|
mdr_data.push_back(e.transform);
|
||||||
|
|
||||||
|
ret.push_back(mdr_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TerrainChunk::mesh_data_resources_set(const Array &p_mesh_data_resources) {
|
||||||
|
mesh_data_resource_clear();
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
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];
|
||||||
|
|
||||||
|
mesh_data_resource_add(transform, mesh, texture, color, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int TerrainChunk::collider_add(const Transform &local_transform, const Ref<Shape> &shape, const RID &shape_rid, const RID &body) {
|
int TerrainChunk::collider_add(const Transform &local_transform, const Ref<Shape> &shape, const RID &shape_rid, const RID &body) {
|
||||||
@ -1609,6 +1674,10 @@ void TerrainChunk::_bind_methods() {
|
|||||||
ClassDB::bind_method(D_METHOD("prop_get_count"), &TerrainChunk::prop_get_count);
|
ClassDB::bind_method(D_METHOD("prop_get_count"), &TerrainChunk::prop_get_count);
|
||||||
ClassDB::bind_method(D_METHOD("prop_remove", "index"), &TerrainChunk::prop_remove);
|
ClassDB::bind_method(D_METHOD("prop_remove", "index"), &TerrainChunk::prop_remove);
|
||||||
ClassDB::bind_method(D_METHOD("props_clear"), &TerrainChunk::props_clear);
|
ClassDB::bind_method(D_METHOD("props_clear"), &TerrainChunk::props_clear);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("props_get"), &TerrainChunk::props_get);
|
||||||
|
ClassDB::bind_method(D_METHOD("props_set"), &TerrainChunk::props_set);
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "props"), "props_set", "props_get");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
|
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
|
||||||
@ -1636,6 +1705,10 @@ void TerrainChunk::_bind_methods() {
|
|||||||
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);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("mesh_data_resources_get"), &TerrainChunk::mesh_data_resources_get);
|
||||||
|
ClassDB::bind_method(D_METHOD("mesh_data_resources_set"), &TerrainChunk::mesh_data_resources_set);
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "mesh_data_resources"), "mesh_data_resources_set", "mesh_data_resources_get");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("collider_add", "local_transform", "shape", "shape_rid", "body"), &TerrainChunk::collider_add, DEFVAL(RID()), DEFVAL(RID()));
|
ClassDB::bind_method(D_METHOD("collider_add", "local_transform", "shape", "shape_rid", "body"), &TerrainChunk::collider_add, DEFVAL(RID()), DEFVAL(RID()));
|
||||||
|
@ -251,6 +251,9 @@ public:
|
|||||||
int prop_get_count() const;
|
int prop_get_count() const;
|
||||||
void prop_remove(const int index);
|
void prop_remove(const int index);
|
||||||
void props_clear();
|
void props_clear();
|
||||||
|
|
||||||
|
Array props_get();
|
||||||
|
void props_set(const Array &p_props);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
|
#ifdef MODULE_MESH_DATA_RESOURCE_ENABLED
|
||||||
@ -278,6 +281,9 @@ public:
|
|||||||
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();
|
||||||
|
|
||||||
|
Array mesh_data_resources_get();
|
||||||
|
void mesh_data_resources_set(const Array &p_mesh_data_resources);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//Colliders
|
//Colliders
|
||||||
|
@ -639,6 +639,8 @@ void TerrainWorld::prop_add(Transform transform, const Ref<PropData> &prop, cons
|
|||||||
sp->set_transform(t);
|
sp->set_transform(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO store this in a chunk, and manage loading/unloading it with it
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -659,6 +661,8 @@ void TerrainWorld::prop_add(Transform transform, const Ref<PropData> &prop, cons
|
|||||||
|
|
||||||
light_add(light);
|
light_add(light);
|
||||||
|
|
||||||
|
// TODO store this in a chunk, and manage loading/unloading it with it
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user