def handle_move(self, angle, distance): # check state if self.state is not PlayerState.ACTING: raise LoBotomyException(202) # check action validity if game.move_cost(distance) > config.player.max_energy: raise LoBotomyException(101) self.move_action = (angle, distance)
def execute_moves(self, players): result_signals = [] for player in players: # unpack required information angle, distance = player.move_action # calculate new values x, y = util.move_wrapped(player.location, angle, distance, (self.width, self.height)) # log action and subtract energy cost cost = game.move_cost(distance) # TODO: truncate location tuples to x decimals logging.info('player {} moved from {} to {} (cost: {})'.format( player.name, player.location, (x, y), cost )) prev_energy = player.energy player.energy -= cost self.emit_event( type = 'player_move', player = player.name, angle = angle, distance = distance, location = (player.location, (x, y)), cost = cost, energy = (prev_energy, player.energy) ) if player.energy <= 0.0: # signal player is dead result_signals.append(self.player_death(player)) self.emit_event( type = 'player_suicide', player = player.name, action = 'move', cost = cost, energy = (prev_energy, player.energy) ) logging.info('player {} died from exhaustion (move)'.format(player.name)) else: # move player on the battlefield player.location = (x, y) return result_signals
def execute_moves(self, players): result_signals = [] for player in players: # unpack required information angle, distance = player.move_action # calculate new values x, y = util.move_wrapped(player.location, angle, distance, (self.width, self.height)) # log action and subtract energy cost cost = game.move_cost(distance) # TODO: truncate location tuples to x decimals logging.info('player {} moved from {} to {} (cost: {})'.format( player.name, player.location, (x, y), cost)) prev_energy = player.energy player.energy -= cost self.emit_event(type='player_move', player=player.name, angle=angle, distance=distance, location=(player.location, (x, y)), cost=cost, energy=(prev_energy, player.energy)) if player.energy <= 0.0: # signal player is dead result_signals.append(self.player_death(player)) self.emit_event(type='player_suicide', player=player.name, action='move', cost=cost, energy=(prev_energy, player.energy)) logging.info('player {} died from exhaustion (move)'.format( player.name)) else: # move player on the battlefield player.location = (x, y) return result_signals