private boolean tryAddTower(final int x, final int y) {
		if (mapView.getMatrixGraph().get(GameConfig.pixelToTile(x),
				GameConfig.pixelToTile(y)) == MatrixGraph.WALL)
			return false;
		if (buildGUI.getSelected() == null)
			return false;

		final int tileX = GameConfig.pixelToTile(x);
		final int tileY = GameConfig.pixelToTile(y);
		MatrixGraph clone = (MatrixGraph) mapView.getMatrixGraph().clone();
		clone.set(tileX, tileY, MatrixGraph.WALL);
		try {
			int half = GameConfig.TILE_WIDTH / 2;
			int halfSize = half * GameConfig.TILE_SIZE;
			int halfUtil = (halfSize - (5 * GameConfig.TILE_SIZE));

			for (int i = 0; i < 5; i++) {
				int path = halfUtil + (i * GameConfig.TILE_SIZE);
				if (!MovablePiece.canMakePath(0, path,
						GameConfig.MAP_WIDTH - 1, path, clone))
					return false;
			}
		} catch (Exception e) {
			return false;
		}

		final TowerTemplate tower = buildGUI.getSelected();
		final Player currentPlayer = GameConfig.player;

		if (currentPlayer.getGold() < tower.getValue())
			return false;

		getPiecesManager().makeTempPaths(clone);

		logicActions.add(new ActionDispatcher() {
			public void doAction() {
				mapView.getMatrixGraph().set(tileX, tileY, MatrixGraph.WALL);
				try {
					getPiecesManager().changePaths();
					PathManager.getPathManager().clear();
				} catch (Exception e) {
					e.printStackTrace();
				}

				Tower t = tower.createTower(x, y, mapView.getMatrixGraph());
				towerGroup.add(t);
				currentPlayer.spendGold(tower.getValue());
				towers.put(tileX, tileY, t);
				getPiecesManager().add(t);
			}
		});
		return true;
	}