Change the color of the beam to match the spell it contains

This commit is contained in:
Sollace 2022-01-11 20:42:41 +02:00
parent f18ed7eed6
commit 1cfc01d1e6
5 changed files with 34 additions and 17 deletions

View file

@ -65,7 +65,7 @@ public final class ThrowableSpell extends AbstractDelegatingSpell {
projectile.setPosition(entity.getX(), entity.getEyeY() - 0.1F, entity.getZ());
projectile.setOwner(entity);
projectile.setItem(GemstoneItem.enchant(UItems.GEMSTONE.getDefaultStack(), spell.getType()));
projectile.getSpellSlot().put(this);
projectile.getSpellSlot().put(spell);
projectile.setVelocity(entity, entity.getPitch(), entity.getYaw(), 0, 1.5F, divergance);
projectile.setNoGravity(true);
configureProjectile(projectile, caster);

View file

@ -129,7 +129,7 @@ public class SphereParticle extends Particle implements Attachment {
RenderSystem.setShaderColor(color[0], color[1], color[2], colorAlpha / 3F);
VertexConsumerProvider.Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers();
VertexConsumer buffer = immediate.getBuffer(RenderLayers.getMagicGlow());
VertexConsumer buffer = immediate.getBuffer(RenderLayers.getMagicNoColor());
MatrixStack matrices = new MatrixStack();

View file

@ -1,37 +1,48 @@
package com.minelittlepony.unicopia.client.render;
import java.util.function.Function;
import com.minelittlepony.common.util.Color;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexFormat;
import net.minecraft.client.render.VertexFormats;
import net.minecraft.util.Util;
public final class RenderLayers extends RenderLayer {
private RenderLayers() {
super(null, null, null, 0, false, false, null, null);
}
private static final RenderLayer MAGIC_GLOW = of("uni_shield", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL,
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()
.shader(COLOR_SHADER)
.transparency(TRANSLUCENT_TRANSPARENCY)
.target(TRANSLUCENT_TARGET)
.build(false));
private static final RenderLayer FAIRY = of("fairy", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL,
VertexFormat.DrawMode.QUADS, 256, true, true, MultiPhaseParameters.builder()
.shader(COLOR_SHADER)
.transparency(TRANSLUCENT_TRANSPARENCY)
.target(TRANSLUCENT_TARGET)
.texturing(solid(0.8F, 0.9F, 1, 0.6F))
.build(false));
private static final Function<Integer, RenderLayer> MAGIC_COLORIN_FUNC = Util.memoize(color -> {
return of("magic_colored_" + color, VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL,
VertexFormat.DrawMode.QUADS, 256, true, true, MultiPhaseParameters.builder()
.shader(COLOR_SHADER)
.transparency(TRANSLUCENT_TRANSPARENCY)
.target(TRANSLUCENT_TARGET)
.texturing(solid(Color.r(color), Color.g(color), Color.b(color), 0.6F))
.build(false));
});
private static final RenderLayer MAGIC_COLORED = getMagicColored(Color.argbToHex(1, 0.8F, 0.9F, 1));
public static RenderLayer getMagicGlow() {
return MAGIC_GLOW;
public static RenderLayer getMagicNoColor() {
return MAGIC_NO_COLOR;
}
public static RenderLayer getFairy() {
return FAIRY;
public static RenderLayer getMagicColored() {
return MAGIC_COLORED;
}
public static RenderLayer getMagicColored(int color) {
return MAGIC_COLORIN_FUNC.apply(color);
}
private static Texturing solid(float r, float g, float b, float a) {

View file

@ -27,7 +27,7 @@ public class FairyEntityRenderer extends MobEntityRenderer<FairyEntity, FairyEnt
private float radius;
public Model() {
super(texture -> RenderLayers.getFairy());
super(texture -> RenderLayers.getMagicColored());
}
@Override

View file

@ -47,14 +47,20 @@ public class MagicBeamEntityRenderer extends EntityRenderer<MagicProjectileEntit
return;
}
float scale = 1 - tickDelta/30F;
matrices.push();
matrices.scale(scale, scale, scale);
model.setAngles(entity, 0, 0, tickDelta,
entity.getYaw(tickDelta) * MathHelper.RADIANS_PER_DEGREE,
-entity.getPitch(tickDelta) * MathHelper.RADIANS_PER_DEGREE
);
RenderLayer layer = model.getLayer(getTexture(entity));
RenderLayer layer = entity.getSpellSlot().get(true)
.map(spell -> spell.getType().getColor())
.map(RenderLayers::getMagicColored)
.orElseGet(RenderLayers::getMagicColored);
model.render(matrices, vertexConsumers.getBuffer(layer), light, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1);
@ -67,7 +73,7 @@ public class MagicBeamEntityRenderer extends EntityRenderer<MagicProjectileEntit
private final ModelPart part;
public Model(ModelPart part) {
super(texture -> RenderLayers.getFairy());
super(texture -> RenderLayers.getMagicColored());
this.part = part;
}