mirror of
https://github.com/Relintai/voxelman.git
synced 2025-04-17 21:06:32 +02:00
Remove create_mesher and _create_mesher from chunks. Mesher creating now should be handled by the world itself in _create_chunk. This makes worlds able to use different chunk mesher setups for different parts of a world. Also this cust down the amount of classes that you need to create if you are implementing a new mesher.
This commit is contained in:
parent
3add3daef4
commit
0e4e59e970
@ -22,15 +22,8 @@ SOFTWARE.
|
|||||||
|
|
||||||
#include "voxel_chunk_blocky.h"
|
#include "voxel_chunk_blocky.h"
|
||||||
|
|
||||||
#include "../../meshers/blocky/voxel_mesher_blocky.h"
|
|
||||||
#include "../../meshers/blocky/voxel_mesher_liquid_blocky.h"
|
|
||||||
|
|
||||||
#include "../../defines.h"
|
#include "../../defines.h"
|
||||||
|
|
||||||
#include "../jobs/voxel_light_job.h"
|
|
||||||
#include "../jobs/voxel_prop_job.h"
|
|
||||||
#include "../jobs/voxel_terrarin_job.h"
|
|
||||||
|
|
||||||
VoxelChunkBlocky::VoxelChunkBlocky() {
|
VoxelChunkBlocky::VoxelChunkBlocky() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,25 +34,6 @@ void VoxelChunkBlocky::_setup_channels() {
|
|||||||
set_channel_count(MAX_DEFAULT_CHANNELS);
|
set_channel_count(MAX_DEFAULT_CHANNELS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VoxelChunkBlocky::_create_meshers() {
|
|
||||||
Ref<VoxelTerrarinJob> tj;
|
|
||||||
tj.instance();
|
|
||||||
|
|
||||||
Ref<VoxelLightJob> lj;
|
|
||||||
lj.instance();
|
|
||||||
|
|
||||||
Ref<VoxelPropJob> pj;
|
|
||||||
pj.instance();
|
|
||||||
pj->set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherBlocky)));
|
|
||||||
|
|
||||||
tj->add_mesher(Ref<VoxelMesher>(memnew(VoxelMesherBlocky())));
|
|
||||||
tj->add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquidBlocky())));
|
|
||||||
|
|
||||||
add_job(lj);
|
|
||||||
add_job(tj);
|
|
||||||
add_job(pj);
|
|
||||||
}
|
|
||||||
|
|
||||||
void VoxelChunkBlocky::_bind_methods() {
|
void VoxelChunkBlocky::_bind_methods() {
|
||||||
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "data_channel"), "set_channel_compressed", "get_channel_compressed", 0);
|
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "data_channel"), "set_channel_compressed", "get_channel_compressed", 0);
|
||||||
|
|
||||||
|
@ -34,7 +34,6 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void _setup_channels();
|
virtual void _setup_channels();
|
||||||
virtual void _create_meshers();
|
|
||||||
|
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
};
|
};
|
||||||
|
@ -24,10 +24,33 @@ SOFTWARE.
|
|||||||
|
|
||||||
#include "voxel_chunk_blocky.h"
|
#include "voxel_chunk_blocky.h"
|
||||||
|
|
||||||
|
#include "../../meshers/blocky/voxel_mesher_blocky.h"
|
||||||
|
#include "../../meshers/blocky/voxel_mesher_liquid_blocky.h"
|
||||||
|
#include "../jobs/voxel_light_job.h"
|
||||||
|
#include "../jobs/voxel_prop_job.h"
|
||||||
|
#include "../jobs/voxel_terrarin_job.h"
|
||||||
|
|
||||||
Ref<VoxelChunk> VoxelWorldBlocky::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
Ref<VoxelChunk> VoxelWorldBlocky::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
||||||
|
|
||||||
if (!chunk.is_valid()) {
|
if (!chunk.is_valid()) {
|
||||||
chunk = Ref<VoxelChunk>(memnew(VoxelChunkBlocky));
|
chunk = Ref<VoxelChunk>(memnew(VoxelChunkBlocky));
|
||||||
|
|
||||||
|
Ref<VoxelTerrarinJob> tj;
|
||||||
|
tj.instance();
|
||||||
|
|
||||||
|
Ref<VoxelLightJob> lj;
|
||||||
|
lj.instance();
|
||||||
|
|
||||||
|
Ref<VoxelPropJob> pj;
|
||||||
|
pj.instance();
|
||||||
|
pj->set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherBlocky)));
|
||||||
|
|
||||||
|
tj->add_mesher(Ref<VoxelMesher>(memnew(VoxelMesherBlocky())));
|
||||||
|
tj->add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquidBlocky())));
|
||||||
|
|
||||||
|
chunk->add_job(lj);
|
||||||
|
chunk->add_job(tj);
|
||||||
|
chunk->add_job(pj);
|
||||||
}
|
}
|
||||||
|
|
||||||
return VoxelWorld::_create_chunk(x, y, z, chunk);
|
return VoxelWorld::_create_chunk(x, y, z, chunk);
|
||||||
|
@ -22,14 +22,8 @@ SOFTWARE.
|
|||||||
|
|
||||||
#include "voxel_chunk_cubic.h"
|
#include "voxel_chunk_cubic.h"
|
||||||
|
|
||||||
#include "../../meshers/cubic/voxel_mesher_cubic.h"
|
|
||||||
|
|
||||||
#include "../../defines.h"
|
#include "../../defines.h"
|
||||||
|
|
||||||
#include "../jobs/voxel_light_job.h"
|
|
||||||
#include "../jobs/voxel_prop_job.h"
|
|
||||||
#include "../jobs/voxel_terrarin_job.h"
|
|
||||||
|
|
||||||
VoxelChunkCubic::VoxelChunkCubic() {
|
VoxelChunkCubic::VoxelChunkCubic() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,29 +34,6 @@ void VoxelChunkCubic::_setup_channels() {
|
|||||||
set_channel_count(MAX_DEFAULT_CHANNELS);
|
set_channel_count(MAX_DEFAULT_CHANNELS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VoxelChunkCubic::_create_meshers() {
|
|
||||||
Ref<VoxelTerrarinJob> tj;
|
|
||||||
tj.instance();
|
|
||||||
|
|
||||||
Ref<VoxelLightJob> lj;
|
|
||||||
lj.instance();
|
|
||||||
|
|
||||||
Ref<VoxelPropJob> pj;
|
|
||||||
pj.instance();
|
|
||||||
pj->set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherCubic)));
|
|
||||||
|
|
||||||
Ref<VoxelMesher> m = Ref<VoxelMesher>(memnew(VoxelMesherCubic()));
|
|
||||||
m->set_channel_index_type(VoxelChunkDefault::DEFAULT_CHANNEL_TYPE);
|
|
||||||
m->set_channel_index_isolevel(VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
|
||||||
|
|
||||||
tj->add_mesher(m);
|
|
||||||
//add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquidMarchingCubes())));
|
|
||||||
|
|
||||||
add_job(lj);
|
|
||||||
add_job(tj);
|
|
||||||
add_job(pj);
|
|
||||||
}
|
|
||||||
|
|
||||||
void VoxelChunkCubic::_bind_methods() {
|
void VoxelChunkCubic::_bind_methods() {
|
||||||
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "data_channel"), "set_channel_compressed", "get_channel_compressed", 0);
|
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "data_channel"), "set_channel_compressed", "get_channel_compressed", 0);
|
||||||
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "isolevel_channel"), "set_channel_compressed", "get_channel_compressed", 1);
|
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "isolevel_channel"), "set_channel_compressed", "get_channel_compressed", 1);
|
||||||
|
@ -34,7 +34,6 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void _setup_channels();
|
virtual void _setup_channels();
|
||||||
virtual void _create_meshers();
|
|
||||||
|
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
};
|
};
|
||||||
|
@ -24,10 +24,36 @@ SOFTWARE.
|
|||||||
|
|
||||||
#include "voxel_chunk_cubic.h"
|
#include "voxel_chunk_cubic.h"
|
||||||
|
|
||||||
|
#include "../../meshers/cubic/voxel_mesher_cubic.h"
|
||||||
|
#include "../jobs/voxel_light_job.h"
|
||||||
|
#include "../jobs/voxel_prop_job.h"
|
||||||
|
#include "../jobs/voxel_terrarin_job.h"
|
||||||
|
|
||||||
Ref<VoxelChunk> VoxelWorldCubic::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
Ref<VoxelChunk> VoxelWorldCubic::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
||||||
|
|
||||||
if (!chunk.is_valid()) {
|
if (!chunk.is_valid()) {
|
||||||
chunk = Ref<VoxelChunk>(memnew(VoxelChunkCubic));
|
chunk = Ref<VoxelChunk>(memnew(VoxelChunkCubic));
|
||||||
|
|
||||||
|
Ref<VoxelTerrarinJob> tj;
|
||||||
|
tj.instance();
|
||||||
|
|
||||||
|
Ref<VoxelLightJob> lj;
|
||||||
|
lj.instance();
|
||||||
|
|
||||||
|
Ref<VoxelPropJob> pj;
|
||||||
|
pj.instance();
|
||||||
|
pj->set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherCubic)));
|
||||||
|
|
||||||
|
Ref<VoxelMesher> m = Ref<VoxelMesher>(memnew(VoxelMesherCubic()));
|
||||||
|
m->set_channel_index_type(VoxelChunkDefault::DEFAULT_CHANNEL_TYPE);
|
||||||
|
m->set_channel_index_isolevel(VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||||
|
|
||||||
|
tj->add_mesher(m);
|
||||||
|
//add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquidMarchingCubes())));
|
||||||
|
|
||||||
|
chunk->add_job(lj);
|
||||||
|
chunk->add_job(tj);
|
||||||
|
chunk->add_job(pj);
|
||||||
}
|
}
|
||||||
|
|
||||||
return VoxelWorld::_create_chunk(x, y, z, chunk);
|
return VoxelWorld::_create_chunk(x, y, z, chunk);
|
||||||
|
@ -870,22 +870,6 @@ void VoxelChunkDefault::_setup_channels() {
|
|||||||
set_channel_count(MAX_DEFAULT_CHANNELS);
|
set_channel_count(MAX_DEFAULT_CHANNELS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VoxelChunkDefault::_create_meshers() {
|
|
||||||
Ref<VoxelTerrarinJob> tj;
|
|
||||||
tj.instance();
|
|
||||||
|
|
||||||
Ref<VoxelLightJob> lj;
|
|
||||||
lj.instance();
|
|
||||||
|
|
||||||
Ref<VoxelPropJob> pj;
|
|
||||||
pj.instance();
|
|
||||||
pj->set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherDefault)));
|
|
||||||
|
|
||||||
add_job(lj);
|
|
||||||
add_job(tj);
|
|
||||||
add_job(pj);
|
|
||||||
}
|
|
||||||
|
|
||||||
void VoxelChunkDefault::_bind_methods() {
|
void VoxelChunkDefault::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("get_build_flags"), &VoxelChunkDefault::get_build_flags);
|
ClassDB::bind_method(D_METHOD("get_build_flags"), &VoxelChunkDefault::get_build_flags);
|
||||||
ClassDB::bind_method(D_METHOD("set_build_flags", "value"), &VoxelChunkDefault::set_build_flags);
|
ClassDB::bind_method(D_METHOD("set_build_flags", "value"), &VoxelChunkDefault::set_build_flags);
|
||||||
@ -957,7 +941,6 @@ void VoxelChunkDefault::_bind_methods() {
|
|||||||
//virtuals
|
//virtuals
|
||||||
ClassDB::bind_method(D_METHOD("_setup_channels"), &VoxelChunkDefault::_setup_channels);
|
ClassDB::bind_method(D_METHOD("_setup_channels"), &VoxelChunkDefault::_setup_channels);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("_create_meshers"), &VoxelChunkDefault::_create_meshers);
|
|
||||||
ClassDB::bind_method(D_METHOD("_visibility_changed", "visible"), &VoxelChunkDefault::_visibility_changed);
|
ClassDB::bind_method(D_METHOD("_visibility_changed", "visible"), &VoxelChunkDefault::_visibility_changed);
|
||||||
|
|
||||||
//lights
|
//lights
|
||||||
|
@ -182,7 +182,6 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
virtual void _setup_channels();
|
virtual void _setup_channels();
|
||||||
|
|
||||||
virtual void _create_meshers();
|
|
||||||
virtual void _visibility_changed(bool visible);
|
virtual void _visibility_changed(bool visible);
|
||||||
|
|
||||||
virtual void _exit_tree();
|
virtual void _exit_tree();
|
||||||
|
@ -26,6 +26,11 @@ SOFTWARE.
|
|||||||
|
|
||||||
#include "../../defines.h"
|
#include "../../defines.h"
|
||||||
|
|
||||||
|
#include "../../meshers/default/voxel_mesher_default.h"
|
||||||
|
#include "../jobs/voxel_light_job.h"
|
||||||
|
#include "../jobs/voxel_prop_job.h"
|
||||||
|
#include "../jobs/voxel_terrarin_job.h"
|
||||||
|
|
||||||
_FORCE_INLINE_ int VoxelWorldDefault::get_build_flags() const {
|
_FORCE_INLINE_ int VoxelWorldDefault::get_build_flags() const {
|
||||||
return _build_flags;
|
return _build_flags;
|
||||||
}
|
}
|
||||||
@ -160,6 +165,20 @@ void VoxelWorldDefault::_update_lods() {
|
|||||||
Ref<VoxelChunk> VoxelWorldDefault::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
Ref<VoxelChunk> VoxelWorldDefault::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
||||||
if (!chunk.is_valid()) {
|
if (!chunk.is_valid()) {
|
||||||
chunk = Ref<VoxelChunk>(memnew(VoxelChunkDefault));
|
chunk = Ref<VoxelChunk>(memnew(VoxelChunkDefault));
|
||||||
|
|
||||||
|
Ref<VoxelTerrarinJob> tj;
|
||||||
|
tj.instance();
|
||||||
|
|
||||||
|
Ref<VoxelLightJob> lj;
|
||||||
|
lj.instance();
|
||||||
|
|
||||||
|
Ref<VoxelPropJob> pj;
|
||||||
|
pj.instance();
|
||||||
|
pj->set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherDefault)));
|
||||||
|
|
||||||
|
chunk->add_job(lj);
|
||||||
|
chunk->add_job(tj);
|
||||||
|
chunk->add_job(pj);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<VoxelChunkDefault> vcd = chunk;
|
Ref<VoxelChunkDefault> vcd = chunk;
|
||||||
|
@ -22,14 +22,8 @@ SOFTWARE.
|
|||||||
|
|
||||||
#include "voxel_chunk_marching_cubes.h"
|
#include "voxel_chunk_marching_cubes.h"
|
||||||
|
|
||||||
#include "../../meshers/marching_cubes/voxel_mesher_marching_cubes.h"
|
|
||||||
|
|
||||||
#include "../../defines.h"
|
#include "../../defines.h"
|
||||||
|
|
||||||
#include "../jobs/voxel_light_job.h"
|
|
||||||
#include "../jobs/voxel_prop_job.h"
|
|
||||||
#include "../jobs/voxel_terrarin_job.h"
|
|
||||||
|
|
||||||
VoxelChunkMarchingCubes::VoxelChunkMarchingCubes() {
|
VoxelChunkMarchingCubes::VoxelChunkMarchingCubes() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,29 +34,6 @@ void VoxelChunkMarchingCubes::_setup_channels() {
|
|||||||
set_channel_count(MAX_DEFAULT_CHANNELS);
|
set_channel_count(MAX_DEFAULT_CHANNELS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VoxelChunkMarchingCubes::_create_meshers() {
|
|
||||||
Ref<VoxelTerrarinJob> tj;
|
|
||||||
tj.instance();
|
|
||||||
|
|
||||||
Ref<VoxelLightJob> lj;
|
|
||||||
lj.instance();
|
|
||||||
|
|
||||||
Ref<VoxelPropJob> pj;
|
|
||||||
pj.instance();
|
|
||||||
pj->set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherMarchingCubes)));
|
|
||||||
|
|
||||||
Ref<VoxelMesher> m = Ref<VoxelMesher>(memnew(VoxelMesherMarchingCubes()));
|
|
||||||
m->set_channel_index_type(VoxelChunkDefault::DEFAULT_CHANNEL_TYPE);
|
|
||||||
m->set_channel_index_isolevel(VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
|
||||||
|
|
||||||
tj->add_mesher(m);
|
|
||||||
//add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquidMarchingCubes())));
|
|
||||||
|
|
||||||
add_job(lj);
|
|
||||||
add_job(tj);
|
|
||||||
add_job(pj);
|
|
||||||
}
|
|
||||||
|
|
||||||
void VoxelChunkMarchingCubes::_bind_methods() {
|
void VoxelChunkMarchingCubes::_bind_methods() {
|
||||||
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "data_channel"), "set_channel_compressed", "get_channel_compressed", 0);
|
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "data_channel"), "set_channel_compressed", "get_channel_compressed", 0);
|
||||||
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "isolevel_channel"), "set_channel_compressed", "get_channel_compressed", 1);
|
ADD_PROPERTYI(PropertyInfo(Variant::POOL_BYTE_ARRAY, "isolevel_channel"), "set_channel_compressed", "get_channel_compressed", 1);
|
||||||
|
@ -34,7 +34,6 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void _setup_channels();
|
virtual void _setup_channels();
|
||||||
virtual void _create_meshers();
|
|
||||||
|
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
};
|
};
|
||||||
|
@ -24,10 +24,35 @@ SOFTWARE.
|
|||||||
|
|
||||||
#include "voxel_chunk_marching_cubes.h"
|
#include "voxel_chunk_marching_cubes.h"
|
||||||
|
|
||||||
Ref<VoxelChunk> VoxelWorldMarchingCubes::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
#include "../../meshers/marching_cubes/voxel_mesher_marching_cubes.h"
|
||||||
|
#include "../jobs/voxel_light_job.h"
|
||||||
|
#include "../jobs/voxel_prop_job.h"
|
||||||
|
#include "../jobs/voxel_terrarin_job.h"
|
||||||
|
|
||||||
|
Ref<VoxelChunk> VoxelWorldMarchingCubes::_create_chunk(int x, int y, int z, Ref<VoxelChunk> chunk) {
|
||||||
if (!chunk.is_valid()) {
|
if (!chunk.is_valid()) {
|
||||||
chunk = Ref<VoxelChunk>(memnew(VoxelChunkMarchingCubes));
|
chunk = Ref<VoxelChunk>(memnew(VoxelChunkMarchingCubes));
|
||||||
|
|
||||||
|
Ref<VoxelTerrarinJob> tj;
|
||||||
|
tj.instance();
|
||||||
|
|
||||||
|
Ref<VoxelLightJob> lj;
|
||||||
|
lj.instance();
|
||||||
|
|
||||||
|
Ref<VoxelPropJob> pj;
|
||||||
|
pj.instance();
|
||||||
|
pj->set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherMarchingCubes)));
|
||||||
|
|
||||||
|
Ref<VoxelMesher> m = Ref<VoxelMesher>(memnew(VoxelMesherMarchingCubes()));
|
||||||
|
m->set_channel_index_type(VoxelChunkDefault::DEFAULT_CHANNEL_TYPE);
|
||||||
|
m->set_channel_index_isolevel(VoxelChunkDefault::DEFAULT_CHANNEL_ISOLEVEL);
|
||||||
|
|
||||||
|
tj->add_mesher(m);
|
||||||
|
//add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquidMarchingCubes())));
|
||||||
|
|
||||||
|
chunk->add_job(lj);
|
||||||
|
chunk->add_job(tj);
|
||||||
|
chunk->add_job(pj);
|
||||||
}
|
}
|
||||||
|
|
||||||
return VoxelWorld::_create_chunk(x, y, z, chunk);
|
return VoxelWorld::_create_chunk(x, y, z, chunk);
|
||||||
|
@ -562,12 +562,6 @@ _FORCE_INLINE_ int VoxelChunk::get_data_size() const {
|
|||||||
return _data_size_x * _data_size_y * _data_size_z;
|
return _data_size_x * _data_size_y * _data_size_z;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VoxelChunk::create_meshers() {
|
|
||||||
ERR_FAIL_COND_MSG(!has_method("_create_meshers"), "VoxelChunk: _create_meshers() is missing! Please implement it!");
|
|
||||||
|
|
||||||
call("_create_meshers");
|
|
||||||
}
|
|
||||||
|
|
||||||
void VoxelChunk::build() {
|
void VoxelChunk::build() {
|
||||||
ERR_FAIL_COND(!INSTANCE_VALIDATE(get_voxel_world()));
|
ERR_FAIL_COND(!INSTANCE_VALIDATE(get_voxel_world()));
|
||||||
ERR_FAIL_COND(!get_voxel_world()->is_inside_tree());
|
ERR_FAIL_COND(!get_voxel_world()->is_inside_tree());
|
||||||
@ -1128,7 +1122,6 @@ void VoxelChunk::_bind_methods() {
|
|||||||
|
|
||||||
BIND_VMETHOD(MethodInfo("_mesh_data_resource_added", PropertyInfo(Variant::INT, "index")));
|
BIND_VMETHOD(MethodInfo("_mesh_data_resource_added", PropertyInfo(Variant::INT, "index")));
|
||||||
|
|
||||||
BIND_VMETHOD(MethodInfo("_create_meshers"));
|
|
||||||
BIND_VMETHOD(MethodInfo("_setup_channels"));
|
BIND_VMETHOD(MethodInfo("_setup_channels"));
|
||||||
|
|
||||||
BIND_VMETHOD(MethodInfo("_bake_lights"));
|
BIND_VMETHOD(MethodInfo("_bake_lights"));
|
||||||
@ -1355,8 +1348,6 @@ void VoxelChunk::_bind_methods() {
|
|||||||
ClassDB::bind_method(D_METHOD("remove_collider", "index"), &VoxelChunk::remove_collider);
|
ClassDB::bind_method(D_METHOD("remove_collider", "index"), &VoxelChunk::remove_collider);
|
||||||
ClassDB::bind_method(D_METHOD("clear_colliders"), &VoxelChunk::clear_colliders);
|
ClassDB::bind_method(D_METHOD("clear_colliders"), &VoxelChunk::clear_colliders);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("create_meshers"), &VoxelChunk::create_meshers);
|
|
||||||
|
|
||||||
BIND_VMETHOD(MethodInfo("_build"));
|
BIND_VMETHOD(MethodInfo("_build"));
|
||||||
ClassDB::bind_method(D_METHOD("build"), &VoxelChunk::build);
|
ClassDB::bind_method(D_METHOD("build"), &VoxelChunk::build);
|
||||||
ClassDB::bind_method(D_METHOD("_build"), &VoxelChunk::_build);
|
ClassDB::bind_method(D_METHOD("_build"), &VoxelChunk::_build);
|
||||||
|
@ -184,7 +184,6 @@ public:
|
|||||||
int get_data_size() const;
|
int get_data_size() const;
|
||||||
|
|
||||||
//Meshing
|
//Meshing
|
||||||
void create_meshers();
|
|
||||||
void build();
|
void build();
|
||||||
void clear();
|
void clear();
|
||||||
void finalize_build();
|
void finalize_build();
|
||||||
|
@ -402,6 +402,8 @@ Ref<VoxelChunk> VoxelWorld::create_chunk(const int x, const int y, const int z)
|
|||||||
Ref<VoxelChunk> VoxelWorld::_create_chunk(const int x, const int y, const int z, Ref<VoxelChunk> chunk) {
|
Ref<VoxelChunk> VoxelWorld::_create_chunk(const int x, const int y, const int z, Ref<VoxelChunk> chunk) {
|
||||||
if (!chunk.is_valid()) {
|
if (!chunk.is_valid()) {
|
||||||
chunk.instance();
|
chunk.instance();
|
||||||
|
|
||||||
|
//no meshers here
|
||||||
}
|
}
|
||||||
|
|
||||||
ERR_FAIL_COND_V(!chunk.is_valid(), NULL);
|
ERR_FAIL_COND_V(!chunk.is_valid(), NULL);
|
||||||
@ -420,8 +422,6 @@ Ref<VoxelChunk> VoxelWorld::_create_chunk(const int x, const int y, const int z,
|
|||||||
chunk->set_size(_chunk_size_x, _chunk_size_y, _chunk_size_z, _data_margin_start, _data_margin_end);
|
chunk->set_size(_chunk_size_x, _chunk_size_y, _chunk_size_z, _data_margin_start, _data_margin_end);
|
||||||
//chunk->set_translation(Vector3(x * _chunk_size_x * _voxel_scale, y * _chunk_size_y * _voxel_scale, z * _chunk_size_z * _voxel_scale));
|
//chunk->set_translation(Vector3(x * _chunk_size_x * _voxel_scale, y * _chunk_size_y * _voxel_scale, z * _chunk_size_z * _voxel_scale));
|
||||||
|
|
||||||
chunk->create_meshers();
|
|
||||||
|
|
||||||
add_chunk(chunk, x, y, z);
|
add_chunk(chunk, x, y, z);
|
||||||
|
|
||||||
add_to_generation_queue(chunk);
|
add_to_generation_queue(chunk);
|
||||||
|
Loading…
Reference in New Issue
Block a user