Fixed butterflies and some cloud rendering

This commit is contained in:
Sollace 2020-05-31 22:59:31 +02:00
parent 73d8a93da2
commit 10c4169742
8 changed files with 101 additions and 50 deletions

View file

@ -10,7 +10,7 @@ import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import com.minelittlepony.client.render.MagicGlow;
import com.minelittlepony.unicopia.client.render.RenderLayers;
import com.minelittlepony.unicopia.client.render.model.SphereModel;
import com.minelittlepony.unicopia.magic.Caster;
import com.minelittlepony.unicopia.particles.ParticleHandle.Attachment;
@ -126,9 +126,9 @@ public class SphereParticle extends Particle implements Attachment {
float lerpedRad = MathHelper.lerp(tickDelta, prevRadius, radius);
model.render(matrices, lerpedRad + 0.1F, immediate.getBuffer(MagicGlow.getRenderLayer()), 1, 1, red, green, blue, alpha);
model.render(matrices, lerpedRad - 0.1F, immediate.getBuffer(MagicGlow.getRenderLayer()), 1, 1, red * 0.9F, green * 0.9F, blue * 0.9F, Math.min(1, alpha + 0.2F));
VertexConsumer buffer = immediate.getBuffer(RenderLayers.magic());
model.render(matrices, lerpedRad + 0.1F, buffer, 1, 1, red, green, blue, alpha);
model.render(matrices, lerpedRad - 0.1F, buffer, 1, 1, red * 0.9F, green * 0.9F, blue * 0.9F, Math.min(1, alpha + 0.2F));
immediate.draw();

View file

@ -5,12 +5,12 @@ import com.minelittlepony.unicopia.entity.ButterflyEntity;
import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry;
import net.minecraft.client.render.entity.EntityRenderDispatcher;
import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.client.render.entity.MobEntityRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
public class ButterflyEntityRenderer extends LivingEntityRenderer<ButterflyEntity, ButterflyEntityModel> {
public class ButterflyEntityRenderer extends MobEntityRenderer<ButterflyEntity, ButterflyEntityModel> {
public ButterflyEntityRenderer(EntityRenderDispatcher manager, EntityRendererRegistry.Context context) {
super(manager, new ButterflyEntityModel(), 0.25F);
@ -22,17 +22,18 @@ public class ButterflyEntityRenderer extends LivingEntityRenderer<ButterflyEntit
}
@Override
protected void scale(ButterflyEntity entity, MatrixStack matrixStack, float ticks) {
matrixStack.scale(0.35F, 0.35F, 0.35F);
protected void scale(ButterflyEntity entity, MatrixStack matrices, float ticks) {
matrices.scale(0.35F, 0.35F, 0.35F);
matrices.translate(0.8F, 0, -0.5F);
}
@Override
protected void setupTransforms(ButterflyEntity entity, MatrixStack matrixStack, float age, float yaw, float ticks) {
protected void setupTransforms(ButterflyEntity entity, MatrixStack matrices, float age, float yaw, float ticks) {
if (!entity.isResting()) {
matrixStack.translate(0, MathHelper.cos(age / 3F) / 10F, 0);
matrices.translate(0, MathHelper.cos(age / 3F) / 10F, 0);
}
super.setupTransforms(entity, matrixStack, age, yaw, ticks);
super.setupTransforms(entity, matrices, age, yaw, ticks);
}
}

View file

@ -3,18 +3,14 @@ package com.minelittlepony.unicopia.client.render;
import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.EntityRenderDispatcher;
import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.client.render.entity.MobEntityRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Identifier;
import org.lwjgl.opengl.GL11;
import com.minelittlepony.unicopia.client.render.model.CloudEntityModel;
import com.minelittlepony.unicopia.entity.CloudEntity;
import com.minelittlepony.unicopia.util.WorldHelper;
import com.mojang.blaze3d.platform.GlStateManager;
public class CloudEntityRenderer extends LivingEntityRenderer<CloudEntity, CloudEntityModel> {
public class CloudEntityRenderer extends MobEntityRenderer<CloudEntity, CloudEntityModel> {
private static final Identifier NORMAL = new Identifier("unicopia", "textures/entity/clouds.png");
private static final Identifier RAINING = new Identifier("unicopia", "textures/entity/clouds_storm.png");
@ -32,28 +28,30 @@ public class CloudEntityRenderer extends LivingEntityRenderer<CloudEntity, Cloud
@Override
public void render(CloudEntity entity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) {
if (!entity.removed) {
if (entity.removed) {
return;
}
matrixStack.push();
matrixStack.translate(0, -entity.getHeight()/entity.getCloudSize() + 0.3F, 0);
GlStateManager.disableLighting();
GlStateManager.enableBlend();
//GlStateManager.disableLighting();
//GlStateManager.enableBlend();
float brightness = Math.max(WorldHelper.getDaylightBrightness(entity.getEntityWorld(), 0) * 3, 0.05F);
//float brightness = Math.max(WorldHelper.getDaylightBrightness(entity.getEntityWorld(), 0) * 3, 0.05F);
GlStateManager.color4f(brightness, brightness, brightness, entity.getOpaque() ? 1 : 0.8F);
//GlStateManager.color4f(brightness, brightness, brightness, entity.getOpaque() ? 1 : 0.8F);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
//GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
super.render(entity, f, g, matrixStack, vertexConsumerProvider, i);
GlStateManager.disableBlend();
GlStateManager.enableLighting();
GlStateManager.color4f(1, 1, 1, 1);
//GlStateManager.disableBlend();
//GlStateManager.enableLighting();
//GlStateManager.color4f(1, 1, 1, 1);
matrixStack.pop();
}
}
@Override
public Identifier getTexture(CloudEntity entity) {

View file

@ -0,0 +1,51 @@
package com.minelittlepony.unicopia.client.render;
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.util.Identifier;
public final class RenderLayers extends RenderLayer {
private RenderLayers(String name, VertexFormat vertexFormat, int drawMode, int expectedBufferSize,
boolean hasCrumbling, boolean translucent, Runnable startAction, Runnable endAction) {
super(name, vertexFormat, drawMode, expectedBufferSize, hasCrumbling, translucent, startAction, endAction);
}
private static final RenderLayer MAGIC = RenderLayer.of("mlp_magic_glow", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT_NORMAL, 7, 256, RenderLayer.MultiPhaseParameters.builder()
.texture(NO_TEXTURE)
.writeMaskState(COLOR_MASK)
.transparency(LIGHTNING_TRANSPARENCY)
.lightmap(DISABLE_LIGHTMAP)
.cull(DISABLE_CULLING)
.build(false));
public static RenderLayer entityNoLighting(Identifier tex) {
return RenderLayer.of("entity_cutout_no_cull_no_lighting", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, 7, 256, true, false, RenderLayer.MultiPhaseParameters.builder()
.texture(new RenderPhase.Texture(tex, false, false))
.transparency(RenderLayer.NO_TRANSPARENCY)
.diffuseLighting(RenderLayer.ENABLE_DIFFUSE_LIGHTING)
.alpha(RenderLayer.ONE_TENTH_ALPHA)
.cull(RenderLayer.DISABLE_CULLING)
.lightmap(RenderLayer.DISABLE_LIGHTMAP)
.overlay(RenderLayer.ENABLE_OVERLAY_COLOR)
.build(true));
}
public static RenderLayer cloud(Identifier tex) {
return RenderLayer.of("cloud", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, 7, 256, true, false, RenderLayer.MultiPhaseParameters.builder()
.texture(new RenderPhase.Texture(tex, false, false))
.transparency(RenderLayer.TRANSLUCENT_TRANSPARENCY)
.diffuseLighting(RenderLayer.ENABLE_DIFFUSE_LIGHTING)
.alpha(RenderLayer.ONE_TENTH_ALPHA)
.cull(RenderLayer.DISABLE_CULLING)
.lightmap(RenderLayer.DISABLE_LIGHTMAP)
.overlay(RenderLayer.ENABLE_OVERLAY_COLOR)
.build(true));
}
public static RenderLayer magic() {
return MAGIC;
}
}

View file

@ -1,8 +1,7 @@
package com.minelittlepony.unicopia.client.render.model;
import com.minelittlepony.unicopia.client.render.RenderLayers;
import com.minelittlepony.unicopia.entity.ButterflyEntity;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.entity.model.EntityModel;
@ -20,6 +19,7 @@ public class ButterflyEntityModel extends EntityModel<ButterflyEntity> {
private ModelPart rightWingOuter;
public ButterflyEntityModel() {
super(RenderLayers::entityNoLighting);
textureWidth = 64;
textureHeight = 64;
@ -58,9 +58,7 @@ public class ButterflyEntityModel extends EntityModel<ButterflyEntity> {
@Override
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) {
RenderSystem.disableLighting();
body.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
RenderSystem.enableLighting();
}
@Override

View file

@ -1,16 +1,19 @@
package com.minelittlepony.unicopia.client.render.model;
import com.google.common.collect.ImmutableList;
import com.minelittlepony.unicopia.client.render.RenderLayers;
import com.minelittlepony.unicopia.entity.CloudEntity;
import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.entity.model.CompositeEntityModel;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.entity.model.EntityModel;
import net.minecraft.client.util.math.MatrixStack;
public class CloudEntityModel extends CompositeEntityModel<CloudEntity> {
public class CloudEntityModel extends EntityModel<CloudEntity> {
private final ModelPart body;
public CloudEntityModel() {
super(RenderLayers::cloud);
body = new ModelPart(this, 0, 0);
body.setTextureSize(250, 90);
@ -27,8 +30,8 @@ public class CloudEntityModel extends CompositeEntityModel<CloudEntity> {
}
@Override
public Iterable<ModelPart> getParts() {
return ImmutableList.of(body);
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) {
body.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
}
@Override

View file

@ -74,7 +74,7 @@ public class ButterflyEntity extends AmbientEntity {
@Override
public boolean collides() {
return false;
return true;
}
@Override
@ -82,7 +82,7 @@ public class ButterflyEntity extends AmbientEntity {
super.tick();
Vec3d vel = getVelocity();
setVelocity(vel.x, getY() * 0.6, vel.z);
setVelocity(vel.x, vel.y * 0.6 + 0.02F, vel.z);
}
public boolean isResting() {
@ -199,7 +199,7 @@ public class ButterflyEntity extends AmbientEntity {
}
@Override
public float getEyeHeight(EntityPose pos) {
public float getEyeHeight(EntityPose pose) {
return getHeight() / 2;
}

View file

@ -29,7 +29,7 @@ public interface UEntities {
EntityType<CuccoonEntity> CUCCOON = register("cuccoon", FabricEntityTypeBuilder.create(EntityCategory.MISC, CuccoonEntity::new).size(EntityDimensions.changing(1.5F, 1.6F)));
EntityType<ButterflyEntity> BUTTERFLY = register("butterfly", FabricEntityTypeBuilder.create(EntityCategory.AMBIENT, ButterflyEntity::new));
EntityType<ButterflyEntity> BUTTERFLY = register("butterfly", FabricEntityTypeBuilder.create(EntityCategory.AMBIENT, ButterflyEntity::new).size(EntityDimensions.fixed(1, 1)));
EntityType<ProjectileEntity> THROWN_ITEM = register("thrown_item", FabricEntityTypeBuilder.<ProjectileEntity>create(EntityCategory.MISC, ProjectileEntity::new).trackable(100, 2));
EntityType<SpearEntity> THROWN_SPEAR = register("thrown_spear", FabricEntityTypeBuilder.<SpearEntity>create(EntityCategory.MISC, SpearEntity::new).trackable(100, 2));