package squidpony.examples; import squidpony.squidgrid.mapping.DungeonUtility; import squidpony.squidgrid.mapping.MixedGenerator; import squidpony.squidgrid.mapping.SectionDungeonGenerator; import squidpony.squidgrid.mapping.locks.Edge; import squidpony.squidgrid.mapping.locks.IRoomLayout; import squidpony.squidgrid.mapping.locks.Room; import squidpony.squidgrid.mapping.locks.Symbol; import squidpony.squidgrid.mapping.locks.constraints.CountConstraints; import squidpony.squidgrid.mapping.locks.constraints.ILayoutConstraints; import squidpony.squidgrid.mapping.locks.generators.LayoutGenerator; import squidpony.squidgrid.mapping.locks.util.GenerationFailureException; import squidpony.squidmath.Coord; import squidpony.squidmath.ShortSet; import squidpony.squidmath.StatefulRNG; /** * Created by Tommy Ettinger on 1/4/2017. */ public class LockTest { public static final int width = 140, height = 80; public static void main(String[] args) { StatefulRNG rng = new StatefulRNG(0x1337BEEFBABBL); ILayoutConstraints constraints = new CountConstraints(50, 5, 0); LayoutGenerator gen = new LayoutGenerator(rng, constraints); MixedGenerator mix; SectionDungeonGenerator sdg = new SectionDungeonGenerator(width, height, rng); sdg.addDoors(90, false); char[][] dungeon; try{ gen.generate(); IRoomLayout layout = gen.getRoomLayout(); mix = new MixedGenerator(width, height, rng, layout, 0.75f); mix.putBoxRoomCarvers(3); mix.putRoundRoomCarvers(1); dungeon = mix.generate(); Coord cen; ShortSet links = new ShortSet(layout.roomCount() + 16, 0.4f); int id, id2; short pair; for(Room room : layout.getRooms()) { if(!Symbol.isNothing(room.getItem())) { cen = room.getCenter(); dungeon[cen.x][cen.y] = Symbol.asChar(room.getItem()); } id = room.id; for(Edge edge : room.getEdges()) { if(edge.hasSymbol()) { id2 = edge.getTargetRoomId(); if(id < id2) pair = (short) ((id2 & 0xff)<<8|(id & 0xff)); else pair = (short) ((id & 0xff)<<8|(id2 & 0xff)); if(!links.contains(pair)) { links.add(pair); cen = layout.get(id2).getCenter().average(room.getCenter()); dungeon[cen.x][cen.y] = Symbol.asChar(edge.getSymbol()); } } } } } catch (GenerationFailureException e) { mix = new MixedGenerator(width, height, rng); mix.putBoxRoomCarvers(3); mix.putRoundRoomCarvers(1); dungeon = mix.generate(); } DungeonUtility.debugPrint(DungeonUtility.hashesToLines(sdg.generate(dungeon, mix.getEnvironment()))); } }