package Roguelike.DungeonGeneration.RoomGenerators; import java.util.HashMap; import java.util.Random; import Roguelike.DungeonGeneration.DungeonFileParser; import Roguelike.DungeonGeneration.Symbol; import com.badlogic.gdx.utils.XmlReader.Element; import com.badlogic.gdx.utils.reflect.ClassReflection; import com.badlogic.gdx.utils.reflect.ReflectionException; public abstract class AbstractRoomGenerator { // ---------------------------------------------------------------------- public boolean ensuresConnectivity = false; // ---------------------------------------------------------------------- public abstract void process( Symbol[][] grid, Symbol floor, Symbol wall, Random ran, DungeonFileParser dfp ); // ---------------------------------------------------------------------- public abstract void parse( Element xml ); // ---------------------------------------------------------------------- public static AbstractRoomGenerator load( Element xml ) { Class<AbstractRoomGenerator> c = ClassMap.get( xml.getName().toUpperCase() ); AbstractRoomGenerator type = null; try { type = ClassReflection.newInstance( c ); } catch ( Exception e ) { System.err.println(xml.getName()); e.printStackTrace(); } type.parse( xml ); return type; } // ---------------------------------------------------------------------- protected static HashMap<String, Class> ClassMap = new HashMap<String, Class>(); // ---------------------------------------------------------------------- static { ClassMap.put( "BASIC", Basic.class ); ClassMap.put( "CELLULARAUTOMATA", CellularAutomata.class ); ClassMap.put( "CHAMBERS", Chambers.class ); ClassMap.put( "FRACTAL", Fractal.class ); ClassMap.put( "OVERLAPPINGRECTS", OverlappingRects.class ); ClassMap.put( "POLYGON", Polygon.class ); ClassMap.put( "BURROW", Burrow.class ); ClassMap.put( "STARBURST", Starburst.class ); ClassMap.put( "RANDOM", RandomPlace.class ); ClassMap.put( "ISLAND", Island.class ); } }