Add property for voxel structures.

This commit is contained in:
Relintai 2020-04-16 14:07:10 +02:00
parent d985610574
commit 06d3b0ae32
2 changed files with 28 additions and 2 deletions

View File

@ -176,8 +176,6 @@ Ref<VoxelStructure> VoxelWorld::get_voxel_structure(const int index) const {
return _voxel_structures.get(index);
}
void VoxelWorld::add_voxel_structure(const Ref<VoxelStructure> &structure) {
ERR_FAIL_COND(!structure.is_valid());
_voxel_structures.push_back(structure);
}
void VoxelWorld::remove_voxel_structure(const Ref<VoxelStructure> &structure) {
@ -210,6 +208,27 @@ void VoxelWorld::add_voxel_structure_at_position(Ref<VoxelStructure> structure,
add_voxel_structure(structure);
}
Vector<Variant> VoxelWorld::get_voxel_structures() {
Vector<Variant> r;
for (int i = 0; i < _voxel_structures.size(); i++) {
#if VERSION_MAJOR < 4
r.push_back(_voxel_structures[i].get_ref_ptr());
#else
r.push_back(_voxel_structures[i]);
#endif
}
return r;
}
void VoxelWorld::set_voxel_structures(const Vector<Variant> &structures) {
clear_voxel_structures();
for (int i = 0; i < structures.size(); ++i) {
Ref<VoxelLight> structure = Ref<VoxelLight>(structures[i]);
add_voxel_structure(structure);
}
}
void VoxelWorld::add_chunk(Ref<VoxelChunk> chunk, const int x, const int y, const int z) {
ERR_FAIL_COND(!chunk.is_valid());
@ -796,6 +815,10 @@ void VoxelWorld::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_voxel_structure_count"), &VoxelWorld::get_voxel_structure_count);
ClassDB::bind_method(D_METHOD("add_voxel_structure_at_position", "structure", "world_position"), &VoxelWorld::add_voxel_structure_at_position);
ClassDB::bind_method(D_METHOD("get_voxel_structures"), &VoxelWorld::get_voxel_structures);
ClassDB::bind_method(D_METHOD("set_voxel_structures"), &VoxelWorld::set_voxel_structures);
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "voxel_structures", PROPERTY_HINT_NONE, "17/17:VoxelStructure", PROPERTY_USAGE_DEFAULT, "VoxelStructure"), "set_voxel_structures", "get_voxel_structures");
BIND_VMETHOD(MethodInfo("_chunk_added", PropertyInfo(Variant::OBJECT, "chunk", PROPERTY_HINT_RESOURCE_TYPE, "VoxelChunk")));
ClassDB::bind_method(D_METHOD("add_chunk", "chunk", "x", "y", "z"), &VoxelWorld::add_chunk);

View File

@ -118,6 +118,9 @@ public:
int get_voxel_structure_count() const;
void add_voxel_structure_at_position(Ref<VoxelStructure> structure, const Vector3 &world_position);
Vector<Variant> get_voxel_structures();
void set_voxel_structures(const Vector<Variant> &structures);
//Chunks
void add_chunk(Ref<VoxelChunk> chunk, const int x, const int y, const int z);
bool has_chunk(const int x, const int y, const int z) const;