diff options
author | Léa Gris <lea.gris@noiraude.net> | 2021-03-03 13:40:27 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-03 13:40:27 +0100 |
commit | 437d41dfd788584d0d9afab8565a5de96957cd34 (patch) | |
tree | 6c19d551fc9d534473f92166f49bc85f11dba558 /src/main/java/gregtech/api/util/LightingHelper.java | |
parent | 38782e8e8d8234e88c4042674eaf9f4c9bea191f (diff) | |
parent | 22b4fef98a49481416a6930383380d0a6e5efcb8 (diff) | |
download | GT5-Unofficial-437d41dfd788584d0d9afab8565a5de96957cd34.tar.gz GT5-Unofficial-437d41dfd788584d0d9afab8565a5de96957cd34.tar.bz2 GT5-Unofficial-437d41dfd788584d0d9afab8565a5de96957cd34.zip |
Merge pull request #448 from GTNewHorizons/AO_Cast_Shadow
impr(rendering): Machine block casts an ambient occlusion shadow
Diffstat (limited to 'src/main/java/gregtech/api/util/LightingHelper.java')
-rw-r--r-- | src/main/java/gregtech/api/util/LightingHelper.java | 61 |
1 files changed, 33 insertions, 28 deletions
diff --git a/src/main/java/gregtech/api/util/LightingHelper.java b/src/main/java/gregtech/api/util/LightingHelper.java index 3696d88fec..df70ffaeef 100644 --- a/src/main/java/gregtech/api/util/LightingHelper.java +++ b/src/main/java/gregtech/api/util/LightingHelper.java @@ -286,6 +286,21 @@ public class LightingHelper { } /** + * Gets mixed ambient occlusion value from two inputs, with a + * ratio applied to the final result. + * + * @param ao1 the first ambient occlusion value + * @param ao2 the second ambient occlusion value + * @param ratio the ratio for mixing + * @return the mixed red, green, blue float values + */ + public static float getMixedAo(float ao1, float ao2, double ratio) { + float diff = (float) (Math.abs(ao1 - ao2) * (1.0F - ratio)); + + return ao1 > ao2 ? ao1 - diff : ao1 + diff; + } + + /** * Sets up lighting for the West face and returns the {@link LightingHelper}. * <p> * This is a consolidated <code>method</code> that sets side shading @@ -303,15 +318,16 @@ public class LightingHelper { * @return the {@link LightingHelper} */ public LightingHelper setupLightingXNeg(Block block, int x, int y, int z) { - int xOffset = renderBlocks.renderMinX > 0.0F ? x : x - 1; if (renderBlocks.enableAO) { + int xOffset = renderBlocks.renderMinX > 0.0F ? x : x - 1; + int mixedBrightness = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, xOffset, y, z); brightness = mixedBrightness; float ratio = (float) (1.0F - renderBlocks.renderMinX); - float aoLightValue = renderBlocks.blockAccess.getBlock(xOffset, y, z).getAmbientOcclusionLightValue(); + float aoLightValue = renderBlocks.blockAccess.getBlock(x - 1, y, z).getAmbientOcclusionLightValue(); renderBlocks.aoBrightnessXYNN = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, xOffset, y - 1, z); renderBlocks.aoBrightnessXZNN = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, xOffset, y, z - 1); @@ -356,21 +372,6 @@ public class LightingHelper { } /** - * Gets mixed ambient occlusion value from two inputs, with a - * ratio applied to the final result. - * - * @param ao1 the first ambient occlusion value - * @param ao2 the second ambient occlusion value - * @param ratio the ratio for mixing - * @return the mixed red, green, blue float values - */ - public static float getMixedAo(float ao1, float ao2, double ratio) { - float diff = (float) (Math.abs(ao1 - ao2) * (1.0F - ratio)); - - return ao1 > ao2 ? ao1 - diff : ao1 + diff; - } - - /** * Sets up lighting for the East face and returns the {@link LightingHelper}. * <p> * This is a consolidated <code>method</code> that sets side shading @@ -388,14 +389,15 @@ public class LightingHelper { * @return the {@link LightingHelper} */ public LightingHelper setupLightingXPos(Block block, int x, int y, int z) { - int xOffset = renderBlocks.renderMaxX < 1.0F ? x : x + 1; if (renderBlocks.enableAO) { + int xOffset = renderBlocks.renderMaxX < 1.0F ? x : x + 1; + int mixedBrightness = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, xOffset, y, z); brightness = mixedBrightness; - float aoLightValue = renderBlocks.blockAccess.getBlock(xOffset, y, z).getAmbientOcclusionLightValue(); + float aoLightValue = renderBlocks.blockAccess.getBlock(x + 1, y, z).getAmbientOcclusionLightValue(); renderBlocks.aoBrightnessXYPN = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, xOffset, y - 1, z); renderBlocks.aoBrightnessXZPN = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, xOffset, y, z - 1); @@ -458,15 +460,15 @@ public class LightingHelper { */ public LightingHelper setupLightingYNeg(Block block, int x, int y, int z) { - int yOffset = renderBlocks.renderMinY > 0.0F ? y : y - 1; - if (renderBlocks.enableAO) { + int yOffset = renderBlocks.renderMinY > 0.0F ? y : y - 1; + int mixedBrightness = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, x, yOffset, z); brightness = mixedBrightness; float ratio = (float) (1.0F - renderBlocks.renderMinY); - float aoLightValue = renderBlocks.blockAccess.getBlock(x, yOffset, z).getAmbientOcclusionLightValue(); + float aoLightValue = renderBlocks.blockAccess.getBlock(x, y - 1, z).getAmbientOcclusionLightValue(); renderBlocks.aoBrightnessXYNN = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, x - 1, yOffset, z); renderBlocks.aoBrightnessYZNN = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, x, yOffset, z - 1); @@ -528,14 +530,15 @@ public class LightingHelper { * @return the {@link LightingHelper} */ public LightingHelper setupLightingYPos(Block block, int x, int y, int z) { - int yOffset = renderBlocks.renderMaxY < 1.0F ? y : y + 1; if (renderBlocks.enableAO) { + int yOffset = renderBlocks.renderMaxY < 1.0F ? y : y + 1; + int mixedBrightness = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, x, yOffset, z); brightness = mixedBrightness; - float aoLightValue = renderBlocks.blockAccess.getBlock(x, yOffset, z).getAmbientOcclusionLightValue(); + float aoLightValue = renderBlocks.blockAccess.getBlock(x, y + 1, z).getAmbientOcclusionLightValue(); renderBlocks.aoBrightnessXYNP = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, x - 1, yOffset, z); renderBlocks.aoBrightnessXYPP = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, x + 1, yOffset, z); @@ -596,15 +599,16 @@ public class LightingHelper { * @return the {@link LightingHelper} */ public LightingHelper setupLightingZNeg(Block block, int x, int y, int z) { - int zOffset = renderBlocks.renderMinZ > 0.0F ? z : z - 1; if (renderBlocks.enableAO) { + int zOffset = renderBlocks.renderMinZ > 0.0F ? z : z - 1; + int mixedBrightness = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, x, y, zOffset); brightness = mixedBrightness; float ratio = (float) (1.0F - renderBlocks.renderMinZ); - float aoLightValue = renderBlocks.blockAccess.getBlock(x, y, zOffset).getAmbientOcclusionLightValue(); + float aoLightValue = renderBlocks.blockAccess.getBlock(x, y, z - 1).getAmbientOcclusionLightValue(); renderBlocks.aoBrightnessXZNN = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, x - 1, y, zOffset); renderBlocks.aoBrightnessYZNN = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, x, y - 1, zOffset); @@ -666,14 +670,15 @@ public class LightingHelper { * @return the {@link LightingHelper} */ public LightingHelper setupLightingZPos(Block block, int x, int y, int z) { - int zOffset = renderBlocks.renderMaxZ < 1.0F ? z : z + 1; if (renderBlocks.enableAO) { + int zOffset = renderBlocks.renderMaxZ < 1.0F ? z : z + 1; + int mixedBrightness = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, x, y, zOffset); brightness = mixedBrightness; - float aoLightValue = renderBlocks.blockAccess.getBlock(x, y, zOffset).getAmbientOcclusionLightValue(); + float aoLightValue = renderBlocks.blockAccess.getBlock(x, y, z + 1).getAmbientOcclusionLightValue(); renderBlocks.aoBrightnessXZNP = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, x - 1, y, zOffset); renderBlocks.aoBrightnessXZPP = block.getMixedBrightnessForBlock(renderBlocks.blockAccess, x + 1, y, zOffset); |