From 6c5258339cd68ceaf1b96011313f51f4390908dd Mon Sep 17 00:00:00 2001 From: Skyler Lehmkuhl Date: Mon, 23 Dec 2024 00:16:57 -0500 Subject: [PATCH] Fix motion tween after adding a keyframe in the middle of it --- src/main.js | 65 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/src/main.js b/src/main.js index 196362d..e12b56a 100644 --- a/src/main.js +++ b/src/main.js @@ -801,26 +801,7 @@ let actions = { execute: (action) => { let object = pointerList[action.object] let layer = pointerList[action.layer] - console.log(pointerList) - console.log(action.object) - console.log(object) - let latestFrame = object.getFrame(Math.max(action.frameNum-1, 0)) - let newKeyframe = new Frame("keyframe", action.uuid) - for (let key in latestFrame.keys) { - newKeyframe.keys[key] = structuredClone(latestFrame.keys[key]) - } - for (let shape of latestFrame.shapes) { - newKeyframe.shapes.push(shape.copy(action.uuid)) - } - if (action.frameNum >= layer.frames.length) { - for (const [index, idx] of Object.entries(action.addedFrames)) { - layer.frames[index] = new Frame("normal", idx) - } - } - // layer.frames.push(newKeyframe) - // } else if (layer.frames[action.frameNum].frameType != "keyframe") { - layer.frames[action.frameNum] = newKeyframe - // } + layer.addOrChangeFrame(action.frameNum, "keyframe", action.uuid, action.addedFrames) updateLayers() }, rollback: (action) => { @@ -836,6 +817,25 @@ let actions = { updateLayers() } }, + deleteFrame: { + create: (frame, layer) => { + redoStack.length = 0 + let action = { + frame: frame.idx, + layer: layer.idx + } + undoStack.push({name: 'deleteFrame', action: action}) + actions.deleteFrame.execute(action) + updateMenu() + }, + execute: (action) => { + let frame = pointerList[action.frame] + let layer = pointerList[action.layer] + }, + rollback: (action) => { + // your code here + } + }, addMotionTween: { create: () => { redoStack.length = 0 @@ -1492,6 +1492,31 @@ class Layer { } return newLayer } + addOrChangeFrame(num, frameType, uuid, addedFrames) { + let latestFrame = this.getFrame(Math.max(num-1, 0)) + let newKeyframe = new Frame(frameType, uuid) + for (let key in latestFrame.keys) { + newKeyframe.keys[key] = structuredClone(latestFrame.keys[key]) + } + for (let shape of latestFrame.shapes) { + newKeyframe.shapes.push(shape.copy(uuid)) + } + if (num >= this.frames.length) { + for (const [index, idx] of Object.entries(addedFrames)) { + this.frames[index] = new Frame("normal", idx) + } + } else if (this.frames[num].frameType=="motion") { + for (let i=this.frames[num].prevIndex; i