package org.scotlandyard.impl.engine.boardmap;
import org.scotlandyard.engine.GameException;
import org.scotlandyard.engine.boardmap.BoardMap;
import org.scotlandyard.engine.boardmap.Coordinate;
import org.scotlandyard.engine.boardmap.Link;
import org.scotlandyard.engine.constants.TransportationMethod;
import org.scotlandyard.impl.engine.GameEngine;
/**
* Factory class for vending standard BoardMap objects and sub-objects.
* Wherever possible, this factory will hand out references to shared BoardMap instances.
*
* @author Hussain Al-Mutawa
* @version 1.0
* @since Sun Sep 18, 2011
*/
public final class BoardMapFactory {
@Override
public String toString(){
return getClass().getName() +" : adsg31267uyydg821367uayge82367KJSDH87236e";
}
private static BoardMap defaultBoardMap;
public static BoardMap createBoardMap(final String name) throws GameException{
if(name==null){
throw new GameException("Board Map name can not be null");
}
BoardMap boardMap = GameEngine.instance().getBoardMaps().get(name);
if(boardMap==null){
boardMap = BoardMapImpl.getNewInstance(name);
}
return boardMap;
}
private static Coordinate createCoordinate(final BoardMap boardMap, final double xCoord,final double yCoord) throws GameException{
return new CoordinateImpl(boardMap, xCoord, yCoord);
}
public static Coordinate createCoordinate(final double latitude,final double longtitude) throws GameException{
return new CoordinateImpl(BoardMapFactory.defaultBoardMap, latitude, longtitude);
}
public static Link createLink(final BoardMap boardMap,
final TransportationMethod transportation,
final double xCoord1,final double yCoord1,final double xCoord2,final double yCoord2) throws GameException{
return new LinkImpl(boardMap, transportation,
BoardMapFactory.createCoordinate(boardMap,xCoord1, yCoord1), BoardMapFactory.createCoordinate(boardMap,xCoord2, yCoord2));
}
public static Link createLink(final TransportationMethod transportation,final Coordinate coordinateA,final Coordinate coordinateB) throws GameException{
//if(BoardMapFactory.defaultBoardMap==null){BoardMapFactory.getBoardMap("Palmerston North");}
return new LinkImpl(BoardMapFactory.defaultBoardMap, transportation, coordinateA, coordinateB);
}
public static Link createLink(
final TransportationMethod transportation,
final double xCoord1,final double yCoord1,final double xCoord2,final double yCoord2) throws GameException{
return BoardMapFactory.createLink(BoardMapFactory.defaultBoardMap, transportation, xCoord1, yCoord1, xCoord2, yCoord2);
}
public static BoardMap getDefaultBoardMap(){
return BoardMapFactory.defaultBoardMap;
}
public static void setDefaultBoardMap(final BoardMap boardMap){
BoardMapFactory.defaultBoardMap=boardMap;
}
private BoardMapFactory(){}
}