package com.planet_ink.coffee_mud.Libraries.layouts; import java.util.*; import com.planet_ink.coffee_mud.core.CMStrings; import com.planet_ink.coffee_mud.Libraries.interfaces.*; import com.planet_ink.coffee_mud.Libraries.interfaces.AreaGenerationLibrary.*; import com.planet_ink.coffee_mud.core.Directions; /** * Abstract area layout pattern * node tags: * nodetype: surround, leaf, offleaf, street, square, interior * nodeexits: n,s,e,w, n,s, e,w, n,e,w, etc * nodeflags: corner, gate, intersection, tee * NODEGATEEXIT: (for gate, offleaf, square): n s e w etc * noderun: (for surround, street): n,s e,w * * @author Bo Zimmerman */ public abstract class AbstractLayout implements LayoutManager { Random r = new Random(); public int diff(int width, int height, int num) { int x = width * height; return (x<num) ? (num - x) : (x - num); } public abstract String name(); public abstract Vector<LayoutNode> generate(int num, int dir); public static int getDirection(LayoutNode from, LayoutNode to) { if(to.coord()[1]<from.coord()[1]) return Directions.NORTH; if(to.coord()[1]>from.coord()[1]) return Directions.SOUTH; if(to.coord()[0]<from.coord()[0]) return Directions.WEST; if(to.coord()[0]>from.coord()[0]) return Directions.EAST; return -1; } public static LayoutRuns getRunDirection(int dirCode) { switch(dirCode) { case Directions.NORTH: case Directions.SOUTH: return LayoutRuns.ns; case Directions.EAST: case Directions.WEST: return LayoutRuns.ew; } return LayoutRuns.ns; } }