mirror of
https://github.com/Relintai/voxelman.git
synced 2025-02-14 16:40:06 +01:00
Now chunk can only have one prop mesher.
This commit is contained in:
parent
70d9cdf6db
commit
21d135fb0b
@ -38,6 +38,7 @@ void VoxelChunkBlocky::_setup_channels() {
|
||||
}
|
||||
|
||||
void VoxelChunkBlocky::_create_meshers() {
|
||||
set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherBlocky)));
|
||||
add_mesher(Ref<VoxelMesher>(memnew(VoxelMesherBlocky())));
|
||||
add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquidBlocky())));
|
||||
|
||||
|
@ -37,6 +37,7 @@ void VoxelChunkCubic::_setup_channels() {
|
||||
}
|
||||
|
||||
void VoxelChunkCubic::_create_meshers() {
|
||||
set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherCubic)));
|
||||
add_mesher(Ref<VoxelMesher>(memnew(VoxelMesherCubic())));
|
||||
//add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquiCubic())));
|
||||
|
||||
|
@ -1146,13 +1146,9 @@ void VoxelChunkDefault::_build_phase(int phase) {
|
||||
mesher->reset();
|
||||
}
|
||||
|
||||
for (int i = 0; i < _prop_meshers.size(); ++i) {
|
||||
Ref<VoxelMesher> mesher = _prop_meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!mesher.is_valid());
|
||||
|
||||
mesher->reset();
|
||||
mesher->set_library(_library);
|
||||
if (get_prop_mesher().is_valid()) {
|
||||
get_prop_mesher()->reset();
|
||||
get_prop_mesher()->set_library(_library);
|
||||
}
|
||||
|
||||
next_phase();
|
||||
@ -1469,50 +1465,33 @@ void VoxelChunkDefault::_build_phase(int phase) {
|
||||
}
|
||||
#ifdef MESH_DATA_RESOURCE_PRESENT
|
||||
case BUILD_PHASE_MESH_DATA_RESOURCES: {
|
||||
if (!get_prop_mesher().is_valid()) {
|
||||
next_phase();
|
||||
return;
|
||||
}
|
||||
|
||||
if (get_mesh_data_resource_count() == 0) {
|
||||
next_phase();
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < _meshers.size(); ++i) {
|
||||
Ref<VoxelMesher> m = _meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!m.is_valid());
|
||||
|
||||
m->add_mesh_data_resource_transform(get_mesh_data_resource(i), get_mesh_data_resource_transform(i), get_mesh_data_resource_uv_rect(i));
|
||||
for (int i = 0; i < get_mesh_data_resource_count(); ++i) {
|
||||
get_prop_mesher()->add_mesh_data_resource_transform(get_mesh_data_resource(i), get_mesh_data_resource_transform(i), get_mesh_data_resource_uv_rect(i));
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> mesher;
|
||||
for (int i = 0; i < _meshers.size(); ++i) {
|
||||
Ref<VoxelMesher> m = _meshers.get(i);
|
||||
|
||||
ERR_CONTINUE(!m.is_valid());
|
||||
|
||||
if (!mesher.is_valid()) {
|
||||
mesher = m;
|
||||
// mesher->set_material(get_library()->get_material(0));
|
||||
continue;
|
||||
}
|
||||
|
||||
// mesher->set_material(get_library()->get_material(0));
|
||||
mesher->add_mesher(m);
|
||||
}
|
||||
|
||||
ERR_FAIL_COND(!mesher.is_valid());
|
||||
|
||||
if (mesher->get_vertex_count() == 0) {
|
||||
if (get_prop_mesher()->get_vertex_count() == 0) {
|
||||
next_phase();
|
||||
return;
|
||||
}
|
||||
|
||||
if ((_build_flags & VoxelChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
||||
mesher->bake_colors(this);
|
||||
get_prop_mesher()->bake_colors(this);
|
||||
}
|
||||
|
||||
if (mesher->get_vertex_count() != 0) {
|
||||
if (get_prop_mesher()->get_vertex_count() != 0) {
|
||||
RID mesh_rid = get_mesh_rid_index(MESH_INDEX_PROP, MESH_TYPE_INDEX_MESH, 0);
|
||||
|
||||
Array temp_mesh_arr = mesher->build_mesh();
|
||||
Array temp_mesh_arr = get_prop_mesher()->build_mesh();
|
||||
|
||||
if (mesh_rid == RID()) {
|
||||
if ((_build_flags & BUILD_FLAG_CREATE_LODS) != 0)
|
||||
@ -1681,6 +1660,10 @@ void VoxelChunkDefault::_build_phase_physics_process(int phase) {
|
||||
}
|
||||
|
||||
void VoxelChunkDefault::_create_meshers() {
|
||||
if (!_prop_mesher.is_valid()) {
|
||||
_prop_mesher = Ref<VoxelMesher>(memnew(VoxelMesherDefault));
|
||||
}
|
||||
|
||||
for (int i = 0; i < _meshers.size(); ++i) {
|
||||
Ref<VoxelMesher> mesher = _meshers.get(i);
|
||||
|
||||
|
@ -37,6 +37,7 @@ void VoxelChunkMarchingCubes::_setup_channels() {
|
||||
}
|
||||
|
||||
void VoxelChunkMarchingCubes::_create_meshers() {
|
||||
set_prop_mesher(Ref<VoxelMesher>(memnew(VoxelMesherMarchingCubes)));
|
||||
add_mesher(Ref<VoxelMesher>(memnew(VoxelMesherMarchingCubes())));
|
||||
//add_liquid_mesher(Ref<VoxelMesher>(memnew(VoxelMesherLiquidMarchingCubes())));
|
||||
|
||||
|
@ -251,26 +251,11 @@ int VoxelChunk::get_liquid_mesher_count() const {
|
||||
return _liquid_meshers.size();
|
||||
}
|
||||
|
||||
Ref<VoxelMesher> VoxelChunk::get_prop_mesher(int index) const {
|
||||
ERR_FAIL_INDEX_V(index, _prop_meshers.size(), Ref<VoxelMesher>());
|
||||
|
||||
return _prop_meshers.get(index);
|
||||
Ref<VoxelMesher> VoxelChunk::get_prop_mesher() const {
|
||||
return _prop_mesher;
|
||||
}
|
||||
void VoxelChunk::set_prop_mesher(int index, const Ref<VoxelMesher> &mesher) {
|
||||
ERR_FAIL_INDEX(index, _prop_meshers.size());
|
||||
|
||||
_prop_meshers.set(index, mesher);
|
||||
}
|
||||
void VoxelChunk::remove_prop_mesher(const int index) {
|
||||
ERR_FAIL_INDEX(index, _prop_meshers.size());
|
||||
|
||||
_prop_meshers.remove(index);
|
||||
}
|
||||
void VoxelChunk::add_prop_mesher(const Ref<VoxelMesher> &mesher) {
|
||||
_prop_meshers.push_back(mesher);
|
||||
}
|
||||
int VoxelChunk::get_prop_mesher_count() const {
|
||||
return _prop_meshers.size();
|
||||
void VoxelChunk::set_prop_mesher(const Ref<VoxelMesher> &mesher) {
|
||||
_prop_mesher = mesher;
|
||||
}
|
||||
|
||||
//Voxel Data
|
||||
@ -1100,11 +1085,9 @@ void VoxelChunk::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("add_liquid_mesher", "mesher"), &VoxelChunk::add_liquid_mesher);
|
||||
ClassDB::bind_method(D_METHOD("get_liquid_mesher_count"), &VoxelChunk::get_liquid_mesher_count);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_prop_mesher", "index"), &VoxelChunk::get_prop_mesher);
|
||||
ClassDB::bind_method(D_METHOD("set_prop_mesher", "index", "mesher"), &VoxelChunk::set_prop_mesher);
|
||||
ClassDB::bind_method(D_METHOD("remove_prop_mesher", "index"), &VoxelChunk::remove_prop_mesher);
|
||||
ClassDB::bind_method(D_METHOD("add_prop_mesher", "mesher"), &VoxelChunk::add_prop_mesher);
|
||||
ClassDB::bind_method(D_METHOD("get_prop_mesher_count"), &VoxelChunk::get_prop_mesher_count);
|
||||
ClassDB::bind_method(D_METHOD("get_prop_mesher"), &VoxelChunk::get_prop_mesher);
|
||||
ClassDB::bind_method(D_METHOD("set_prop_mesher", "mesher"), &VoxelChunk::set_prop_mesher);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "prop_mesher", PROPERTY_HINT_RESOURCE_TYPE, "VoxelMesher", 0), "set_prop_mesher", "get_prop_mesher");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_voxel_world"), &VoxelChunk::get_voxel_world);
|
||||
ClassDB::bind_method(D_METHOD("set_voxel_world", "world"), &VoxelChunk::set_voxel_world_bind);
|
||||
|
@ -146,11 +146,8 @@ public:
|
||||
int get_liquid_mesher_count() const;
|
||||
|
||||
//Prop Meshers
|
||||
Ref<VoxelMesher> get_prop_mesher(const int index) const;
|
||||
void set_prop_mesher(const int index, const Ref<VoxelMesher> &mesher);
|
||||
void remove_prop_mesher(const int index);
|
||||
void add_prop_mesher(const Ref<VoxelMesher> &mesher);
|
||||
int get_prop_mesher_count() const;
|
||||
Ref<VoxelMesher> get_prop_mesher() const;
|
||||
void set_prop_mesher(const Ref<VoxelMesher> &mesher);
|
||||
|
||||
//Channels
|
||||
void setup_channels();
|
||||
@ -299,7 +296,7 @@ protected:
|
||||
Ref<VoxelmanLibrary> _library;
|
||||
Vector<Ref<VoxelMesher> > _meshers;
|
||||
Vector<Ref<VoxelMesher> > _liquid_meshers;
|
||||
Vector<Ref<VoxelMesher> > _prop_meshers;
|
||||
Ref<VoxelMesher> _prop_mesher;
|
||||
|
||||
//mergeable props
|
||||
Vector<Ref<VoxelChunkPropData> > _props;
|
||||
|
Loading…
Reference in New Issue
Block a user