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.setPosition(entity.getX(), entity.getEyeY() - 0.1F, entity.getZ());
projectile.setOwner(entity); projectile.setOwner(entity);
projectile.setItem(GemstoneItem.enchant(UItems.GEMSTONE.getDefaultStack(), spell.getType())); 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.setVelocity(entity, entity.getPitch(), entity.getYaw(), 0, 1.5F, divergance);
projectile.setNoGravity(true); projectile.setNoGravity(true);
configureProjectile(projectile, caster); 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); RenderSystem.setShaderColor(color[0], color[1], color[2], colorAlpha / 3F);
VertexConsumerProvider.Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers(); VertexConsumerProvider.Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers();
VertexConsumer buffer = immediate.getBuffer(RenderLayers.getMagicGlow()); VertexConsumer buffer = immediate.getBuffer(RenderLayers.getMagicNoColor());
MatrixStack matrices = new MatrixStack(); MatrixStack matrices = new MatrixStack();

View file

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

View file

@ -47,14 +47,20 @@ public class MagicBeamEntityRenderer extends EntityRenderer<MagicProjectileEntit
return; return;
} }
float scale = 1 - tickDelta/30F;
matrices.push(); matrices.push();
matrices.scale(scale, scale, scale);
model.setAngles(entity, 0, 0, tickDelta, model.setAngles(entity, 0, 0, tickDelta,
entity.getYaw(tickDelta) * MathHelper.RADIANS_PER_DEGREE, entity.getYaw(tickDelta) * MathHelper.RADIANS_PER_DEGREE,
-entity.getPitch(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); 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; private final ModelPart part;
public Model(ModelPart part) { public Model(ModelPart part) {
super(texture -> RenderLayers.getFairy()); super(texture -> RenderLayers.getMagicColored());
this.part = part; this.part = part;
} }