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 )