package com.planet_ink.coffee_mud.Libraries.layouts;
import java.util.Enumeration;
import java.util.Vector;
import com.planet_ink.coffee_mud.core.Directions;
import com.planet_ink.coffee_mud.Libraries.interfaces.AreaGenerationLibrary.LayoutNode;
import com.planet_ink.coffee_mud.Libraries.interfaces.AreaGenerationLibrary.LayoutTypes;
public class BoxCitySquareLayout extends BoxCityLayout
{
public String name() { return "BOXCITYSQUARE";}
public void drawABox(LayoutSet lSet, int width, int height)
{
lSet.drawABox(width, height);
int x = 0 + ((width - 0)/2);
int y = -(0 + ((height - 0)/2));
LayoutNode center = lSet.getNode(x,y);
if(center == null)
{
center = new DefaultLayoutNode(x,y);
lSet.use(center,LayoutTypes.square);
}
Vector<long[]> square = new Vector<long[]>();
square.add(new long[]{x-1,y-1});
square.add(new long[]{x,y-1});
square.add(new long[]{x+1,y-1});
square.add(new long[]{x+1,y});
square.add(new long[]{x+1,y+1});
square.add(new long[]{x,y+1});
square.add(new long[]{x-1,y+1});
square.add(new long[]{x-1,y});
square.add(new long[]{x-1,y-1});
LayoutNode n;
LayoutNode lastNode = center;
for(long[] sq : square)
{
n = lSet.getNode(sq);
if(n==null)
{
n = new DefaultLayoutNode(sq);
lSet.use(n,LayoutTypes.square);
}
else
n.reType(LayoutTypes.square);
lastNode.crossLink(n);
lastNode = n;
}
LayoutNode n2;
n = lSet.getNextNode( center, Directions.NORTH);
if(n != null) center.crossLink(n);
n2 = lSet.getNextNode( n, Directions.NORTH);
if((n2 != null)&&(n!=null)) n.crossLink(n2);
n = lSet.getNextNode( center, Directions.SOUTH);
if(n != null) center.crossLink(n);
n2 = lSet.getNextNode( n, Directions.SOUTH);
if((n2 != null)&&(n!=null)) n.crossLink(n2);
n = lSet.getNextNode( center, Directions.EAST);
if(n != null) center.crossLink(n);
n2 = lSet.getNextNode( n, Directions.EAST);
if((n2 != null)&&(n!=null)) n.crossLink(n2);
n = lSet.getNextNode( center, Directions.WEST);
if(n != null) center.crossLink(n);
n2 = lSet.getNextNode( n, Directions.WEST);
if((n2 != null)&&(n!=null)) n.crossLink(n2);
for(long[] sq : square) {
n = lSet.getNode(sq);
for(int d=0;d<4;d++) {
n2 = lSet.getNextNode( n, d);
if(n2!=null) {
if(n.getLink(d)==n2) continue;
if(!n2.isStreetLike()) continue;
Enumeration<LayoutNode> nodes=n2.links().elements();
LayoutNode p_1=(LayoutNode)nodes.nextElement();
LayoutNode p_2=(LayoutNode)nodes.nextElement();
n2.deLink();
p_1.crossLink(p_2);
lSet.unUse(n2);
}
n2 = lSet.makeNextNode(n, d);
n.crossLink(n2);
lSet.use(n2, LayoutTypes.leaf);
}
}
}
}