From db5ab41728d2ab1010d5c9f1bd72077718cf4ff1 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Sat, 26 Dec 2015 14:40:51 -0500 Subject: [PATCH] Fancified the mock binding alchemy array. Need to work on angle math so that the path speed along the path is constant, not the angle. --- .../CraftingArrayEffectBinding.java | 11 +++++ .../AlchemyArrayEffectCrafting.java | 8 +++- .../BindingAlchemyCircleRenderer.java | 45 +++++++++++++++++-- .../bloodmagic/registry/ModRecipes.java | 3 +- 4 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/alchemyArray/CraftingArrayEffectBinding.java diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/CraftingArrayEffectBinding.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/CraftingArrayEffectBinding.java new file mode 100644 index 00000000..f77a5507 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/alchemyArray/CraftingArrayEffectBinding.java @@ -0,0 +1,11 @@ +package WayofTime.bloodmagic.alchemyArray; + +import net.minecraft.item.ItemStack; +import WayofTime.bloodmagic.api.alchemyCrafting.AlchemyArrayEffectCrafting; + +public class CraftingArrayEffectBinding extends AlchemyArrayEffectCrafting{ + + public CraftingArrayEffectBinding(ItemStack outputStack) { + super(outputStack, 300); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyArrayEffectCrafting.java b/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyArrayEffectCrafting.java index 789955af..97912e1d 100644 --- a/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyArrayEffectCrafting.java +++ b/src/main/java/WayofTime/bloodmagic/api/alchemyCrafting/AlchemyArrayEffectCrafting.java @@ -10,9 +10,15 @@ public class AlchemyArrayEffectCrafting extends AlchemyArrayEffect { @Getter public final ItemStack outputStack; + public int tickLimit; public AlchemyArrayEffectCrafting(ItemStack outputStack) { + this(outputStack, 200); + } + + public AlchemyArrayEffectCrafting(ItemStack outputStack, int tickLimit) { this.outputStack = outputStack; + this.tickLimit = tickLimit; } @Override @@ -22,7 +28,7 @@ public class AlchemyArrayEffectCrafting extends AlchemyArrayEffect { return false; } - if(ticksActive > 200){ + if(ticksActive >= tickLimit){ BlockPos pos = tile.getPos(); ItemStack output = outputStack.copy(); diff --git a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/BindingAlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/BindingAlchemyCircleRenderer.java index d6471e8c..699c29bd 100644 --- a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/BindingAlchemyCircleRenderer.java +++ b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/BindingAlchemyCircleRenderer.java @@ -15,6 +15,12 @@ public class BindingAlchemyCircleRenderer extends AlchemyCircleRenderer { public float offsetFromFace = -0.9f; public final ResourceLocation arrayResource; public final ResourceLocation[] arraysResources; + + public final int numberOfSweeps = 5; + public final int startTime = 50; + public final int sweepTime = 40; + + public final int endTime = 300; public BindingAlchemyCircleRenderer() { this.arrayResource = new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SightSigil.png"); @@ -28,21 +34,54 @@ public class BindingAlchemyCircleRenderer extends AlchemyCircleRenderer { public float getAngleOfCircle(int circle, float craftTime) { if (circle >= 0 && circle <= 4) { - return (float) (circle * 2 * Math.PI / 5d); + float originalAngle = (float) (circle * 2 * Math.PI / 5d); + + double sweep = (craftTime - startTime)/sweepTime; + if(sweep >= 0 && sweep < numberOfSweeps) { + float offset = ((int)sweep)*sweepTime + startTime; + originalAngle += 2*Math.PI*2/5*((craftTime - offset)/sweepTime + (int)sweep); + }else if(sweep >= numberOfSweeps) + { + originalAngle += 2*Math.PI*2/5*numberOfSweeps + (craftTime - 5*sweepTime - startTime)*2*Math.PI*2/5/sweepTime; + } + + return originalAngle; } return 0; } + + public float getAngle(float craftTime, int sweep) { + return (float) (2*Math.PI*2/5*(craftTime)/sweepTime); + } /** * Returns the center-to-center distance of this circle. */ public float getDistanceOfCircle(int circle, float craftTime) { + double sweep = (craftTime - startTime)/sweepTime; + if(sweep >= 0 && sweep < numberOfSweeps) { + float offset = ((int)sweep)*sweepTime + startTime; + float angle = getAngle(craftTime - offset, (int) sweep); + float theta2 = (float) (Math.PI - 4*Math.PI/5)/2f; + float thetaPrime = (float) (Math.PI - theta2 - angle); + if(thetaPrime > 0 && thetaPrime < Math.PI) { + return (float) (2 * Math.sin(theta2) / Math.sin(thetaPrime)); + } + } else if(sweep >= numberOfSweeps && craftTime < endTime) { + return 2 - 2 * (craftTime - startTime - numberOfSweeps * sweepTime) / (endTime - startTime - numberOfSweeps * sweepTime); + } else if(craftTime >= endTime) { + return 0; + } + return 2; } public float getRotation(int circle, float craftTime) { float offset = 2; + if(circle == -1) { + return (float) (craftTime * 360 * 2/5/sweepTime); + } if (craftTime >= offset) { float modifier = (float) Math.pow(craftTime - offset, 1.5); return modifier * 0.5f; @@ -88,7 +127,7 @@ public class BindingAlchemyCircleRenderer extends AlchemyCircleRenderer { GlStateManager.pushMatrix(); - float rot = getRotation(craftTime); + float rot = getRotation(-1, craftTime); float secondaryRot = getSecondaryRotation(craftTime); float size = 3.0F; @@ -141,7 +180,7 @@ public class BindingAlchemyCircleRenderer extends AlchemyCircleRenderer { // GlStateManager.color(0.5f, 1f, 1f, 1f); GlStateManager.pushMatrix(); - // GlStateManager.rotate(rot, 0, 0, 1); + GlStateManager.rotate(rot, 0, 0, 1); // GlStateManager.rotate(secondaryRot, 1, 0, 0); // GlStateManager.rotate(secondaryRot * 0.45812f, 0, 0, 1); wr.begin(7, DefaultVertexFormats.POSITION_TEX); diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java index 0a2c0caa..4831b72b 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java @@ -4,6 +4,7 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import WayofTime.bloodmagic.alchemyArray.CraftingArrayEffectBinding; import WayofTime.bloodmagic.api.altar.EnumAltarTier; import WayofTime.bloodmagic.api.registry.AlchemyArrayRecipeRegistry; import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry; @@ -50,6 +51,6 @@ public class ModRecipes { public static void addAlchemyArrayRecipes() { AlchemyArrayRecipeRegistry.registerCraftingRecipe(new ItemStack(Items.redstone), new ItemStack(ModItems.slate), new ItemStack(Items.diamond), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/LavaSigil.png")); - AlchemyArrayRecipeRegistry.registerCraftingRecipe(new ItemStack(Items.diamond), new ItemStack(ModItems.slate), new ItemStack(Blocks.diamond_block), new BindingAlchemyCircleRenderer()); + AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.diamond), new ItemStack(ModItems.slate), new CraftingArrayEffectBinding(new ItemStack(Blocks.diamond_block)), new BindingAlchemyCircleRenderer()); } }