package Roguelike.DungeonGeneration.RoomGenerators;
import Roguelike.DungeonGeneration.DungeonFileParser;
import Roguelike.DungeonGeneration.Symbol;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.XmlReader;
import java.util.Random;
/**
* Created by Philip on 11-Feb-16.
*/
public class Island extends AbstractRoomGenerator
{
private Array<Fractal.FractalFeature> features = new Array<Fractal.FractalFeature>();
@Override
public void process( Symbol[][] grid, Symbol floor, Symbol wall, Random ran, DungeonFileParser dfp )
{
int width = grid.length;
int height = grid[0].length;
MidpointDisplacement midpointDisplacement = new MidpointDisplacement( ran, width, height );
float[][] map = midpointDisplacement.getMap();
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
float val = map[x][y];
Symbol symbol = null;
for ( Fractal.FractalFeature feature : features )
{
if (feature.minVal <= val && feature.maxVal >= val)
{
symbol = feature.getAsSymbol( );
break;
}
}
if (symbol != null)
{
symbol.resolveExtends( dfp.sharedSymbolMap );
grid[x][y] = symbol;
}
}
}
}
@Override
public void parse( XmlReader.Element xml )
{
for ( int i = 0; i < xml.getChildCount(); i++ )
{
XmlReader.Element featureElement = xml.getChild( i );
Fractal.FractalFeature feature = Fractal.FractalFeature.load( featureElement );
features.add( feature );
}
}
}