Fix cave renderer - handle different types of air in 1.13

This commit is contained in:
Mike Primm 2018-08-24 02:17:28 -05:00
parent 1babea2ace
commit d391d192d6
5 changed files with 59 additions and 29 deletions

View file

@ -42,7 +42,13 @@ public class CaveHDShader implements HDShader {
name = (String) configuration.get("name");
iflit = configuration.getBoolean("onlyiflit", false);
setHidden(DynmapBlockState.AIR); /* Air is hidden always */
for (int i = 0; i < DynmapBlockState.getGlobalIndexMax(); i++) {
DynmapBlockState bs = DynmapBlockState.getStateByGlobalIndex(i);
if (bs.isAir() || bs.isWater()) {
setHidden(bs);
}
}
List<Object> hidden = configuration.getList("hiddennames");
if(hidden != null) {
for(Object o : hidden) {
@ -60,6 +66,12 @@ public class CaveHDShader implements HDShader {
setHidden(DynmapBlockState.SNOW_BLOCK);
setHidden(DynmapBlockState.ICE_BLOCK);
setHidden(DynmapBlockState.SNOW_LAYER_BLOCK);
for (int i = 0; i < DynmapBlockState.getGlobalIndexMax(); i++) {
DynmapBlockState bs = DynmapBlockState.getStateByGlobalIndex(i);
if (bs.isLeaves() || bs.isSnow() || bs.isLog()) {
setHidden(bs);
}
}
}
}
@ -166,7 +178,7 @@ public class CaveHDShader implements HDShader {
if (isHidden(blocktype)) {
blocktype = DynmapBlockState.AIR;
}
else {
else if (blocktype.isNotAir()) {
air = false;
return false;
}

View file

@ -512,18 +512,17 @@ public class IsoHDPerspective implements HDPerspective {
* Process visit of ray to block
*/
private final boolean visit_block(HDShaderState[] shaderstate, boolean[] shaderdone) {
boolean done = false;
lastblocktype = blocktype;
blocktype = mapiter.getBlockType();
if(skiptoair) { /* If skipping until we see air */
if (skiptoair) { /* If skipping until we see air */
if (blocktype.isAir()) { /* If air, we're done */
skiptoair = false;
}
}
else if(nonairhit || blocktype.isNotAir()) {
done = true;
// If waterlogged, start by rendering as if full water block
if (blocktype.isWaterlogged()) {
boolean done = true;
DynmapBlockState saved_type = blocktype;
if (full_water == null) {
full_water = DynmapBlockState.getBaseStateByName(DynmapBlockState.WATER_BLOCK);
@ -536,12 +535,12 @@ public class IsoHDPerspective implements HDPerspective {
}
done = done && shaderdone[i];
}
// Restore block type
blocktype = saved_type;
/* If all are done, we're out */
if (done) {
return true;
}
// Restore block type
blocktype = saved_type;
nonairhit = true;
}
short[] model;
@ -559,12 +558,13 @@ public class IsoHDPerspective implements HDPerspective {
}
/* Look up to see if block is modelled */
if(patches != null) {
done = handlePatches(patches, shaderstate, shaderdone);
return handlePatches(patches, shaderstate, shaderdone);
}
else if ((model = scalemodels.getScaledModel(blocktype)) != null) {
done = handleSubModel(model, shaderstate, shaderdone);
return handleSubModel(model, shaderstate, shaderdone);
}
else {
boolean done = true;
subalpha = -1;
for(int i = 0; i < shaderstate.length; i++) {
if(!shaderdone[i]) {
@ -572,11 +572,12 @@ public class IsoHDPerspective implements HDPerspective {
}
done = done && shaderdone[i];
}
if (!done)
nonairhit = true;
if (done)
return true;
nonairhit = true;
}
}
return done;
return false;
}
/* Skip empty : return false if exited */

View file

@ -2143,12 +2143,6 @@ block:id=blue_ice,allfaces=0:blue_ice,stdrot=true
# Conduit
block:id=conduit,allfaces=0:conduit,transparency=TRANSPARENT
# Void air
block:id=void_air,transparency=TRANSPARENT
# Cave air
block:id=cave_air,transparency=TRANSPARENT
# Bubble column (taken care of due to being waterlogged)
block:id=bubble_column,transparency=SEMITRANSPARENT