This repository has been archived by the owner on Jan 18, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathAdjust Timeline to FPS.jsfl
124 lines (105 loc) · 2.81 KB
/
Adjust Timeline to FPS.jsfl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
fl.outputPanel.clear();
var doc = fl.getDocumentDOM();
var lib = doc.library;
var currFrameRate = doc.frameRate;
var newFrameRate = prompt("Enter new desired frame rate:", currFrameRate.toString());
var adjustMode = prompt("Adjust all movieclip timelines? (0=no, 1=yes)", 1);
if (newFrameRate != null && adjustMode != null)
{
if (adjustMode == 1) selectMainTimeline();
adjustTimeline();
if (adjustMode == 1)
{
var libItemCount = lib.items.length;
for (var libItemIndex = 0; libItemIndex < libItemCount; libItemIndex++)
{
var libItem = lib.items[libItemIndex];
if (libItem.itemType == "movie clip")
{
lib.editItem(libItem.name);
adjustTimeline();
}
}
}
if (adjustMode == 1) doc.frameRate = parseFloat(newFrameRate);
selectMainTimeline();
fl.trace("Timeline adjustment complete");
}
else
{
fl.trace("Action cancelled");
}
function selectMainTimeline()
{
doc.editScene(0);
}
function adjustTimeline()
{
var tl = doc.getTimeline();
fl.getDocumentDOM().getTimeline().expandFolder(true, true, -1);
var layerArray = tl.layers;
var layerCount = layerArray.length;
for (var layerIndex = 0; layerIndex < layerCount; layerIndex++)
{
tl.currentLayer = layerIndex;
var currLayer = layerArray[layerIndex];
var frameArray = currLayer.frames;
var frameCount = frameArray.length;
var keyFrameArray = new Array();
var currStartFrame = 0;
keyFrameArray.push(currStartFrame);
for (var frameIndex = 0; frameIndex < frameCount; frameIndex++)
{
var currFrame = frameArray[frameIndex];
if (currFrame.startFrame != currStartFrame)
{
keyFrameArray.push(currFrame.startFrame);
currStartFrame = currFrame.startFrame;
}
}
var keyFrameCount = keyFrameArray.length;
var endFrame = currLayer.frameCount - 1;
var frameChange = 0;
for (var keyFrameIndex = 0; keyFrameIndex < keyFrameCount; keyFrameIndex++)
{
var frameStart = keyFrameArray[keyFrameIndex];
if (keyFrameIndex == (keyFrameCount - 1))
{
var frameEnd = endFrame;
}
else
{
var frameEnd = keyFrameArray[keyFrameIndex + 1];
}
var duration = frameEnd - frameStart;
var seconds = duration / currFrameRate;
var destFrameDur = seconds * newFrameRate;
frameChange = Math.round(duration - destFrameDur);
if (frameChange > 0)
{
if (frameChange > 0) tl.removeFrames(frameStart, (frameStart + frameChange));
endFrame -= frameChange;
for (var i = 0; i < keyFrameCount; i++)
{
if (i > keyFrameIndex)
{
keyFrameArray[i] -= frameChange;
}
}
}
else
{
frameChange = Math.abs(frameChange);
if (frameChange > 0) tl.insertFrames(frameChange, false, frameStart);
endFrame += frameChange;
for (var i = 0; i < keyFrameCount; i++)
{
if (i > keyFrameIndex)
{
keyFrameArray[i] += frameChange;
}
}
}
}
}
}