Readded Spike and Updraft Arrays. Also WIP Day Array

This commit is contained in:
WayofTime 2020-12-28 16:28:33 -05:00
parent 64b20227b2
commit f01a743a3e
22 changed files with 928 additions and 426 deletions

View file

@ -21,6 +21,8 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import wayoftime.bloodmagic.BloodMagic;
import wayoftime.bloodmagic.api.compat.IMultiWillTool;
import wayoftime.bloodmagic.client.model.MimicColor;
import wayoftime.bloodmagic.client.render.alchemyarray.BeaconAlchemyCircleRenderer;
import wayoftime.bloodmagic.client.render.alchemyarray.LowStaticAlchemyCircleRenderer;
import wayoftime.bloodmagic.client.render.alchemyarray.StaticAlchemyCircleRenderer;
import wayoftime.bloodmagic.client.render.block.RenderAlchemyArray;
import wayoftime.bloodmagic.client.render.block.RenderAltar;
@ -102,6 +104,9 @@ public class ClientEvents
});
AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/movement"), new StaticAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/movementarray.png")));
AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/updraft"), new BeaconAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/updraftarray.png")));
AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/spike"), new LowStaticAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/spikearray.png")));
AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/day"), new LowStaticAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/spikearray.png")));
}
public static void registerItemModelProperties(FMLClientSetupEvent event)

View file

@ -0,0 +1,113 @@
package wayoftime.bloodmagic.client.render.alchemyarray;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Quaternion;
import wayoftime.bloodmagic.client.render.BloodMagicRenderer;
import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model2D;
import wayoftime.bloodmagic.client.render.RenderResizableQuadrilateral;
import wayoftime.bloodmagic.tile.TileAlchemyArray;
public class BeaconAlchemyCircleRenderer extends AlchemyArrayRenderer
{
public BeaconAlchemyCircleRenderer(ResourceLocation arrayResource)
{
super(arrayResource);
}
@Override
public float getRotation(float craftTime)
{
float offset = 2;
if (craftTime >= offset)
{
float modifier = (craftTime - offset) * 5f;
return modifier * 1f;
}
return 0;
}
@Override
public float getSecondaryRotation(float craftTime)
{
float offset = 50;
float secondaryOffset = 150;
if (craftTime >= offset)
{
if (craftTime < secondaryOffset)
{
float modifier = 90 * (craftTime - offset) / (secondaryOffset - offset);
return modifier;
} else
{
return 90;
}
}
return 0;
}
public float getSizeModifier(float craftTime)
{
return 1.0f;
}
// public float getVerticalOffset(float craftTime)
// {
// if (craftTime >= 5)
// {
// if (craftTime <= 40)
// {
// return (float) (-0.4 + (0.4) * Math.pow((craftTime - 5) / 35f, 3));
// } else
// {
// return 0;
// }
// }
// return -0.4f;
// }
public void renderAt(TileAlchemyArray tileArray, double x, double y, double z, float craftTime, MatrixStack matrixStack, IRenderTypeBuffer renderer, int combinedLightIn, int combinedOverlayIn)
{
matrixStack.push();
matrixStack.translate(0.5, 0.5, 0.5);
float rot = getRotation(craftTime);
float secondaryRot = getSecondaryRotation(craftTime);
float size = 1.0F * getSizeModifier(craftTime);
Direction rotation = tileArray.getRotation();
matrixStack.push();
matrixStack.translate(0, getVerticalOffset(craftTime), 0);
matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true));
matrixStack.push();
matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), rot, true));
matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), -secondaryRot, true));
// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true));
IVertexBuilder twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(arrayResource));
Model2D arrayModel = new BloodMagicRenderer.Model2D();
arrayModel.minX = -0.5;
arrayModel.maxX = +0.5;
arrayModel.minY = -0.5;
arrayModel.maxY = +0.5;
arrayModel.resource = arrayResource;
matrixStack.scale(size, size, size);
// RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, 0x000000FF, 0xFFFFFFFF, OverlayTexture.NO_OVERLAY);
RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, 0xFFFFFFFF, 0x00F000F0, combinedOverlayIn);
matrixStack.pop();
matrixStack.pop();
matrixStack.pop();
}
}

View file

