Пример #1
0
 def __init__(self, eventId, session, tilePositionModel):
     super(PieceController, self).__init__(eventId, session)
     self.pieceViews = []
     self.selectionController = SelectionController()
     self.moveSelectionsModel = None
     self.pathSelectionModel = None
     self.piecesModel = BoardPiecesModel()
     self.tilePositionModel = tilePositionModel
Пример #2
0
class PieceController(TileEventProcessor):
    """ Manages the display of pieces on the board for the ScreenController """

    def __init__(self, eventId, session, tilePositionModel):
        super(PieceController, self).__init__(eventId, session)
        self.pieceViews = []
        self.selectionController = SelectionController()
        self.moveSelectionsModel = None
        self.pathSelectionModel = None
        self.piecesModel = BoardPiecesModel()
        self.tilePositionModel = tilePositionModel

    def remove(self, id):
        data = self.piecesModel.removePieceWithId(id)
        self.pieceViews.remove(data.view)
        if self.moveSelectionsModel is not None and data.location == self.moveSelectionsModel.getPrimarySelection():
            self.clearSelectEvent()
        return data.team

    def add(self, id, tilePosition, team):
        if not self.piecesModel.containsId(id):
            dm = PieceDataModel(tilePosition, team)
            self.piecesModel.addPieceWithId(id, dm)
            self.pieceViews.append(dm.view)

    def draw(self, drawSurface):
        for pieceView in self.pieceViews:
            pieceView.draw(drawSurface)
        self.selectionController.draw(drawSurface)

    def selectEvent(self, tilePosition):
        self.clearSelectEvent()
        if self.piecesModel.isPieceAt(tilePosition):
            logging.debug("Select event for %s", tilePosition)
            pieceData = self.piecesModel.getDataForPiecesAt(tilePosition)[0]
            self.moveSelectionsModel = self.selectionController.setSelectedTile(
                tilePosition, colour=ConfigReader.getColourForId("SelectedTile")
            )
            self.selectionController.setInfoTiles(
                self.tilePositionModel.positionsOnBoardIn(HexCoordSys.getTilesWithin(pieceData.moves, tilePosition)),
                self.moveSelectionsModel,
                ConfigReader.getColourForId("Info1Tile"),
                type(OverlayView((), ())),
            )
            self.pathSelectionModel = self.selectionController.setSelectedTile(tilePosition)

    def clearSelectEvent(self):
        logging.debug("Clear select event")
        self.selectionController.clearAllSelection(self.moveSelectionsModel)
        self.moveSelectionsModel = None
        self.selectionController.clearAllSelection(self.pathSelectionModel)
        self.pathSelectionModel = None

    def trialMoveSelectedEvent(self, tilePosition):
        # If a tile has been selected for the start of the path, and the specified path tile is on the board
        if (
            self.pathSelectionModel is not None
            and self.tilePositionModel.contains(tilePosition)
            and not self.pathSelectionModel.doesExtendedSelectionContain(tilePosition)
        ):
            logging.debug("Trial move to %s", tilePosition)
            pieceData = self.piecesModel.getDataForPiecesAt(self.pathSelectionModel.getPrimarySelection())[0]
            self.selectionController.setInfoTiles(
                self.tilePositionModel.positionsOnBoardIn(
                    HexCoordSys.getShortestTilePathBetween(self.pathSelectionModel.getPrimarySelection(), tilePosition)
                ),
                self.pathSelectionModel,
                pieceData.movingColour,
                type(PieceView((), ())),
            )

    def moveSelectedEvent(self, tilePosition):
        if self.moveSelectionsModel is not None and self.tilePositionModel.containsTile(tilePosition):
            logging.debug("Move event to %s", tilePosition)
            team = None
            id = None
            for id in self.piecesModel.getIdForPiecesAt(self.moveSelectionsModel.getPrimarySelection()):
                team = self.remove(id)
                id = id
            self.add(id, tilePosition, team)
            self.createMoveEvent(id, tilePosition)