package ge.edu.freeuni.sdp.snake.model; /** * Hides inner structure of model from presenter and provides simplified * interface to it. * * @author George Mamaladze * */ public class CommonGameFacade implements GameFacade { private Universe _universe; private Snake _snake; private Populator _populator; private Configuration _configInstance; public CommonGameFacade(Universe universe, Snake snake, Populator populator, Configuration configInstance) { init(universe, snake, populator, configInstance); } public CommonGameFacade() { Configuration config = Configuration.getInstance(); Level level = Configuration.getInstance().getSelectedLevel(); Topology topology = level.getTopology(); Point snakeHead = new Point(config.getSize().getWidth() / 2, config .getSize().getHeight() / 2); init(new Universe(topology), level.getSnake(snakeHead), level.getFoodGenerator(), config); } private void init(Universe universe, Snake snake, Populator populator, Configuration configInstance) { _universe = universe; _populator = populator; _snake = snake; _universe.addBeing(snake); _configInstance = configInstance; } /* * (non-Javadoc) * * @see ge.edu.freeuni.sdp.snake.model.GameFacade#getLives() */ @Override public int getLives() { return _snake.getLives(); } /* * (non-Javadoc) * * @see * ge.edu.freeuni.sdp.snake.model.GameFacade#getBeingKindAt(ge.edu.freeuni * .sdp.snake.model.Point) */ @Override public BeingKind getBeingKindAt(Point point) { Being being = _universe.getBeingAt(point); if (being == null) return BeingKind.None; return being.getKind(); } /* * (non-Javadoc) * * @see * ge.edu.freeuni.sdp.snake.model.GameFacade#makeMove(ge.edu.freeuni.sdp * .snake.model.Direction) */ @Override public void makeMove(Direction direction) { _snake.setDirection(direction); _universe.move(); _universe.interact(); _universe.removeZombies(); _populator.populate(_universe); } /* * (non-Javadoc) * * @see ge.edu.freeuni.sdp.snake.model.GameFacade#isGameOver() */ @Override public boolean isGameOver() { return !_snake.isAlive(); } /* * (non-Javadoc) * * @see ge.edu.freeuni.sdp.snake.model.GameFacade#getSize() */ @Override public Size getSize() { return _configInstance.getSize(); } /* * (non-Javadoc) * * @see ge.edu.freeuni.sdp.snake.model.GameFacade#getScore() */ @Override public int getScore() { return _snake.getLength(); } protected Point getSnakeHead() { return _snake.getHead(); } @Override public void saveState() { Caretaker caretaker = new Caretaker(); caretaker.addMemento(_snake.saveToMemento()); } @Override public void restoreState() { Caretaker caretaker = new Caretaker(); _snake.restoreFromMemento(caretaker.getMemento()); } }