Mazes #155

Merged
StevenRS11 merged 11 commits from mazes into mazes 2014-04-15 11:46:00 +00:00
6 changed files with 153 additions and 4 deletions
Showing only changes of commit bce329c8fb - Show all commits

View File

@@ -8,12 +8,16 @@ import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.storage.ExtendedBlockStorage;
import StevenDimDoors.experimental.decorators.BaseDecorator;
import StevenDimDoors.experimental.decorators.DecoratorFinder;
import StevenDimDoors.mod_pocketDim.Point3D;
import StevenDimDoors.mod_pocketDim.config.DDProperties;
public class MazeBuilder
{
private static final int POCKET_WALL_GAP = 4;
private static final int DECORATION_CHANCE = 1;
private static final int MAX_DECORATION_CHANCE = 4;
private MazeBuilder() { }
@@ -28,7 +32,7 @@ public class MazeBuilder
buildRooms(design.getLayout(), world, offset);
carveDoorways(design.getLayout(), world, offset, decay, random);
applyRandomDestruction(design, world, offset, decay, random);
decorateRooms(design.getLayout(), world, offset);
decorateRooms(design.getLayout(), world, offset, random, properties);
buildPocketWalls(design, world, offset, properties);
}
@@ -117,9 +121,11 @@ public class MazeBuilder
}
}
private static void decorateRooms(DirectedGraph<RoomData, DoorwayData> layout, World world, Point3D offset)
private static void decorateRooms(DirectedGraph<RoomData, DoorwayData> layout,
World world, Point3D offset, Random random, DDProperties properties)
{
RoomData room;
BaseDecorator decorator;
PartitionNode<RoomData> partition;
ArrayList<LinkPlan> links = new ArrayList<LinkPlan>();
@@ -129,8 +135,16 @@ public class MazeBuilder
room = node.data();
partition = room.getPartitionNode();
links.addAll(room.getOutboundLinks());
// TODO: Add decorator code here!
// Protected rooms must be decorated because they have links.
// Otherwise, choose randomly whether to decorate.
if (room.isProtected() && random.nextInt(MAX_DECORATION_CHANCE) < DECORATION_CHANCE)
{
decorator = DecoratorFinder.find(room, random);
if (decorator != null)
{
decorator.decorate(room, random, properties);
}
}
}
// Iterate over all links plans and place links in the world
for (LinkPlan link : links)

View File

@@ -0,0 +1,15 @@
package StevenDimDoors.experimental.decorators;
import java.util.Random;
import StevenDimDoors.experimental.RoomData;
import StevenDimDoors.mod_pocketDim.config.DDProperties;
public abstract class BaseDecorator
{
public BaseDecorator() { }
public abstract boolean canDecorate(RoomData room);
public abstract boolean decorate(RoomData room, Random random, DDProperties properties);
}

View File

@@ -0,0 +1,51 @@
package StevenDimDoors.experimental.decorators;
import java.util.ArrayList;
import java.util.Random;
import StevenDimDoors.experimental.RoomData;
public class DecoratorFinder
{
private static ArrayList<BaseDecorator> decorators = null;
private DecoratorFinder() { }
public static BaseDecorator find(RoomData room, Random random)
{
if (decorators == null)
{
load();
}
// Since there are only a few decorators right now, we just iterate
// over the list and check them all. If we add a lot, we'll need to
// switch to a more efficient approach.
ArrayList<BaseDecorator> matches = new ArrayList<BaseDecorator>();
for (BaseDecorator decorator : decorators)
{
if (decorator.canDecorate(room))
{
matches.add(decorator);
}
}
if (matches.isEmpty())
{
return null;
}
else
{
return matches.get( random.nextInt(matches.size()) );
}
}
private static void load()
{
// List all the decorators we have
decorators = new ArrayList<BaseDecorator>();
decorators.add(new LinkDestinationDecorator());
decorators.add(new DefaultDoorDecorator());
decorators.add(new TorchDecorator());
}
}

View File

@@ -0,0 +1,23 @@
package StevenDimDoors.experimental.decorators;
import java.util.Random;
import StevenDimDoors.experimental.RoomData;
import StevenDimDoors.mod_pocketDim.config.DDProperties;
public class DefaultDoorDecorator extends BaseDecorator {
@Override
public boolean canDecorate(RoomData room) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean decorate(RoomData room, Random random,
DDProperties properties) {
// TODO Auto-generated method stub
return false;
}
}

View File

@@ -0,0 +1,23 @@
package StevenDimDoors.experimental.decorators;
import java.util.Random;
import StevenDimDoors.experimental.RoomData;
import StevenDimDoors.mod_pocketDim.config.DDProperties;
public class LinkDestinationDecorator extends BaseDecorator
{
@Override
public boolean canDecorate(RoomData room) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean decorate(RoomData room, Random random,
DDProperties properties) {
// TODO Auto-generated method stub
return false;
}
}

View File

@@ -0,0 +1,23 @@
package StevenDimDoors.experimental.decorators;
import java.util.Random;
import StevenDimDoors.experimental.RoomData;
import StevenDimDoors.mod_pocketDim.config.DDProperties;
public class TorchDecorator extends BaseDecorator {
@Override
public boolean canDecorate(RoomData room) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean decorate(RoomData room, Random random,
DDProperties properties) {
// TODO Auto-generated method stub
return false;
}
}