diff options
author | Connor-Colenso <52056774+Connor-Colenso@users.noreply.github.com> | 2023-07-01 16:59:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-01 16:59:50 +0100 |
commit | fd8da0ae301fc9c6e839a0901fd77cc59c623cdb (patch) | |
tree | f517723d4e670650644a4d83942abd4f89710bee | |
parent | 027b98a364a5a7b13fc281494844a2ccbf3712c8 (diff) | |
download | GT5-Unofficial-fd8da0ae301fc9c6e839a0901fd77cc59c623cdb.tar.gz GT5-Unofficial-fd8da0ae301fc9c6e839a0901fd77cc59c623cdb.tar.bz2 GT5-Unofficial-fd8da0ae301fc9c6e839a0901fd77cc59c623cdb.zip |
Trans metal renderer rework (#2102)
-rw-r--r-- | src/main/java/gregtech/common/render/items/TranscendentMetalRenderer.java | 112 |
1 files changed, 60 insertions, 52 deletions
diff --git a/src/main/java/gregtech/common/render/items/TranscendentMetalRenderer.java b/src/main/java/gregtech/common/render/items/TranscendentMetalRenderer.java index d9149f3ec9..0fa4d733f0 100644 --- a/src/main/java/gregtech/common/render/items/TranscendentMetalRenderer.java +++ b/src/main/java/gregtech/common/render/items/TranscendentMetalRenderer.java @@ -14,62 +14,62 @@ import codechicken.lib.render.TextureUtils; import gregtech.GT_Mod; import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; import gregtech.api.util.GT_Util; -import gregtech.common.render.GT_RenderUtil; public class TranscendentMetalRenderer extends GT_GeneratedMaterial_Renderer { - // frameIndex should not have 3 or more frames with same value (unless it's meant to be still) - // otherwise the primitive linear interpolation will render the animation in a pretty sluggish way - private final int[] frameIndex = new int[] { 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 16, 17, 19, 21, - 22, 24, 25, 27, 29, 30, 32, 33, 35, 36, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, 49, 48, 47, 46, 45, - 44, 43, 42, 40, 39, 38, 36, 35, 33, 32, 30, 29, 27, 25, 24, 22, 21, 19, 17, 16, 14, 13, 12, 10, 9, 8, 7, 5, 4, - 3, 2, 1, 1, 0, 0, 0, 0 }; - private final float[] frameRotation = new float[] { 0, 7, 14, 21, 28, 36, 43, 50, 57, 64, 72, 79, 86, 93, 100, 108, - 115, 122, 129, 136, 144, 151, 158, 165, 172, 180, 187, 194, 201, 208, 216, 223, 230, 237, 244, 252, 259, 266, - 273, 280, 288, 295, 302, 309, 316, 324, 331, 338, 345, 352, 360 }; - private final float[] frameAlpha = new float[] { 100 / 255f, 106 / 255f, 112 / 255f, 118 / 255f, 124 / 255f, - 131 / 255f, 137 / 255f, 143 / 255f, 149 / 255f, 155 / 255f, 162 / 255f, 168 / 255f, 174 / 255f, 180 / 255f, - 186 / 255f, 193 / 255f, 199 / 255f, 205 / 255f, 211 / 255f, 217 / 255f, 224 / 255f, 230 / 255f, 236 / 255f, - 242 / 255f, 248 / 255f, 255 / 255f, 248 / 255f, 242 / 255f, 236 / 255f, 230 / 255f, 224 / 255f, 217 / 255f, - 211 / 255f, 205 / 255f, 199 / 255f, 193 / 255f, 186 / 255f, 180 / 255f, 174 / 255f, 168 / 255f, 162 / 255f, - 155 / 255f, 149 / 255f, 143 / 255f, 137 / 255f, 131 / 255f, 124 / 255f, 118 / 255f, 112 / 255f, 106 / 255f, - 100 / 255f }; - - private static float linearInterpolation(float[] controlPoints, int frameA, int frameB, float partial) { - float a = controlPoints[frameA], b = controlPoints[frameB]; - return a * (1 - partial) + b * partial; - } - @Override - protected void renderRegularItem(ItemRenderType type, ItemStack aStack, IIcon icon, boolean shouldModulateColor) { + protected void renderRegularItem(ItemRenderType type, ItemStack itemStack, IIcon icon, + boolean shouldModulateColor) { + + if (!(itemStack.getItem() instanceof final IGT_ItemWithMaterialRenderer itemRenderer)) return; + GL11.glPushMatrix(); - applyEffect(type, ((IGT_ItemWithMaterialRenderer) aStack.getItem()).getRGBa(aStack), shouldModulateColor); - super.renderRegularItem(type, aStack, icon, false); + applyEffect(type, itemRenderer.getRGBa(itemStack), shouldModulateColor); + + if (shouldModulateColor) { + short[] tModulation = itemRenderer.getRGBa(itemStack); + GL11.glColor3f(tModulation[0] / 255.0F, tModulation[1] / 255.0F, tModulation[2] / 255.0F); + } + + if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) { + GL11.glScalef(16, 16, 32); + } + ItemRenderer.renderItemIn2D( + Tessellator.instance, + icon.getMaxU(), + icon.getMinV(), + icon.getMinU(), + icon.getMaxV(), + icon.getIconWidth(), + icon.getIconHeight(), + 0.0625F); + GL11.glPopMatrix(); } @Override - protected void renderContainedFluid(ItemRenderType type, FluidStack aFluidStack, IIcon fluidIcon) { + protected void renderContainedFluid(ItemRenderType type, FluidStack fluidStack, IIcon fluidIcon) { GL11.glPushMatrix(); - Fluid fluid = aFluidStack.getFluid(); + Fluid fluid = fluidStack.getFluid(); applyEffect(type, GT_Util.getRGBaArray(fluid.getColor()), true); TextureUtils.bindAtlas(fluid.getSpriteNumber()); GL11.glDepthFunc(GL11.GL_EQUAL); if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) { - GT_RenderUtil.renderItemIcon(fluidIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); - } else { - ItemRenderer.renderItemIn2D( - Tessellator.instance, - fluidIcon.getMaxU(), - fluidIcon.getMinV(), - fluidIcon.getMinU(), - fluidIcon.getMaxV(), - fluidIcon.getIconWidth(), - fluidIcon.getIconHeight(), - 0.0625F); + GL11.glScalef(16, 16, 32); } + + ItemRenderer.renderItemIn2D( + Tessellator.instance, + fluidIcon.getMaxU(), + fluidIcon.getMinV(), + fluidIcon.getMinU(), + fluidIcon.getMaxV(), + fluidIcon.getIconWidth(), + fluidIcon.getIconHeight(), + 0.0625F); + GL11.glDepthFunc(GL11.GL_LEQUAL); GL11.glPopMatrix(); } @@ -78,22 +78,34 @@ public class TranscendentMetalRenderer extends GT_GeneratedMaterial_Renderer { protected void renderItemOverlay(ItemRenderType type, IIcon overlay) { GL11.glPushMatrix(); applyEffect(type, null, false); - super.renderItemOverlay(type, overlay); + + if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) { + GL11.glScalef(16, 16, 32); + } + ItemRenderer.renderItemIn2D( + Tessellator.instance, + overlay.getMaxU(), + overlay.getMinV(), + overlay.getMinU(), + overlay.getMaxV(), + overlay.getIconWidth(), + overlay.getIconHeight(), + 0.0625F); + GL11.glPopMatrix(); } private void applyEffect(ItemRenderType type, short[] modulation, boolean shouldModulateColor) { - long animationTicks = GT_Mod.gregtechproxy.getAnimationTicks(); - int frameCurrent = frameIndex[(int) (animationTicks / 2 % frameIndex.length)]; - int frameNext = frameIndex[(int) ((animationTicks + 2) / 2 % frameIndex.length)]; - float partialTicks = GT_Mod.gregtechproxy.getPartialRenderTicks(); - if ((animationTicks & 1) == 1) partialTicks = (partialTicks + 1) / 2; + if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) { GL11.glTranslatef(8f, 8f, 0f); } else { GL11.glTranslatef(0.5f, 0.5f, 0.0f); } - GL11.glRotatef(linearInterpolation(frameRotation, frameCurrent, frameNext, partialTicks), 0, 0, 1); + + GL11.glRotatef((GT_Mod.gregtechproxy.getAnimationTicks() * 3.5f) % 360, 0.3f, 0.5f, 0.2f); + GL11.glRotatef(180, 0.5f, 0.0f, 0.0f); + if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) { GL11.glTranslatef(-8f, -8f, 0f); } else { @@ -101,13 +113,9 @@ public class TranscendentMetalRenderer extends GT_GeneratedMaterial_Renderer { } if (shouldModulateColor) { - GL11.glColor4f( - modulation[0] / 255.0F, - modulation[1] / 255.0F, - modulation[2] / 255.0F, - linearInterpolation(frameAlpha, frameCurrent, frameNext, partialTicks)); + GL11.glColor4f(modulation[0] / 255.0F, modulation[1] / 255.0F, modulation[2] / 255.0F, 255); } else { - GL11.glColor4f(1f, 1f, 1f, linearInterpolation(frameAlpha, frameCurrent, frameNext, partialTicks)); + GL11.glColor4f(1f, 1f, 1f, 255); } } } |