@ -0,0 +1,23 @@
package wayoftime.bloodmagic.client.render.alchemyarray;
import net.minecraft.util.ResourceLocation;
import wayoftime.bloodmagic.BloodMagic;
public class LowAlchemyCircleRenderer extends SingleAlchemyCircleRenderer
{
public LowAlchemyCircleRenderer()
{
this(BloodMagic.rl("textures/models/AlchemyArrays/SkeletonTurret1.png"));
}
public LowAlchemyCircleRenderer(ResourceLocation arrayResource)
{
super(arrayResource);
}
@Override
public float getVerticalOffset(float craftTime)
{
return -0.4f;
}
}

View file

@ -0,0 +1,36 @@
package wayoftime.bloodmagic.client.render.alchemyarray;
import net.minecraft.util.ResourceLocation;
import wayoftime.bloodmagic.BloodMagic;
public class LowStaticAlchemyCircleRenderer extends LowAlchemyCircleRenderer
{
public LowStaticAlchemyCircleRenderer()
{
this(BloodMagic.rl("textures/models/AlchemyArrays/SkeletonTurret1.png"));
}
public LowStaticAlchemyCircleRenderer(ResourceLocation arrayResource)
{
super(arrayResource);
}
@Override
public float getRotation(float craftTime)
{
return 0;
}
public float getSecondaryRotation(float craftTime)
{
float offset = 2;
float duration = 180;
if (craftTime >= offset && craftTime < offset + duration)
{
float modifier = (craftTime - offset) * 2f;
return modifier * 1f;
}
return 0;
}
}

View file

@ -0,0 +1,84 @@
package wayoftime.bloodmagic.client.render.alchemyarray;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.util.Direction;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Quaternion;
import wayoftime.bloodmagic.client.render.BloodMagicRenderer;
import wayoftime.bloodmagic.client.render.BloodMagicRenderer.Model2D;
import wayoftime.bloodmagic.client.render.RenderResizableQuadrilateral;
import wayoftime.bloodmagic.tile.TileAlchemyArray;
public class SingleAlchemyCircleRenderer extends AlchemyArrayRenderer
{
public SingleAlchemyCircleRenderer(ResourceLocation arrayResource)
{
super(arrayResource);
}
@Override
public float getRotation(float craftTime)
{
float offset = 2;
if (craftTime >= offset)
{
float modifier = (craftTime - offset) * 2f;
return modifier * 1f;
}
return 0;
}
public float getSecondaryRotation(float craftTime)
{
return 0;
}
public float getSizeModifier(float craftTime)
{
return 1.0f;
}
public void renderAt(TileAlchemyArray tileArray, double x, double y, double z, float craftTime, MatrixStack matrixStack, IRenderTypeBuffer renderer, int combinedLightIn, int combinedOverlayIn)
{
matrixStack.push();
matrixStack.translate(0.5, 0.5, 0.5);
float rot = getRotation(craftTime);
float secondaryRot = getSecondaryRotation(craftTime);
float size = 1.0F * getSizeModifier(craftTime);
Direction rotation = tileArray.getRotation();
matrixStack.push();
matrixStack.translate(0, getVerticalOffset(craftTime), 0);
matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), -rotation.getHorizontalAngle(), true));
matrixStack.push();
matrixStack.rotate(new Quaternion(Direction.NORTH.toVector3f(), rot, true));
matrixStack.rotate(new Quaternion(Direction.UP.toVector3f(), secondaryRot, true));
// matrixStack.rotate(new Quaternion(Direction.EAST.toVector3f(), secondaryRot * 0.45812f, true));
IVertexBuilder twoDBuffer = renderer.getBuffer(RenderType.getEntityTranslucent(arrayResource));
Model2D arrayModel = new BloodMagicRenderer.Model2D();
arrayModel.minX = -0.5;
arrayModel.maxX = +0.5;
arrayModel.minY = -0.5;
arrayModel.maxY = +0.5;
arrayModel.resource = arrayResource;
matrixStack.scale(size, size, size);
RenderResizableQuadrilateral.INSTANCE.renderSquare(arrayModel, matrixStack, twoDBuffer, 0xFFFFFFFF, 0x00F000F0, OverlayTexture.NO_OVERLAY);
matrixStack.pop();
matrixStack.pop();
matrixStack.pop();
}
}