diff --git a/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyArrayEffectCrafting.java b/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyArrayEffectCrafting.java index 1f78ef0b..789955af 100644 --- a/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyArrayEffectCrafting.java +++ b/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyArrayEffectCrafting.java @@ -21,14 +21,18 @@ public class AlchemyArrayEffectCrafting extends AlchemyArrayEffect { if(tile.getWorld().isRemote) { return false; } + + if(ticksActive > 200){ + BlockPos pos = tile.getPos(); + + ItemStack output = outputStack.copy(); + EntityItem outputEntity = new EntityItem(tile.getWorld(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, output); + + tile.getWorld().spawnEntityInWorld(outputEntity); + + return true; + } - BlockPos pos = tile.getPos(); - - ItemStack output = outputStack.copy(); - EntityItem outputEntity = new EntityItem(tile.getWorld(), pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, output); - - tile.getWorld().spawnEntityInWorld(outputEntity); - - return true; + return false; } } diff --git a/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyCircleRenderer.java index b906acbc..66414218 100644 --- a/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyCircleRenderer.java +++ b/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyCircleRenderer.java @@ -14,21 +14,58 @@ public class AlchemyCircleRenderer { public float offsetFromFace = -0.9f; public final ResourceLocation arrayResource; - + public AlchemyCircleRenderer(ResourceLocation arrayResource) { this.arrayResource = arrayResource; } - public void renderAt(TileEntity tile, double x, double y, double z) { + public float getRotation(float craftTime) { + float offset = 2; + if (craftTime >= offset) { + float modifier = (float) Math.pow(craftTime - offset, 1.5); + return modifier * 1f; + } + return 0; + } + + public float getSecondaryRotation(float craftTime) { + float offset = 50; + if (craftTime >= offset) { + float modifier = (float) Math.pow(craftTime - offset, 1.7); + return modifier * 0.5f; + } + return 0; + } + + public float getSizeModifier(float craftTime) { + if (craftTime >= 150) { + return (200 - craftTime) / 50f; + } + return 1.0f; + } + + public float getVerticalOffset(float craftTime) { + if (craftTime >= 5) { + if (craftTime <= 40) { + return (float) ((-0.4) * Math.pow((craftTime - 5) / 35f, 3)); + } else { + return -0.4f; + } + } + return 0; + } + + public void renderAt(TileEntity tile, double x, double y, double z, float craftTime) { Tessellator tessellator = Tessellator.getInstance(); WorldRenderer wr = tessellator.getWorldRenderer(); GL11.glPushMatrix(); // float rot = (float)(this.worldObj.provider.getWorldTime() % (360 / // this.rotationspeed) * this.rotationspeed) + this.rotationspeed * f; - float rot = 0; + float rot = getRotation(craftTime); + float secondaryRot = getSecondaryRotation(craftTime); - float size = 1.0F; + float size = 1.0F * getSizeModifier(craftTime); // Bind the texture to the circle Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource); @@ -45,7 +82,8 @@ public class AlchemyCircleRenderer { EnumFacing sideHit = EnumFacing.UP; // Specify which face this "circle" // is located on - GL11.glTranslatef(sideHit.getFrontOffsetX() * offsetFromFace, sideHit.getFrontOffsetY() * offsetFromFace, sideHit.getFrontOffsetZ() * offsetFromFace); + GL11.glTranslatef(sideHit.getFrontOffsetX() * offsetFromFace, sideHit.getFrontOffsetY() + * offsetFromFace, sideHit.getFrontOffsetZ() * offsetFromFace); switch (sideHit) { case DOWN: @@ -73,31 +111,34 @@ public class AlchemyCircleRenderer { } GL11.glPushMatrix(); - GL11.glTranslatef(0.5f, 0.5f, 0); + GL11.glTranslatef(0.5f, 0.5f, getVerticalOffset(craftTime)); GL11.glRotatef(rot, 0, 0, 1); + GL11.glRotatef(secondaryRot, 1, 0, 0); + GL11.glRotatef(secondaryRot * 0.45812f, 0, 0, 1); double var31 = 0.0D; double var33 = 1.0D; double var35 = 0; double var37 = 1; // GL11.glRotatef(60.0F, 0.0F, 1.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); wr.begin(7, DefaultVertexFormats.POSITION_TEX); // wr.setBrightness(200); -// wr.putColorRGB_F(1, 1, 1, 1); -// wr.putColorMultiplier(1, 1, 1, 1); - wr.pos(0.5, 0.5, 0.0D).tex(var33, var37).endVertex(); - wr.pos(0.5, -0.5, 0.0D).tex(var33, var35).endVertex(); - wr.pos(-0.5, -0.5, 0.0D).tex(var31, var35).endVertex(); - wr.pos(-0.5, 0.5, 0.0D).tex(var31, var37).endVertex(); + // wr.putColorRGB_F(1, 1, 1, 1); + // wr.putColorMultiplier(1, 1, 1, 1); + wr.pos(size / 2f, size / 2f, 0.0D).tex(var33, var37).endVertex(); + wr.pos(size / 2f, -size / 2f, 0.0D).tex(var33, var35).endVertex(); + wr.pos(-size / 2f, -size / 2f, 0.0D).tex(var31, var35).endVertex(); + wr.pos(-size / 2f, size / 2f, 0.0D).tex(var31, var37).endVertex(); + // wr.putColorMultiplier(0.5f, 1, 1, 7); tessellator.draw(); GL11.glPopMatrix(); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDepthMask(true); GL11.glDisable(3042); GL11.glEnable(2884); -// GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + // GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glPopMatrix(); } diff --git a/src/main/java/WayofTime/bloodmagic/client/render/RenderAlchemyArray.java b/src/main/java/WayofTime/bloodmagic/client/render/RenderAlchemyArray.java index ce24f8fd..bef4a13f 100644 --- a/src/main/java/WayofTime/bloodmagic/client/render/RenderAlchemyArray.java +++ b/src/main/java/WayofTime/bloodmagic/client/render/RenderAlchemyArray.java @@ -14,8 +14,10 @@ public class RenderAlchemyArray extends TileEntitySpecialRenderer { ItemStack inputStack = ((TileAlchemyArray)tileEntity).getStackInSlot(0); AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack); - - renderer.renderAt(tileEntity, x, y, z); + + int craftTime = ((TileAlchemyArray)tileEntity).activeCounter; + + renderer.renderAt(tileEntity, x, y, z, (craftTime > 0 ? craftTime + partialTicks : 0)); } } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyArray.java b/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyArray.java index 1668146f..22c6f0c4 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyArray.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileAlchemyArray.java @@ -46,7 +46,7 @@ public class TileAlchemyArray extends TileInventory implements ITickable { if (effect != null) { isActive = true; - if (effect.update(this, 0)) { + if (effect.update(this, this.activeCounter)) { this.decrStackSize(0, 1); this.decrStackSize(1, 1); this.worldObj.setBlockToAir(getPos());