Mazes #155

Merged
StevenRS11 merged 11 commits from mazes into mazes 2014-04-15 11:46:00 +00:00
5 changed files with 102 additions and 34 deletions
Showing only changes of commit 77abcbb148 - Show all commits

View File

@@ -17,7 +17,7 @@ public class MazeBuilder
{ {
private static final int POCKET_WALL_GAP = 4; private static final int POCKET_WALL_GAP = 4;
private static final int DECORATION_CHANCE = 1; private static final int DECORATION_CHANCE = 1;
private static final int MAX_DECORATION_CHANCE = 4; private static final int MAX_DECORATION_CHANCE = 3;
private MazeBuilder() { } private MazeBuilder() { }
@@ -142,11 +142,11 @@ public class MazeBuilder
decorator = DecoratorFinder.find(room, random); decorator = DecoratorFinder.find(room, random);
if (decorator != null) if (decorator != null)
{ {
decorator.decorate(room, random, properties); decorator.decorate(room, world, offset, random, properties);
} }
} }
} }
// Iterate over all links plans and place links in the world // Iterate over all link plans and place links in the world
for (LinkPlan link : links) for (LinkPlan link : links)
{ {
// TODO: Add link placement code here! // TODO: Add link placement code here!
@@ -323,15 +323,15 @@ public class MazeBuilder
} }
for (x = minX; x <= maxX; x++) for (x = minX; x <= maxX; x++)
{ {
for (y = minY; y <= maxY; y++) for (y = minY + 1; y < maxY; y++)
{ {
setBlockDirectly(world, x, y, minZ, blockID, metadata); setBlockDirectly(world, x, y, minZ, blockID, metadata);
setBlockDirectly(world, x, y, maxZ, blockID, metadata); setBlockDirectly(world, x, y, maxZ, blockID, metadata);
} }
} }
for (z = minZ; z <= maxZ; z++) for (z = minZ + 1; z < maxZ; z++)
{ {
for (y = minY; y <= maxY; y++) for (y = minY + 1; y < maxY; y++)
{ {
setBlockDirectly(world, minX, y, z, blockID, metadata); setBlockDirectly(world, minX, y, z, blockID, metadata);
setBlockDirectly(world, maxX, y, z, blockID, metadata); setBlockDirectly(world, maxX, y, z, blockID, metadata);

View File

@@ -2,7 +2,9 @@ package StevenDimDoors.experimental.decorators;
import java.util.Random; import java.util.Random;
import net.minecraft.world.World;
import StevenDimDoors.experimental.RoomData; import StevenDimDoors.experimental.RoomData;
import StevenDimDoors.mod_pocketDim.Point3D;
import StevenDimDoors.mod_pocketDim.config.DDProperties; import StevenDimDoors.mod_pocketDim.config.DDProperties;
public abstract class BaseDecorator public abstract class BaseDecorator
@@ -11,5 +13,5 @@ public abstract class BaseDecorator
public abstract boolean canDecorate(RoomData room); public abstract boolean canDecorate(RoomData room);
public abstract boolean decorate(RoomData room, Random random, DDProperties properties); public abstract void decorate(RoomData room, World world, Point3D offset, Random random, DDProperties properties);
} }

View File

@@ -2,22 +2,24 @@ package StevenDimDoors.experimental.decorators;
import java.util.Random; import java.util.Random;
import net.minecraft.world.World;
import StevenDimDoors.experimental.RoomData; import StevenDimDoors.experimental.RoomData;
import StevenDimDoors.mod_pocketDim.Point3D;
import StevenDimDoors.mod_pocketDim.config.DDProperties; import StevenDimDoors.mod_pocketDim.config.DDProperties;
public class DefaultDoorDecorator extends BaseDecorator { public class DefaultDoorDecorator extends BaseDecorator
{
@Override @Override
public boolean canDecorate(RoomData room) { public boolean canDecorate(RoomData room)
// TODO Auto-generated method stub {
return false; return !room.getOutboundLinks().isEmpty();
} }
@Override @Override
public boolean decorate(RoomData room, Random random, public void decorate(RoomData room, World world, Point3D offset, Random random, DDProperties properties)
DDProperties properties) { {
// TODO Auto-generated method stub
return false;
} }
} }

View File

@@ -2,22 +2,23 @@ package StevenDimDoors.experimental.decorators;
import java.util.Random; import java.util.Random;
import StevenDimDoors.experimental.RoomData; import net.minecraft.world.World;
import StevenDimDoors.mod_pocketDim.config.DDProperties;
import StevenDimDoors.experimental.RoomData;
import StevenDimDoors.mod_pocketDim.Point3D;
import StevenDimDoors.mod_pocketDim.config.DDProperties;
public class LinkDestinationDecorator extends BaseDecorator public class LinkDestinationDecorator extends BaseDecorator
{ {
@Override @Override
public boolean canDecorate(RoomData room) { public boolean canDecorate(RoomData room)
// TODO Auto-generated method stub {
return false; return room.getOutboundLinks().isEmpty() && !room.getInboundLinks().isEmpty();
} }
@Override @Override
public boolean decorate(RoomData room, Random random, public void decorate(RoomData room, World world, Point3D offset, Random random, DDProperties properties)
DDProperties properties) { {
// TODO Auto-generated method stub
return false;
} }
} }

