Add new layer detection to keep colors mapped correctly.

This commit is contained in:
Anna Rose 2024-07-29 23:22:57 -04:00
parent 259bd1c860
commit b9388061ab
5 changed files with 78 additions and 49 deletions

View File

@ -1,52 +1,6 @@
-- New commands to be executed via Aseprite menus / keyboard shortcuts -- New commands to be executed via Aseprite menus / keyboard shortcuts
local sprt = require "abase-sprite" local sprt = require "abase-sprite"
local BASE_COLOR = Color {
r = 0,
g = 0,
b = 0,
a = 0
}
local IGNORE_COLOR = Color {
gray = 100
}
local IGNORE_SUBCOLOR = Color {
gray = 150
}
local MERGE_COLOR = Color {
r = 200,
g = 200,
b = 0
}
local MERGE_SUBCOLOR = Color {
r = 200,
g = 200,
b = 128
}
-- set the color of a layer and its sublayers
local function setColor(layer, subColor)
if (layer.properties(extKey).ignored) then
layer.color = IGNORE_COLOR
subColor = IGNORE_SUBCOLOR
elseif subColor == IGNORE_SUBCOLOR then
layer.color = subColor
elseif (layer.properties(extKey).exportedAsSprite) then
layer.color = MERGE_COLOR
subColor = MERGE_SUBCOLOR
elseif subColor == MERGE_SUBCOLOR then
layer.color = subColor
else
layer.color = BASE_COLOR
end
if (layer.isGroup) then
for i, sublayer in ipairs(layer.layers) do
setColor(sublayer, subColor)
end
end
end
local function ExportSpritesheetAdvanced() local function ExportSpritesheetAdvanced()
if not app.sprite then if not app.sprite then
return app.alert "Must have a sprite open to export." return app.alert "Must have a sprite open to export."
@ -72,7 +26,7 @@ local function ToggleIgnore()
else else
layer.properties(extKey).ignored = true layer.properties(extKey).ignored = true
end end
setColor(layer) sprt.setColor(layer)
end end
local function ToggleExportAsSprite() local function ToggleExportAsSprite()
@ -82,7 +36,7 @@ local function ToggleExportAsSprite()
else else
layer.properties(extKey).exportedAsSprite = true layer.properties(extKey).exportedAsSprite = true
end end
setColor(layer) sprt.setColor(layer)
end end
local export = { local export = {

14
abase-listeners.lua Normal file
View File

@ -0,0 +1,14 @@
local sprt = require "abase-sprite"
-- recolors all layers in the current sprite
local function RecolorLayers()
for i, layer in ipairs(app.sprite.layers) do
sprt.setColor(layer)
end
end
local export = {
RecolorLayers = RecolorLayers,
}
return export

View File

@ -1,4 +1,28 @@
-- Functions for modifying a sprite -- Functions for modifying a sprite
local BASE_COLOR = Color {
r = 0,
g = 0,
b = 0,
a = 0
}
local IGNORE_COLOR = Color {
gray = 100
}
local IGNORE_SUBCOLOR = Color {
gray = 150
}
local MERGE_COLOR = Color {
r = 200,
g = 200,
b = 0
}
local MERGE_SUBCOLOR = Color {
r = 200,
g = 200,
b = 128
}
-- Deletes any layers with the 'ignored' property. -- Deletes any layers with the 'ignored' property.
local function deleteLayers(spr, layers) local function deleteLayers(spr, layers)
for i, layer in ipairs(layers) do for i, layer in ipairs(layers) do
@ -44,9 +68,35 @@ local function revealLayers(layers)
end end
end end
-- set the color of a layer and its sublayers
local function setColor(layer, subColor)
if (layer.properties(extKey).ignored) then
layer.color = IGNORE_COLOR
subColor = IGNORE_SUBCOLOR
elseif subColor == IGNORE_SUBCOLOR then
layer.color = subColor
elseif (layer.properties(extKey).exportedAsSprite) then
layer.color = MERGE_COLOR
subColor = MERGE_SUBCOLOR
elseif subColor == MERGE_SUBCOLOR then
layer.color = subColor
else
layer.color = BASE_COLOR
end
if (layer.isGroup) then
for i, sublayer in ipairs(layer.layers) do
setColor(sublayer, subColor)
end
end
end
local export = { local export = {
deleteLayers = deleteLayers, deleteLayers = deleteLayers,
flattenLayers = flattenLayers, flattenLayers = flattenLayers,
revealLayers = revealLayers revealLayers = revealLayers,
setColor = setColor,
} }
return export return export

View File

@ -1,6 +1,7 @@
extKey = "annabunches/abase" -- this must come before we require 'abase-commands' extKey = "annabunches/abase" -- this must come before we require 'abase-commands'
local cmd = require "abase-commands" local cmd = require "abase-commands"
local listeners = require "abase-listeners"
function init(plugin) function init(plugin)
plugin:newCommand{ plugin:newCommand{
@ -76,4 +77,13 @@ function init(plugin)
return app.layer.isGroup return app.layer.isGroup
end end
} }
app.events:on(
"aftercommand",
function(ev)
if (ev.name == "NewLayer") then
listeners.RecolorLayers()
end
end
)
end end

View File

@ -11,6 +11,7 @@
"contributes": { "contributes": {
"scripts": [ "scripts": [
{ "path": "./advanced-spritesheet-export.lua" }, { "path": "./advanced-spritesheet-export.lua" },
{ "path": "./abase-listeners.lua" },
{ "path": "./abase-commands.lua" }, { "path": "./abase-commands.lua" },
{ "path": "./abase-sprite.lua" } { "path": "./abase-sprite.lua" }
] ]