MineLittlePony/src/main/java/com/minelittlepony/client/render/MagicGlow.java

88 lines
3.2 KiB
Java
Raw Normal View History

2019-11-28 21:02:42 +02:00
package com.minelittlepony.client.render;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.RenderPhase;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.util.Identifier;
2019-11-29 20:11:31 +02:00
2019-12-07 12:10:39 +02:00
import com.mojang.blaze3d.platform.GlStateManager.DstFactor;
import com.mojang.blaze3d.platform.GlStateManager.SrcFactor;
2019-11-29 20:11:31 +02:00
import com.mojang.blaze3d.systems.RenderSystem;
2019-11-28 21:02:42 +02:00
public class MagicGlow extends RenderPhase {
2019-11-29 11:30:41 +02:00
private MagicGlow(String name, Runnable beginAction, Runnable endAction) {
2019-11-28 21:02:42 +02:00
super(name, beginAction, endAction);
}
2019-11-29 20:11:31 +02:00
protected static final RenderPhase.Transparency GLOWING_TRANSPARENCY = new RenderPhase.Transparency("glowing_transparency", () -> {
RenderSystem.enableBlend();
RenderSystem.blendFuncSeparate(
2019-12-07 12:10:39 +02:00
SrcFactor.CONSTANT_COLOR, DstFactor.ONE,
SrcFactor.ONE, DstFactor.ZERO);
2019-11-29 20:11:31 +02:00
}, () -> {
RenderSystem.disableBlend();
RenderSystem.defaultBlendFunc();
});
2019-12-07 12:10:39 +02:00
private static final RenderLayer MAGIC = RenderLayer.of("mlp_magic_glow", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT_NORMAL, 7, 256, RenderLayer.MultiPhaseParameters.builder()
2019-11-29 11:30:41 +02:00
.texture(NO_TEXTURE)
2019-11-29 20:11:31 +02:00
.writeMaskState(COLOR_MASK)
.transparency(LIGHTNING_TRANSPARENCY)
2019-11-29 11:30:41 +02:00
.lightmap(DISABLE_LIGHTMAP)
.cull(DISABLE_CULLING)
.build(false));
2019-11-28 21:02:42 +02:00
public static RenderLayer getRenderLayer() {
2019-11-29 11:30:41 +02:00
return MAGIC;
2019-11-28 21:02:42 +02:00
}
2019-11-29 20:11:31 +02:00
public static RenderLayer getTintedTexturedLayer(Identifier texture, float red, float green, float blue, float alpha) {
2019-12-07 12:10:39 +02:00
return RenderLayer.of("mlp_tint_layer", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, 7, 256, true, true, RenderLayer.MultiPhaseParameters.builder()
.texture(new Color(texture, red, green, blue, alpha))
2019-11-29 20:11:31 +02:00
.writeMaskState(COLOR_MASK)
.alpha(ONE_TENTH_ALPHA)
.transparency(GLOWING_TRANSPARENCY)
.lightmap(DISABLE_LIGHTMAP)
.overlay(DISABLE_OVERLAY_COLOR)
.cull(DISABLE_CULLING)
.build(true));
}
private static class Color extends Texture {
private final float red;
private final float green;
private final float blue;
private final float alpha;
public Color(Identifier texture, float red, float green, float blue, float alpha) {
super(texture, false, false);
2019-11-29 20:11:31 +02:00
this.red = red;
this.green = green;
this.blue = blue;
this.alpha = alpha;
}
@Override
public void startDrawing() {
super.startDrawing();
RenderSystem.blendColor(red, green, blue, alpha);
}
@Override
public void endDrawing() {
super.endDrawing();
RenderSystem.blendColor(1, 1, 1, 1);
}
@Override
public boolean equals(Object other) {
return super.equals(other)
&& ((Color)other).red == red
&& ((Color)other).green == green
&& ((Color)other).blue == blue
&& ((Color)other).alpha == alpha;
}
}
2019-11-28 21:02:42 +02:00
}