View File

@@ -2,22 +2,85 @@ package StevenDimDoors.experimental.decorators;
import java.util.Random; import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import StevenDimDoors.experimental.PartitionNode;
import StevenDimDoors.experimental.RoomData; import StevenDimDoors.experimental.RoomData;
import StevenDimDoors.mod_pocketDim.Point3D;
import StevenDimDoors.mod_pocketDim.config.DDProperties; import StevenDimDoors.mod_pocketDim.config.DDProperties;
public class TorchDecorator extends BaseDecorator { public class TorchDecorator extends BaseDecorator
{
@Override @Override
public boolean canDecorate(RoomData room) { public boolean canDecorate(RoomData room)
// TODO Auto-generated method stub {
return false; return !room.isProtected();
} }
@Override @Override
public boolean decorate(RoomData room, Random random, public void decorate(RoomData room, World world, Point3D offset, Random random, DDProperties properties)
DDProperties properties) { {
// TODO Auto-generated method stub // SenseiKiwi: Place a single random torch along the walls.
return false; // We could do more complex arrangements but I feel that a single
// torches here and there will be a little unsettling.
// The walls might be broken by passages or decay, so this will
// require trial and error.
final int MAX_ATTEMPTS = 5;
int x;
int z;
int attempts = 0;
PartitionNode<RoomData> partition = room.getPartitionNode();
int minX = partition.minCorner().getX() + offset.getX();
int minZ = partition.minCorner().getZ() + offset.getZ();
int maxX = partition.maxCorner().getX() + offset.getX();
int maxZ = partition.maxCorner().getZ() + offset.getZ();
int torchLevel = partition.minCorner().getY() + offset.getY() + 2;
for (; attempts < MAX_ATTEMPTS; attempts++)
{
// Choose a random side of the room to place the torch. The sides are numbered arbitrarily here.
// Then choose a random position along the wall and check if there is a block there to place the
// torch against. We assume that all blocks are bricks and thus valid.
switch (random.nextInt(4))
{
case 0: // Positive X side
z = MathHelper.getRandomIntegerInRange(random, minZ + 1, maxZ - 1);
if (!world.isAirBlock(maxX, torchLevel, z))
{
world.setBlock(maxX - 1, torchLevel, z, Block.torchWood.blockID, 2, 0);
return;
}
break;
case 1: // Negative X side
z = MathHelper.getRandomIntegerInRange(random, minZ + 1, maxZ - 1);
if (!world.isAirBlock(minX, torchLevel, z))
{
world.setBlock(minX + 1, torchLevel, z, Block.torchWood.blockID, 1, 0);
return;
}
break;
case 2: // Positive Z side
x = MathHelper.getRandomIntegerInRange(random, minX + 1, maxX - 1);
if (!world.isAirBlock(x, torchLevel, maxZ))
{
world.setBlock(x, torchLevel, maxZ - 1, Block.torchWood.blockID, 4, 0);
return;
}
break;
case 3: // Negative Z side
x = MathHelper.getRandomIntegerInRange(random, minX + 1, maxX - 1);
if (!world.isAirBlock(x, torchLevel, minZ))
{
world.setBlock(x, torchLevel, minZ + 1, Block.torchWood.blockID, 3, 0);
return;
}
break;
}
}
} }
} }