-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.lua
94 lines (78 loc) · 2.39 KB
/
main.lua
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
dofile("file-sequence.lua")
debugMode = false
unsavedByFilename = {}
spriteByFilename = {}
function dbg(msg)
if debugMode then
print(msg)
end
end
function isSaved(sprite)
return app.fs.isFile(sprite.filename)
end
function onSpriteChange(filename)
local obj = spriteByFilename[filename]
obj.changes = obj.changes + 1
dbg("Sprite " .. filename .. " has changed " .. obj.changes .. " times")
local filename = getTimeLapseFileName(filename, nil)
dbg("Will save snapshot " .. filename)
if filename then
obj.sprite:saveCopyAs(filename)
end
end
function registerSprite(sprite)
local filename = sprite.filename
local handle = sprite.events:on("change", function() onSpriteChange(filename) end)
spriteByFilename[filename] = {
changes = 0,
sprite = sprite
}
end
function promoteUnsavedFile(sprite, filename, listener)
dbg("Detected a file name change! Sprite " .. filename .. " is now " .. app.activeSprite.filename)
unsavedByFilename[filename] = nil
sprite.events:off(listener)
dbg("Unregistered filename change listener for " .. filename)
handleSavedSprite(app.activeSprite)
end
function handleUnsavedSprite(sprite)
local filename = sprite.filename -- this will be something like "Sprite-001" in an unsaved file
if unsavedByFilename[filename] == nil then
dbg("Registering unsaved sprite " .. filename)
function callback()
promoteUnsavedFile(sprite, filename, callback)
end
sprite.events:on("filenamechange", callback)
unsavedByFilename[filename] = true
end
end
function handleSavedSprite(sprite)
local filename = sprite.filename
if spriteByFilename[filename] == nil then
dbg("Registering saved sprite " .. filename)
registerSprite(sprite)
-- call it once straight away
onSpriteChange(filename)
end
end
function onSiteChange()
local sprite = app.activeSprite
if not sprite then
return
end
if isSaved(sprite) then
handleSavedSprite(sprite)
else
handleUnsavedSprite(sprite)
end
end
function init(plugin)
dbg("Aseprite is initializing timelapse plugin")
app.events:on("sitechange", onSiteChange)
if plugin.preferences.count == nil then
plugin.preferences.count = 0
end
end
function exit(plugin)
dbg("Aseprite is closing timelapse plugin...")
end