mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-17 10:24:23 +01:00
Render a damage overlay on the crystal heart
This commit is contained in:
parent
b0e61fbd11
commit
d39c003c2e
2 changed files with 47 additions and 9 deletions
|
@ -2,18 +2,22 @@ package com.minelittlepony.unicopia.client.render;
|
|||
|
||||
import com.minelittlepony.unicopia.entity.FloatingArtefactEntity;
|
||||
import com.minelittlepony.unicopia.item.UItems;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.OverlayTexture;
|
||||
import net.minecraft.client.render.OverlayVertexConsumer;
|
||||
import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.VertexConsumers;
|
||||
import net.minecraft.client.render.entity.EntityRenderer;
|
||||
import net.minecraft.client.render.entity.EntityRendererFactory;
|
||||
import net.minecraft.client.render.item.ItemRenderer;
|
||||
import net.minecraft.client.render.model.BakedModel;
|
||||
import net.minecraft.client.render.model.ModelLoader;
|
||||
import net.minecraft.client.render.model.json.ModelTransformationMode;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.screen.PlayerScreenHandler;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.RotationAxis;
|
||||
|
||||
public class FloatingArtefactEntityRenderer extends EntityRenderer<FloatingArtefactEntity> {
|
||||
|
@ -26,7 +30,7 @@ public class FloatingArtefactEntityRenderer extends EntityRenderer<FloatingArtef
|
|||
}
|
||||
|
||||
@Override
|
||||
public void render(FloatingArtefactEntity entity, float yaw, float timeDelta, MatrixStack transforms, VertexConsumerProvider renderContext, int lightUv) {
|
||||
public void render(FloatingArtefactEntity entity, float yaw, float timeDelta, MatrixStack matrices, VertexConsumerProvider vertices, int lightUv) {
|
||||
|
||||
ItemStack stack = entity.getStack();
|
||||
|
||||
|
@ -42,16 +46,18 @@ public class FloatingArtefactEntityRenderer extends EntityRenderer<FloatingArtef
|
|||
|
||||
float scale = 1.6F;
|
||||
|
||||
transforms.push();
|
||||
transforms.scale(scale, scale, scale);
|
||||
transforms.translate(0, verticalOffset + variance * modelScaleY, 0);
|
||||
transforms.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(entity.getRotation(timeDelta)));
|
||||
matrices.push();
|
||||
matrices.scale(scale, scale, scale);
|
||||
matrices.translate(0, verticalOffset + variance * modelScaleY, 0);
|
||||
matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(entity.getRotation(timeDelta)));
|
||||
|
||||
itemRenderer.renderItem(stack, ModelTransformationMode.GROUND, false, transforms, renderContext, lightUv, OverlayTexture.DEFAULT_UV, model);
|
||||
int destructionStage = (int)(MathHelper.clamp(1 - (entity.getHealth() / entity.getMaxHealth()), 0, 1) * (ModelLoader.field_32983 - 1));
|
||||
|
||||
transforms.pop();
|
||||
itemRenderer.renderItem(stack, ModelTransformationMode.GROUND, false, matrices, getDestructionOverlayProvider(matrices, vertices, destructionStage), lightUv, OverlayTexture.DEFAULT_UV, model);
|
||||
|
||||
super.render(entity, yaw, timeDelta, transforms, renderContext, lightUv);
|
||||
matrices.pop();
|
||||
|
||||
super.render(entity, yaw, timeDelta, matrices, vertices, lightUv);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -59,4 +65,17 @@ public class FloatingArtefactEntityRenderer extends EntityRenderer<FloatingArtef
|
|||
return PlayerScreenHandler.BLOCK_ATLAS_TEXTURE;
|
||||
}
|
||||
|
||||
static VertexConsumerProvider getDestructionOverlayProvider(MatrixStack matrices, VertexConsumerProvider vertices, int stage) {
|
||||
if (stage <= 0) {
|
||||
return vertices;
|
||||
}
|
||||
final MatrixStack.Entry entry = matrices.peek();
|
||||
final OverlayVertexConsumer destructionOverlay = new OverlayVertexConsumer(
|
||||
MinecraftClient.getInstance().getBufferBuilders().getEffectVertexConsumers().getBuffer(RenderLayers.getCrumbling(stage)),
|
||||
entry.getPositionMatrix(),
|
||||
entry.getNormalMatrix(),
|
||||
4F
|
||||
);
|
||||
return layer -> layer.hasCrumbling() ? VertexConsumers.union(destructionOverlay, vertices.getBuffer(layer)) : vertices.getBuffer(layer);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.minelittlepony.unicopia.client.render;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Function;
|
||||
|
||||
|
@ -7,8 +8,10 @@ import com.minelittlepony.common.util.Color;
|
|||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.client.render.RenderPhase;
|
||||
import net.minecraft.client.render.VertexFormat;
|
||||
import net.minecraft.client.render.VertexFormats;
|
||||
import net.minecraft.client.render.model.ModelLoader;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.Util;
|
||||
|
||||
|
@ -16,6 +19,18 @@ public final class RenderLayers extends RenderLayer {
|
|||
private RenderLayers() {
|
||||
super(null, null, null, 0, false, false, null, null);
|
||||
}
|
||||
private static final List<RenderLayer> BLOCK_DESTRUCTION_STAGE_LAYERS = ModelLoader.BLOCK_DESTRUCTION_STAGE_TEXTURES.stream().map(texture -> {
|
||||
RenderPhase.Texture texture2 = new RenderPhase.Texture(texture, false, false);
|
||||
return (RenderLayer)RenderLayer.of("alpha_crumbling", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT_NORMAL, VertexFormat.DrawMode.QUADS, 256,
|
||||
MultiPhaseParameters.builder()
|
||||
.program(CRUMBLING_PROGRAM)
|
||||
.texture(texture2)
|
||||
.writeMaskState(COLOR_MASK)
|
||||
.cull(DISABLE_CULLING)
|
||||
.depthTest(EQUAL_DEPTH_TEST)
|
||||
.transparency(CRUMBLING_TRANSPARENCY)
|
||||
.build(false));
|
||||
}).toList();
|
||||
|
||||
private static final RenderLayer MAGIC_NO_COLOR = of("magic_no_color", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL,
|
||||
VertexFormat.DrawMode.QUADS, 256, true, true, MultiPhaseParameters.builder()
|
||||
|
@ -52,6 +67,10 @@ public final class RenderLayers extends RenderLayer {
|
|||
.build(false));
|
||||
});
|
||||
|
||||
public static RenderLayer getCrumbling(int stage) {
|
||||
return BLOCK_DESTRUCTION_STAGE_LAYERS.get(stage);
|
||||
}
|
||||
|
||||
public static RenderLayer getMagicNoColor() {
|
||||
return MAGIC_NO_COLOR;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue