Skip to content

Instantly share code, notes, and snippets.

@marchermans
Last active August 29, 2015 14:22
Show Gist options
  • Save marchermans/0dd8de5fbd081b2af9a7 to your computer and use it in GitHub Desktop.
Save marchermans/0dd8de5fbd081b2af9a7 to your computer and use it in GitHub Desktop.
Circles in Minecraft
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);
}
}
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