def move_robot(self, robo_coord: Coordinate, robot: BuilderState): new_coords = robo_coord.get_coord_in_direction(robot.direction) if new_coords not in self.sim_state.s_blocks: raise RobotActionError( 'Robot is moving onto a space without scaffolding') del self.sim_state.robots[robo_coord] self.sim_state.robots[new_coords] = robot
def pick(self, robo_coord: Coordinate, robot: BuilderState): block_coord = robo_coord.get_coord_in_direction(robot.direction) if block_coord in self.sim_state.s_blocks: del self.sim_state.s_blocks[block_coord] robot.block = HeldBlock.SCAFFOLD elif block_coord in self.sim_state.b_blocks: self.sim_state.b_blocks.remove(block_coord) robot.block = HeldBlock.BUILD else: raise RobotActionError( f'Attempting to pick an empty block at {block_coord}')
def drop(self, robo_coord: Coordinate, robot: BuilderState): block_coord = robo_coord.get_coord_in_direction(robot.direction) if robot.block is HeldBlock.NONE: raise RobotActionError('Cannot drop NONE Block') sim_state = self.sim_state if block_coord in sim_state.b_blocks or block_coord in sim_state.s_blocks: raise RobotActionError('Block already present') if robot.block is HeldBlock.BUILD: self.sim_state.b_blocks.add(block_coord) elif robot.block is HeldBlock.SCAFFOLD: self.sim_state.s_blocks[block_coord] = ScaffoldState() robot.block = HeldBlock.NONE