]> git.bts.cx Git - aseprite-tools.git/commitdiff
Added support for specific frame export main
authorBen Sherratt <redacted>
Sat, 20 Dec 2025 11:06:27 +0000 (11:06 +0000)
committerBen Sherratt <redacted>
Sat, 20 Dec 2025 11:06:27 +0000 (11:06 +0000)
* Additional fixes

export-puzzlescript.lua

index 31ef326a853ccd236d35cd7ffc62c73cba9cdb71..3b8abeba179136a51c1e97a5d894ef9c7726b7df 100644 (file)
@@ -93,7 +93,7 @@ function PuzzleScriptObjectItem:set_color(color)
        if color.alpha == 255 then
                self.colors = { hexColor(color) }
        else
        if color.alpha == 255 then
                self.colors = { hexColor(color) }
        else
-               self.colors = { "transparent" }
+               self.colors = {}
        end
        self.pixels = nil
 end
        end
        self.pixels = nil
 end
@@ -112,16 +112,20 @@ function PuzzleScriptObjectItem:export(script_file)
        script_file:write(self.id)
        script_file:write("\n")
 
        script_file:write(self.id)
        script_file:write("\n")
 
-       script_file:write(table.concat(self.colors, " "))
-       script_file:write("\n")
+       if #self.colors > 0 then
+               script_file:write(table.concat(self.colors, " "))
+               script_file:write("\n")
 
 
-       if self.pixels then
-               for y = 0, 4 do
-                       for x = 0, 4 do
-                               script_file:write(self.pixels[y * 5 + x + 1])
+               if self.pixels then
+                       for y = 0, 4 do
+                               for x = 0, 4 do
+                                       script_file:write(self.pixels[y * 5 + x + 1])
+                               end
+                               script_file:write("\n")
                        end
                        end
-                       script_file:write("\n")
                end
                end
+       else
+               script_file:write("transparent\n")
        end
 end
 
        end
 end
 
@@ -394,6 +398,7 @@ function main()
 
        local previous_export_filename = sprite.properties(plugin_key).previous_export_filename
        local previous_merge_filename = sprite.properties(plugin_key).previous_merge_filename
 
        local previous_export_filename = sprite.properties(plugin_key).previous_export_filename
        local previous_merge_filename = sprite.properties(plugin_key).previous_merge_filename
+       local previous_export_selected_only = sprite.properties(plugin_key).previous_export_selected_only
        local previous_export_lofi = sprite.properties(plugin_key).previous_export_lofi
 
        if previous_export_filename == nil then
        local previous_export_lofi = sprite.properties(plugin_key).previous_export_lofi
 
        if previous_export_filename == nil then
@@ -405,6 +410,7 @@ function main()
        local dlg = Dialog()
        dlg:file{ id="script_filename", label="Output:", filename=previous_export_filename, filetypes=".txt", save=true }
        dlg:file{ id="merge_filename", label="Merge script (optional):", filename=previous_merge_filename, filetypes=".txt" }
        local dlg = Dialog()
        dlg:file{ id="script_filename", label="Output:", filename=previous_export_filename, filetypes=".txt", save=true }
        dlg:file{ id="merge_filename", label="Merge script (optional):", filename=previous_merge_filename, filetypes=".txt" }
+       dlg:check{ id="selected_only", label="Export selected level(s) only", selected=previous_export_selected_only }
        dlg:check{ id="lofi", label="Prototype export (layer colours)", selected=previous_export_lofi }
        dlg:button{ id="confirm", text="Confirm" }
        dlg:button{ id="cancel", text="Cancel" }
        dlg:check{ id="lofi", label="Prototype export (layer colours)", selected=previous_export_lofi }
        dlg:button{ id="confirm", text="Confirm" }
        dlg:button{ id="cancel", text="Cancel" }
@@ -491,7 +497,17 @@ function main()
        local tiles_w = math.floor(sprite.width / 5)
        local tiles_h = math.floor(sprite.height / 5)
 
        local tiles_w = math.floor(sprite.width / 5)
        local tiles_h = math.floor(sprite.height / 5)
 
-       for _, frame in ipairs(sprite.frames) do
+       local exported_frames = sprite.frames
+
+       if data.selected_only then
+               if app.range.isEmpty == false then
+                       exported_frames = app.range.frames
+               else
+                       exported_frames = { app.frame }
+               end
+       end
+
+       for _, frame in ipairs(exported_frames) do
                local level_item = PuzzleScriptLevelItem:new()
                levels_section:add_item(level_item)
                level_item.width = tiles_w
                local level_item = PuzzleScriptLevelItem:new()
                levels_section:add_item(level_item)
                level_item.width = tiles_w
@@ -542,9 +558,6 @@ function main()
                level:map_to_legend(legend_section, legend_icons)
        end
 
                level:map_to_legend(legend_section, legend_icons)
        end
 
-
-
-
        local layers_section = pz_file:get_section("COLLISIONLAYERS")
        for _, layer in ipairs(sprite.layers) do
                local layer_item = PuzzleScriptLayerItem:new()
        local layers_section = pz_file:get_section("COLLISIONLAYERS")
        for _, layer in ipairs(sprite.layers) do
                local layer_item = PuzzleScriptLayerItem:new()
@@ -572,33 +585,6 @@ function main()
                end
        end
 
                end
        end
 
---     for _, objects in pairs(layer_objects) do
---             for _, object in pairs(objects) do
---                     local layer_item = PuzzleScriptLayerItem:new()
---                     layers_section:add_item(layer_item)
---                     layer_item.id = object.layer.name
---             end
---     end
-
-
---     for _, layer in ipairs(layers) do
---             if layer.isVisible and layer.parent == sprite then
-
-
-
---PuzzleScriptLegendMapping:new()
-
---                     local layer_item = PuzzleScriptLayerItem:new()
---                     layers_section:add_item(layer_item)
---                     layer_item.id = layer.name
---             end
---     end
-
-
---legend stuff again after...
-
-
-
        -- Merge after making everything else
        pz_file:read(data.merge_filename)
 
        -- Merge after making everything else
        pz_file:read(data.merge_filename)
 
@@ -606,11 +592,13 @@ function main()
 
        local export_filename_changed = sprite.properties(plugin_key).previous_export_filename ~= data.script_filename
        local merge_filename_changed = sprite.properties(plugin_key).previous_merge_filename ~= data.merge_filename
 
        local export_filename_changed = sprite.properties(plugin_key).previous_export_filename ~= data.script_filename
        local merge_filename_changed = sprite.properties(plugin_key).previous_merge_filename ~= data.merge_filename
+       local selected_only_changed = sprite.properties(plugin_key).previous_export_selected_only ~= data.selected_only
        local lofi_changed = sprite.properties(plugin_key).previous_export_lofi ~= data.lofi
 
        local lofi_changed = sprite.properties(plugin_key).previous_export_lofi ~= data.lofi
 
-       if export_filename_changed or merge_filename_changed or lofi_changed then
+       if export_filename_changed or merge_filename_changed or selected_only_changed or lofi_changed then
                sprite.properties(plugin_key).previous_export_filename = data.script_filename
                sprite.properties(plugin_key).previous_merge_filename = data.merge_filename
                sprite.properties(plugin_key).previous_export_filename = data.script_filename
                sprite.properties(plugin_key).previous_merge_filename = data.merge_filename
+               sprite.properties(plugin_key).previous_export_selected_only = data.selected_only
                sprite.properties(plugin_key).previous_export_lofi = data.lofi
        end
 end
                sprite.properties(plugin_key).previous_export_lofi = data.lofi
        end
 end