def parse_actions(actions_filename): "Output dict mapping actionname to Stuct(use_upperedge, movements)." f = TabFile(actions_filename) f.head() # Action_info_count included "action", "reverse_leftright", "slide_count", "use_upper_edge" # action_info_count = 4 for line in f.parse(): info = list(f.parse_line(line)) # 0 > name # actionname = info[0] # 1-3 > important info # reverse_lr, slide_count, use_ue = map(int, info[1:action_info_count]) if not reverse_lr: transformation = lambda x: (x[0]-10, x[1]+10) elif reverse_lr == 1: transformation = reversed else: transformation = False # 4: > bodyparts and angle ranges # bodypart_angle_dict = {} for bodypart, raw_angles in parallel(f.header[action_info_count:], info[action_info_count:]): if raw_angles: angle_range = map(int, parse_definition(raw_angles)) bodypart_angle_dict[bodypart] = tuple(spread(angle_range, slide_count)) if transformation and bodypart[-2:] == '_r': left_bodypart = bodypart[:-2]+'_l' bodypart_angle_dict[left_bodypart] = tuple(spread(transformation(angle_range), slide_count)) else: continue else: break yield Struct(action=actionname, use_upperedge=use_ue, movements=bodypart_angle_dict)
def init_build(bodyparts_filename): "Output set of Struct(bodypart, origin, layer, joints) from raw resources." # MAKES LEFT SIDE FROM RIGHT SIDE! # # ORIGIN IS (coord1, coord2) # f = FaFile(bodyparts_filename) for bodypart, subkey_values, entry_value in f.yield_all(): str_origin, str_layer = tuple(subkey_values) layer = int(str_layer) joints = {jt_name:map(int, parse_definition(raw_coord)) for jt_name, raw_coord in entry_value} origin = joints[str_origin] yield Struct(bodypart=bodypart, origin=origin, layer=layer, joints=joints) if bodypart[-2:] == '_r': left_bodypart = bodypart[:-2]+'_l' left_joints = {jt_name[:-2]+'_l':coord for jt_name, coord in joints.iteritems()} left_origin = origin yield Struct(bodypart=left_bodypart, origin=left_origin, layer=-layer, joints=left_joints) else: continue