Exemplo n.º 1
0
class Creation(Event):
    # creation of a homeworld
    def __init__(self,markers,ship,name):
        self.ship = ship
        # The markers tracked by the system can change over time, so save the original
        self.markers = list(markers)
        self.system = System(markers,ship.player,name)
    def enact(self,state):
        if state.alive[state.onmove] is not None:
            raise CreationException('Homeworld creation only takes place on your first turn.')
        torequest = [self.ship.piece]+self.system.markers
        try:
            for i in range(len(torequest)):
                p = torequest[i]
                state.stash.request(p)
        except StashOutException as ex :
            # everything up to i was taken
            # put it back and pass the problem up
            for j in range(i):
                p = torequest[j]
                state.stash.putBack(p)
            raise ex

        self.system.addShip(self.ship)
        self.system = self.system
        state.addSystem(self.system)
        state.alive[state.onmove] = True

    def undo(self,state):
        self.system.removeShip(self.ship)
        state.removeSystem(self.system)

        for p in self.system.markers:
            state.stash.putBack(p)
        state.stash.putBack(self.ship.piece)
        state.alive[self.system.home] = None

    def __str__(self):
        return 'homeworld {} {} {} {}'.format(
            self.markers[0],
            self.markers[1],
            self.ship.piece,
            self.system.name
        )