2019-11-28 21:02:42 +02:00
|
|
|
package com.minelittlepony.client.render;
|
|
|
|
|
2023-08-19 22:42:35 +01:00
|
|
|
import net.fabricmc.loader.api.FabricLoader;
|
2019-11-28 21:02:42 +02:00
|
|
|
import net.minecraft.client.render.RenderLayer;
|
|
|
|
import net.minecraft.client.render.RenderPhase;
|
2020-11-26 15:41:15 +02:00
|
|
|
import net.minecraft.client.render.VertexFormat;
|
2019-11-28 21:02:42 +02:00
|
|
|
import net.minecraft.client.render.VertexFormats;
|
2019-11-30 12:14:24 +02:00
|
|
|
import net.minecraft.util.Identifier;
|
2021-03-27 22:54:16 +02:00
|
|
|
import net.minecraft.util.Util;
|
2019-11-29 20:11:31 +02:00
|
|
|
|
|
|
|
import com.mojang.blaze3d.systems.RenderSystem;
|
2023-08-19 22:42:35 +01:00
|
|
|
import com.google.common.base.Suppliers;
|
2021-06-21 23:39:31 +02:00
|
|
|
import com.minelittlepony.common.util.Color;
|
2019-11-28 21:02:42 +02:00
|
|
|
|
2021-03-27 22:54:16 +02:00
|
|
|
import java.util.function.BiFunction;
|
2023-08-19 22:42:35 +01:00
|
|
|
import java.util.function.Supplier;
|
2021-03-27 22:54:16 +02:00
|
|
|
|
|
|
|
public abstract class MagicGlow extends RenderPhase {
|
2023-09-27 12:11:20 +01:00
|
|
|
private MagicGlow() {
|
|
|
|
super(null, null, null);
|
2019-11-28 21:02:42 +02:00
|
|
|
}
|
|
|
|
|
2023-08-19 22:42:35 +01:00
|
|
|
private static final Supplier<RenderLayer> MAGIC = Suppliers.memoize(() -> {
|
|
|
|
return RenderLayer.of("mlp_magic_glow",
|
|
|
|
FabricLoader.getInstance().isModLoaded("vulkanmod") ? VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL : VertexFormats.POSITION_COLOR_LIGHT,
|
|
|
|
VertexFormat.DrawMode.QUADS, 256, RenderLayer.MultiPhaseParameters.builder()
|
2022-12-08 01:53:59 +00:00
|
|
|
.program(EYES_PROGRAM)
|
2019-11-29 20:11:31 +02:00
|
|
|
.writeMaskState(COLOR_MASK)
|
2021-03-27 22:54:16 +02:00
|
|
|
.depthTest(LEQUAL_DEPTH_TEST)
|
2019-11-29 20:11:31 +02:00
|
|
|
.transparency(LIGHTNING_TRANSPARENCY)
|
2019-11-29 11:30:41 +02:00
|
|
|
.lightmap(DISABLE_LIGHTMAP)
|
|
|
|
.cull(DISABLE_CULLING)
|
2024-05-07 01:28:57 +01:00
|
|
|
.layering(VIEW_OFFSET_Z_LAYERING)
|
2019-11-29 11:30:41 +02:00
|
|
|
.build(false));
|
2023-08-19 22:42:35 +01:00
|
|
|
});
|
2019-11-29 11:30:41 +02:00
|
|
|
|
2021-03-27 22:54:16 +02:00
|
|
|
private static final BiFunction<Identifier, Integer, RenderLayer> TINTED_LAYER = Util.memoize((texture, color) -> {
|
2020-11-26 15:41:15 +02:00
|
|
|
return RenderLayer.of("mlp_tint_layer", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, VertexFormat.DrawMode.QUADS, 256, true, true, RenderLayer.MultiPhaseParameters.builder()
|
2021-06-21 23:39:31 +02:00
|
|
|
.texture(new Colored(texture, color))
|
2022-12-08 01:53:59 +00:00
|
|
|
.program(EYES_PROGRAM)
|
2019-11-29 20:11:31 +02:00
|
|
|
.writeMaskState(COLOR_MASK)
|
2021-03-27 22:54:16 +02:00
|
|
|
.depthTest(LEQUAL_DEPTH_TEST)
|
|
|
|
.transparency(LIGHTNING_TRANSPARENCY)
|
2019-11-29 20:11:31 +02:00
|
|
|
.lightmap(DISABLE_LIGHTMAP)
|
|
|
|
.cull(DISABLE_CULLING)
|
2024-05-07 01:28:57 +01:00
|
|
|
.layering(VIEW_OFFSET_Z_LAYERING)
|
2019-11-29 20:11:31 +02:00
|
|
|
.build(true));
|
2021-03-27 22:54:16 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
public static RenderLayer getRenderLayer() {
|
2023-08-19 22:42:35 +01:00
|
|
|
return MAGIC.get();
|
2021-03-27 22:54:16 +02:00
|
|
|
}
|
|
|
|
|
2023-03-20 18:44:53 +00:00
|
|
|
public static RenderLayer getColoured(Identifier texture, int color) {
|
|
|
|
return TINTED_LAYER.apply(texture, color);
|
2019-11-29 20:11:31 +02:00
|
|
|
}
|
|
|
|
|
2021-06-21 23:39:31 +02:00
|
|
|
private static class Colored extends Texture {
|
2019-11-29 20:11:31 +02:00
|
|
|
private final float red;
|
|
|
|
private final float green;
|
|
|
|
private final float blue;
|
|
|
|
private final float alpha;
|
|
|
|
|
2021-06-21 23:39:31 +02:00
|
|
|
public Colored(Identifier texture, int color) {
|
2019-11-30 12:14:24 +02:00
|
|
|
super(texture, false, false);
|
2021-06-21 23:39:31 +02:00
|
|
|
this.red = Color.r(color);
|
|
|
|
this.green = Color.g(color);
|
|
|
|
this.blue = Color.b(color);
|
2023-03-20 18:44:53 +00:00
|
|
|
this.alpha = 0.8F;
|
2019-11-29 20:11:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void startDrawing() {
|
2021-03-27 22:54:16 +02:00
|
|
|
RenderSystem.setShaderColor(red, green, blue, alpha);
|
2020-04-17 13:15:52 +02:00
|
|
|
super.startDrawing();
|
2019-11-29 20:11:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void endDrawing() {
|
|
|
|
super.endDrawing();
|
2021-03-27 22:54:16 +02:00
|
|
|
RenderSystem.setShaderColor(1, 1, 1, 1);
|
2019-11-29 20:11:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean equals(Object other) {
|
|
|
|
return super.equals(other)
|
2021-06-21 23:39:31 +02:00
|
|
|
&& ((Colored)other).red == red
|
|
|
|
&& ((Colored)other).green == green
|
|
|
|
&& ((Colored)other).blue == blue
|
|
|
|
&& ((Colored)other).alpha == alpha;
|
2019-11-29 20:11:31 +02:00
|
|
|
}
|
|
|
|
}
|
2019-11-28 21:02:42 +02:00
|
|
|
}
|