diff --git a/world/jobs/voxel_terrarin_job.cpp b/world/jobs/voxel_terrarin_job.cpp index b3a2335..edb9705 100644 --- a/world/jobs/voxel_terrarin_job.cpp +++ b/world/jobs/voxel_terrarin_job.cpp @@ -27,9 +27,51 @@ SOFTWARE. #include "../../library/voxel_surface.h" #include "../../library/voxelman_library.h" +#include "../../meshers/voxel_mesher.h" #include "../default/voxel_chunk_default.h" -void build_phase_setup() { +Ref VoxelTerrarinJob::get_mesher(int index) const { + ERR_FAIL_INDEX_V(index, _meshers.size(), Ref()); + + return _meshers.get(index); +} +void VoxelTerrarinJob::set_mesher(int index, const Ref &mesher) { + ERR_FAIL_INDEX(index, _meshers.size()); + + _meshers.set(index, mesher); +} +void VoxelTerrarinJob::remove_mesher(const int index) { + ERR_FAIL_INDEX(index, _meshers.size()); + + _meshers.remove(index); +} +void VoxelTerrarinJob::add_mesher(const Ref &mesher) { + _meshers.push_back(mesher); +} +int VoxelTerrarinJob::get_mesher_count() const { + return _meshers.size(); +} + +Ref VoxelTerrarinJob::get_liquid_mesher(int index) const { + ERR_FAIL_INDEX_V(index, _liquid_meshers.size(), Ref()); + + return _liquid_meshers.get(index); +} +void VoxelTerrarinJob::set_liquid_mesher(int index, const Ref &mesher) { + ERR_FAIL_INDEX(index, _liquid_meshers.size()); + + _liquid_meshers.set(index, mesher); +} +void VoxelTerrarinJob::remove_liquid_mesher(const int index) { + ERR_FAIL_INDEX(index, _liquid_meshers.size()); + + _liquid_meshers.remove(index); +} +void VoxelTerrarinJob::add_liquid_mesher(const Ref &mesher) { + _liquid_meshers.push_back(mesher); +} +int VoxelTerrarinJob::get_liquid_mesher_count() const { + return _liquid_meshers.size(); } void VoxelTerrarinJob::_execute() { @@ -591,4 +633,15 @@ VoxelTerrarinJob::~VoxelTerrarinJob() { } void VoxelTerrarinJob::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_mesher", "index"), &VoxelTerrarinJob::get_mesher); + ClassDB::bind_method(D_METHOD("set_mesher", "index", "mesher"), &VoxelTerrarinJob::set_mesher); + ClassDB::bind_method(D_METHOD("remove_mesher", "index"), &VoxelTerrarinJob::remove_mesher); + ClassDB::bind_method(D_METHOD("add_mesher", "mesher"), &VoxelTerrarinJob::add_mesher); + ClassDB::bind_method(D_METHOD("get_mesher_count"), &VoxelTerrarinJob::get_mesher_count); + + ClassDB::bind_method(D_METHOD("get_liquid_mesher", "index"), &VoxelTerrarinJob::get_liquid_mesher); + ClassDB::bind_method(D_METHOD("set_liquid_mesher", "index", "mesher"), &VoxelTerrarinJob::set_liquid_mesher); + ClassDB::bind_method(D_METHOD("remove_liquid_mesher", "index"), &VoxelTerrarinJob::remove_liquid_mesher); + ClassDB::bind_method(D_METHOD("add_liquid_mesher", "mesher"), &VoxelTerrarinJob::add_liquid_mesher); + ClassDB::bind_method(D_METHOD("get_liquid_mesher_count"), &VoxelTerrarinJob::get_liquid_mesher_count); } diff --git a/world/jobs/voxel_terrarin_job.h b/world/jobs/voxel_terrarin_job.h index 981dedc..30ab3e4 100644 --- a/world/jobs/voxel_terrarin_job.h +++ b/world/jobs/voxel_terrarin_job.h @@ -25,10 +25,26 @@ SOFTWARE. #include "voxel_job.h" +class VoxelMesher; + class VoxelTerrarinJob : public VoxelJob { GDCLASS(VoxelTerrarinJob, VoxelJob); public: + //Meshers + Ref get_mesher(const int index) const; + void set_mesher(const int index, const Ref &mesher); + void remove_mesher(const int index); + void add_mesher(const Ref &mesher); + int get_mesher_count() const; + + //Liquid Meshers + Ref get_liquid_mesher(const int index) const; + void set_liquid_mesher(const int index, const Ref &mesher); + void remove_liquid_mesher(const int index); + void add_liquid_mesher(const Ref &mesher); + int get_liquid_mesher_count() const; + void _execute(); VoxelTerrarinJob(); @@ -37,6 +53,9 @@ public: protected: static void _bind_methods(); + Vector > _meshers; + Vector > _liquid_meshers; + PoolVector temp_arr_collider; PoolVector temp_arr_collider_liquid; };