mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-04-14 23:58:26 +02:00
Fix visibility toggling in TerrainChunkDefault even if lods are disabled.
This commit is contained in:
parent
97380e3f53
commit
82218be991
@ -82,32 +82,38 @@ int TerrainChunkDefault::get_current_lod_level() const {
|
||||
void TerrainChunkDefault::set_current_lod_level(const int value) {
|
||||
_current_lod_level = value;
|
||||
|
||||
if ((_build_flags & BUILD_FLAG_CREATE_LODS) == 0)
|
||||
if ((_build_flags & BUILD_FLAG_CREATE_LODS) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (_current_lod_level < 0)
|
||||
if (_current_lod_level < 0) {
|
||||
_current_lod_level = 0;
|
||||
}
|
||||
|
||||
int lod_num = mesh_rid_get_count(MESH_INDEX_TERRAIN, MESH_TYPE_INDEX_MESH_INSTANCE);
|
||||
|
||||
if (_current_lod_level > lod_num)
|
||||
if (_current_lod_level > lod_num) {
|
||||
_current_lod_level = lod_num;
|
||||
}
|
||||
|
||||
for (int i = 0; i < lod_num; ++i) {
|
||||
bool vis = false;
|
||||
|
||||
if (i == _current_lod_level)
|
||||
if (i == _current_lod_level) {
|
||||
vis = true;
|
||||
}
|
||||
|
||||
RID rid = mesh_rid_get_index(MESH_INDEX_TERRAIN, MESH_TYPE_INDEX_MESH_INSTANCE, i);
|
||||
|
||||
if (rid != RID())
|
||||
if (rid != RID()) {
|
||||
RenderingServer::get_singleton()->instance_set_visible(rid, vis);
|
||||
}
|
||||
|
||||
rid = mesh_rid_get_index(MESH_INDEX_PROP, MESH_TYPE_INDEX_MESH_INSTANCE, i);
|
||||
|
||||
if (rid != RID())
|
||||
if (rid != RID()) {
|
||||
RenderingServer::get_singleton()->instance_set_visible(rid, vis);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -713,7 +719,24 @@ void TerrainChunkDefault::draw_debug_mdr_colliders() {
|
||||
|
||||
void TerrainChunkDefault::_visibility_changed(bool visible) {
|
||||
if (visible) {
|
||||
set_current_lod_level(_current_lod_level);
|
||||
if ((_build_flags & BUILD_FLAG_CREATE_LODS) == 0) {
|
||||
RID rid = mesh_rid_get_index(MESH_INDEX_TERRAIN, MESH_TYPE_INDEX_MESH_INSTANCE, 0);
|
||||
|
||||
if (rid != RID()) {
|
||||
RenderingServer::get_singleton()->instance_set_visible(rid, true);
|
||||
}
|
||||
|
||||
rid = mesh_rid_get_index(MESH_INDEX_PROP, MESH_TYPE_INDEX_MESH_INSTANCE, 0);
|
||||
|
||||
if (rid != RID()) {
|
||||
RenderingServer::get_singleton()->instance_set_visible(rid, true);
|
||||
}
|
||||
|
||||
return;
|
||||
} else {
|
||||
set_current_lod_level(_current_lod_level);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -722,18 +745,21 @@ void TerrainChunkDefault::_visibility_changed(bool visible) {
|
||||
for (int i = 0; i < lod_num; ++i) {
|
||||
RID rid = mesh_rid_get_index(MESH_INDEX_TERRAIN, MESH_TYPE_INDEX_MESH_INSTANCE, i);
|
||||
|
||||
if (rid != RID())
|
||||
if (rid != RID()) {
|
||||
RenderingServer::get_singleton()->instance_set_visible(rid, false);
|
||||
}
|
||||
|
||||
rid = mesh_rid_get_index(MESH_INDEX_LIQUID, MESH_TYPE_INDEX_MESH_INSTANCE, i);
|
||||
|
||||
if (rid != RID())
|
||||
if (rid != RID()) {
|
||||
RenderingServer::get_singleton()->instance_set_visible(rid, false);
|
||||
}
|
||||
|
||||
rid = mesh_rid_get_index(MESH_INDEX_PROP, MESH_TYPE_INDEX_MESH_INSTANCE, i);
|
||||
|
||||
if (rid != RID())
|
||||
if (rid != RID()) {
|
||||
RenderingServer::get_singleton()->instance_set_visible(rid, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -73,6 +73,10 @@ bool TerrainChunk::get_visible() const {
|
||||
return _is_visible;
|
||||
}
|
||||
void TerrainChunk::set_visible(const bool value) {
|
||||
if (_is_visible == value) {
|
||||
return;
|
||||
}
|
||||
|
||||
_is_visible = value;
|
||||
|
||||
visibility_changed(value);
|
||||
|
Loading…
Reference in New Issue
Block a user