Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
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']])
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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')
Ejemplo n.º 8
0
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()
Ejemplo n.º 9
0
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()
Ejemplo n.º 10
0
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, {})
Ejemplo n.º 11
0
def active_frame_index():
    return model.get_frame_position(model.active_frame())