def interpolate(frame, total_time, frame_len): start_fid = frames_model.get_frame_from_pos(frame)['id'] end_fid = frames_model.get_frame_from_pos(frame + 1)['id'] start_pieces = pieces_model.pieces[start_fid] end_pieces = pieces_model.pieces[end_fid] fc = int(total_time / frame_len + 0.999) frame_len = int(total_time / fc + 0.5) for fi in range(0, fc - 1): pieces = [] for i in range(0, len(start_pieces)): d = (fi + 1) / fc piece = dict(start_pieces[i]) goal = end_pieces[i] for k in filter(lambda v: v not in ['id', 'img'], piece.keys()): piece[k] += (goal[k] - piece[k]) * d pieces.append(piece) frame = frames_model.get_new_frame() frame['length'] = frame_len frames_model.frames.insert(frames_model.get_frame_position(end_fid), frame) pieces_model.pieces[frame['id']] = pieces frames_controller.update_view() pieces_controller.update_view()
def update_view(): i = model.get_frame_position(model.active_frame()) if i is None: i = 0 model._active_frame = model.frames[0]['id'] length = model.get_frame_from_pos(i)['length'] view_options.set_frame_count(len(model.frames)) view_options.set_active(i) view_options.set_length(length) loop_view.set_is_loop(model.is_loop)
def move_frame_down(): i = model.get_frame_position(model.active_frame()) ni = i + 1 if ni < len(model.frames): actions_controller.move_frame_action( model.get_frame_from_pos(i)['id'], 1) temp = model.frames[ni] model.frames[ni] = model.frames[i] model.frames[i] = temp update_view()
def move_frame_up(): i = model.get_frame_position(model.active_frame()) ni = i - 1 if ni >= 0: actions_controller.move_frame_action( model.get_frame_from_pos(i)['id'], -1) temp = model.frames[ni] model.frames[ni] = model.frames[i] model.frames[i] = temp update_view()
def clone_frame(): i = model.get_frame_position(model.active_frame()) frame = dict(model.get_frame(model.active_frame())) frame['id'] = model.next_id model.next_id += 1 model.frames.insert(i + 1, frame) if model.active_frame() in pieces_model.pieces.keys(): pieces_model.pieces[frame['id']] = [ dict(p) for p in pieces_model.pieces[model.active_frame()] ] update_view() actions_controller.add_frame_action(frame, i + 1, pieces_model.pieces[frame['id']])
def update_frame(): new_len = view_options.get_length_str() try: new_len = int(new_len) except: util.error('Frame length must be an integer') return if new_len <= 0: util.error('Frame length <= 0 ?!') return i = model.get_frame_position(model.active_frame()) actions_controller.update_frame_action(model.active_frame(), model.frames[i]['length'], new_len) model.frames[i]['length'] = new_len
def delete_frame(): if len(model.frames) > 1: i = model.get_frame_position(model.active_frame()) frame = model.get_frame(model.active_frame()) actions_controller.delete_frame_action( frame, i, pieces_model.pieces[frame['id']]) ni = i + 1 if ni >= len(model.frames): ni = len(model.frames) - 2 # Deleting last, next is second last model._active_frame = model.get_frame_from_pos(ni)['id'] pieces_controller.change_active_frame(frame['id'], model.active_frame()) model.frames.remove(frame) if frame['id'] in pieces_model.pieces.keys(): del pieces_model.pieces[frame['id']] update_view() else: util.error('You need to have at least one frame, jackass')
def undo(): if model.current_action is not None and model.current_action in range( 1, len(model.actions)): action = model.actions[model.current_action] data = action['data'] if action['type'] == 'add_piece': pieces_model.remove_piece(data['frame_id'], data['piece']['id']) pieces_controller.update_view() elif action['type'] == 'update_piece': pieces_model.update_piece(data['frame_id'], data['old']) pieces_controller.update_view() elif action['type'] == 'delete_piece': pieces_model.pieces[data['frame_id']].append(data['piece']) pieces_controller.update_view() elif action['type'] == 'move_piece': i = 0 for p in pieces_model.pieces[data['frame_id']]: if p['id'] == data['piece_id']: break i += 1 ni = i - data['index_change'] temp = pieces_model.pieces[data['frame_id']][i] pieces_model.pieces[data['frame_id']][i] = pieces_model.pieces[ data['frame_id']][ni] pieces_model.pieces[data['frame_id']][ni] = temp pieces_controller.update_view() elif action['type'] == 'add_image': images_model.remove_image(data['id']) images_controller.update_view() elif action['type'] == 'delete_image': view_util.error('This cannot be undone') elif action['type'] == 'add_frame': if data['frame']['id'] in pieces_model.pieces.keys(): del pieces_model.pieces[data['frame']['id']] del frames_model.frames[data['index']] frames_controller.update_view() pieces_controller.update_view() elif action['type'] == 'update_frame': i = frames_model.get_frame_position(data['frame_id']) frames_model.frames[i]['length'] = data['old_len'] frames_controller.update_view() elif action['type'] == 'move_frame': i = frames_model.get_frame_position(data['frame_id']) ni = i - data['index_change'] temp = frames_model.frames[i] frames_model.frames[i] = frames_model.frames[ni] frames_model.frames[ni] = temp frames_controller.update_view() pieces_controller.update_view() elif action['type'] == 'delete_frame': frames_model.frames.insert(data['index'], data['frame']) pieces_model.pieces[data['frame']['id']] = data['pieces'] frames_controller.update_view() pieces_controller.update_view() elif action['type'] == 'save': view_util.popup('Oh F**k', 'Your Peoplemon game save has been deleted') elif action['type'] == 'batch': if data['percent'] == 0: batch_controller.batch_shift(data['piece_id'], data['start_frame'], data['end_frame'], 0, -data['xpos'], -data['ypos'], -data['xscale'], -data['yscale'], -data['alpha'], -data['rot']) else: xs = (-data['xscale']) / (100 + data['xscale']) * 100 ys = (-data['yscale']) / (100 + data['yscale']) * 100 a = (-data['alpha']) / (100 + data['alpha']) * 100 r = (-data['rot']) / (100 + data['rot']) * 100 fl = (-data['frame_len']) / (100 + data['frame_len']) * 100 batch_controller.percent_shift(data['piece_id'], data['start_frame'], data['end_frame'], fl, xs, ys, a, r) elif action['type'] == 'interpolate': s = frames_model.get_frame_position(data['start_frame']) + 1 e = frames_model.get_frame_position(data['end_frame']) fids = [ frames_model.get_frame_from_pos(i)['id'] for i in range(s, e) ] for fid in fids: i = frames_model.get_frame_position(fid) if fid in pieces_model.pieces.keys(): del pieces_model.pieces[fid] del frames_model.frames[i] frames_controller.update_view() pieces_controller.update_view() elif action['type'] == 'toggle_loop': frames_model.is_loop = not frames_model.is_loop frames_controller.update_view() model.current_action -= 1 controller.update_view()
def redo(): if model.current_action is not None and model.current_action in range( 0, len(model.actions) - 1): action = model.actions[model.current_action + 1] data = action['data'] if action['type'] == 'add_piece': pieces_model.pieces[data['frame_id']].append(data['piece']) pieces_controller.update_view() elif action['type'] == 'update_piece': pieces_model.update_piece(data['frame_id'], data['new']) pieces_controller.update_view() elif action['type'] == 'delete_piece': pieces_model.remove_piece(data['frame_id'], data['piece']['id']) pieces_controller.update_view() elif action['type'] == 'move_piece': i = 0 for p in pieces_model.pieces[data['frame_id']]: if p['id'] == data['piece_id']: break i += 1 ni = i + data['index_change'] temp = pieces_model.pieces[data['frame_id']][i] pieces_model.pieces[data['frame_id']][i] = pieces_model.pieces[ data['frame_id']][ni] pieces_model.pieces[data['frame_id']][ni] = temp pieces_controller.update_view() elif action['type'] == 'add_image': view_util.error('This cannot be redone') elif action['type'] == 'delete_image': view_util.popup('This cannot be redone') elif action['type'] == 'add_frame': frames_model.frames.insert(data['index'], data['frame']) pieces_model.pieces[data['frame']['id']] = data['pieces'] frames_controller.update_view() pieces_controller.update_view() elif action['type'] == 'update_frame': i = frames_model.get_frame_position(data['frame_id']) frames_model.frames[i]['length'] = data['new_len'] frames_controller.update_view() elif action['type'] == 'move_frame': i = frames_model.get_frame_position(data['frame_id']) ni = i + data['index_change'] temp = frames_model.frames[i] frames_model.frames[i] = frames_model.frames[ni] frames_model.frames[ni] = temp frames_controller.update_view() pieces_controller.update_view() elif action['type'] == 'delete_frame': if data['frame']['id'] in pieces_model.pieces.keys(): del pieces_model.pieces[data['frame']['id']] del frames_model.frames[data['index']] frames_controller.update_view() pieces_controller.update_view() elif action['type'] == 'save': view_util.popup('Awesome', 'Your Peoplemon game save has been restored') elif action['type'] == 'batch': if data['percent'] == 0: batch_controller.batch_shift( data['piece_id'], data['start_frame'], data['end_frame'], data['frame_len'], data['xpos'], data['ypos'], data['xscale'], data['yscale'], data['alpha'], data['rot']) else: batch_controller.percent_shift(data['piece_id'], data['start_frame'], data['end_frame'], data['frame_len'], data['xscale'], data['yscale'], data['alpha'], data['rot']) elif action['type'] == 'interpolate': i = frames_model.get_frame_position(data['start_frame']) interpolate_controller.interpolate(i, data['total_time'], data['frame_len']) pieces_controller.update_view() frames_controller.update_view() elif action['type'] == 'toggle_loop': frames_model.is_loop = not frames_model.is_loop frames_controller.update_view() model.current_action += 1 controller.update_view()
def new_frame_insert(): i = model.get_frame_position(model.active_frame()) frame = model.get_new_frame() model.frames.insert(i, frame) update_view() actions_controller.add_frame_action(frame, i, {})
def active_frame_index(): return model.get_frame_position(model.active_frame())