Last active
August 29, 2015 14:22
-
-
Save marchermans/0dd8de5fbd081b2af9a7 to your computer and use it in GitHub Desktop.
Circles in Minecraft
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.Orion.Armory.Util.Core; | |
import com.Orion.Armory.Common.Registry.GeneralRegistry; | |
import net.minecraft.world.World; | |
/** | |
* Created by Orion | |
* Created on 31.05.2015 | |
* 13:32 | |
* <p/> | |
* Copyrighted according to Project specific license | |
*/ | |
public class CircleHelper | |
{ | |
public static void FillCircle(int pOriginX, int pOriginY, int pOriginZ, World pWorldObj, int pRadius) | |
{ | |
pWorldObj.setBlockToAir(pOriginX, pOriginY, pOriginZ); | |
for (int tStep = 1 ; tStep <= pRadius; tStep ++) | |
{ | |
SetCircleIncNeigborCheck(pOriginX, pOriginY, pOriginZ, pWorldObj, tStep); | |
} | |
} | |
public static void SetCircle(int pOriginX, int pOriginY, int pOriginZ, World pWorldObj, int pRadius) | |
{ | |
int tCurrentX = pRadius; | |
int tCurrentZ = 0; | |
int decisionOver2 = 1 - tCurrentX; // Decision criterion divided by 2 evaluated at x=r, y=0 | |
while(tCurrentX >= tCurrentZ) | |
{ | |
pWorldObj.setBlockToAir(tCurrentX + pOriginX, pOriginY, tCurrentZ + pOriginZ); | |
pWorldObj.setBlockToAir(tCurrentZ + pOriginX, pOriginY, tCurrentX + pOriginZ); | |
pWorldObj.setBlockToAir(-tCurrentX + pOriginX, pOriginY, tCurrentZ + pOriginZ); | |
pWorldObj.setBlockToAir(-tCurrentZ + pOriginX, pOriginY, tCurrentX + pOriginZ); | |
pWorldObj.setBlockToAir(-tCurrentX + pOriginX, pOriginY, -tCurrentZ + pOriginZ); | |
pWorldObj.setBlockToAir(-tCurrentZ + pOriginX, pOriginY, -tCurrentX + pOriginZ); | |
pWorldObj.setBlockToAir(tCurrentX + pOriginX, pOriginY, -tCurrentZ + pOriginZ); | |
pWorldObj.setBlockToAir(tCurrentZ + pOriginX, pOriginY, -tCurrentX + pOriginZ); | |
tCurrentZ++; | |
if (decisionOver2<=0) | |
{ | |
decisionOver2 += 2 * tCurrentZ + 1; // Change in decision criterion for y -> y+1 | |
} | |
else | |
{ | |
tCurrentX--; | |
decisionOver2 += 2 * (tCurrentZ - tCurrentX) + 1; // Change for y -> y+1, x -> x-1 | |
} | |
} | |
} | |
public static void SetCircleIncNeigborCheck(int pOriginX, int pOriginY, int pOriginZ, World pWorldObj, int pRadius) | |
{ | |
int tCurrentX = pRadius; | |
int tCurrentZ = 0; | |
int decisionOver2 = 1 - tCurrentX; // Decision criterion divided by 2 evaluated at x=r, y=0 | |
while(tCurrentX >= tCurrentZ) | |
{ | |
SetBlockIncNeighborCheck(tCurrentX + pOriginX, pOriginY, tCurrentZ + pOriginZ,tCurrentX, 0, tCurrentZ, pWorldObj); | |
SetBlockIncNeighborCheck(tCurrentZ + pOriginX, pOriginY, tCurrentX + pOriginZ,tCurrentZ, 0, tCurrentX, pWorldObj); | |
SetBlockIncNeighborCheck(-tCurrentX + pOriginX, pOriginY, tCurrentZ + pOriginZ,-tCurrentX, 0, tCurrentZ, pWorldObj); | |
SetBlockIncNeighborCheck(-tCurrentZ + pOriginX, pOriginY, tCurrentX + pOriginZ,-tCurrentZ, 0, tCurrentX, pWorldObj); | |
SetBlockIncNeighborCheck(-tCurrentX + pOriginX, pOriginY, -tCurrentZ + pOriginZ,-tCurrentX, 0, -tCurrentZ, pWorldObj); | |
SetBlockIncNeighborCheck(-tCurrentZ + pOriginX, pOriginY, -tCurrentX + pOriginZ,-tCurrentZ, 0, -tCurrentX, pWorldObj); | |
SetBlockIncNeighborCheck(tCurrentX + pOriginX, pOriginY, -tCurrentZ + pOriginZ,tCurrentX, 0, -tCurrentZ, pWorldObj); | |
SetBlockIncNeighborCheck(tCurrentZ + pOriginX, pOriginY, -tCurrentX + pOriginZ,tCurrentZ, 0, -tCurrentX, pWorldObj); | |
tCurrentZ++; | |
if (decisionOver2<=0) | |
{ | |
decisionOver2 += 2 * tCurrentZ + 1; // Change in decision criterion for y -> y+1 | |
} | |
else | |
{ | |
tCurrentX--; | |
decisionOver2 += 2 * (tCurrentZ - tCurrentX) + 1; // Change for y -> y+1, x -> x-1 | |
} | |
} | |
} | |
private static void SetBlockIncNeighborCheck(int pOriginX, int pOriginY, int pOriginZ, int pRelativeX, int pRelativeY, int pRelativeZ, World pWorldObj) | |
{ | |
pWorldObj.setBlockToAir(pOriginX, pOriginY, pOriginZ); | |
int tRelativeX = 0; | |
int tRelativeZ = 0; | |
if (pRelativeX > 0) | |
{ | |
tRelativeX = -1; | |
} | |
if (pRelativeX < 0) | |
{ | |
tRelativeX = 1; | |
} | |
if (pRelativeZ > 0) | |
{ | |
tRelativeZ = -1; | |
} | |
if (pRelativeZ < 0) | |
{ | |
tRelativeZ = 1; | |
} | |
GeneralRegistry.iLogger.info(pRelativeX + "-" + pRelativeY + "-" + pRelativeZ + "/" + tRelativeX + "-" + tRelativeZ); | |
pWorldObj.setBlockToAir(pOriginX + tRelativeX, pOriginY, pOriginZ + tRelativeZ); | |
pWorldObj.setBlockToAir(pOriginX + tRelativeX, pOriginY, pOriginZ); | |
pWorldObj.setBlockToAir(pOriginX, pOriginY, pOriginZ + tRelativeZ); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.Orion.Armory.Util.Core; | |
/** | |
* Created by Orion | |
* Created on 31.05.2015 | |
* 13:41 | |
* <p/> | |
* Copyrighted according to Project specific license | |
*/ | |
public class MathHelper | |
{ | |
public static int CalcModuloIncSign(int pInput, int pModulo) | |
{ | |
int tResult = pInput % pModulo; | |
if (pInput < 0) | |
{ | |
tResult *= -1; | |
} | |
return tResult; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment