From dddcb664d75bcc831c46c4b86735118d39dd8392 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 24 Jul 2020 17:50:25 +0200 Subject: [PATCH] added aseprite script for populating the data texture atlas --- MLEM/Textures/DataTextureAtlas.cs | 2 ++ Utilities/Populate Data Texture Atlas.lua | 41 +++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 Utilities/Populate Data Texture Atlas.lua diff --git a/MLEM/Textures/DataTextureAtlas.cs b/MLEM/Textures/DataTextureAtlas.cs index 2317ed4..8c76658 100644 --- a/MLEM/Textures/DataTextureAtlas.cs +++ b/MLEM/Textures/DataTextureAtlas.cs @@ -11,6 +11,8 @@ namespace MLEM.Textures { /// /// This class represents an atlas of objects which are loaded from a special texture atlas file. /// To load a data texture atlas, you can use . + /// To see the structure of a Data Texture Atlas, you can check out the sandbox project: . + /// Additionally, if you are using Aseprite, there is a script to automatically populate it: /// public class DataTextureAtlas { diff --git a/Utilities/Populate Data Texture Atlas.lua b/Utilities/Populate Data Texture Atlas.lua new file mode 100644 index 0000000..30e72fe --- /dev/null +++ b/Utilities/Populate Data Texture Atlas.lua @@ -0,0 +1,41 @@ +-- This is a lua script for Aseprite that allows automatically populating a MLEM Data Texture Atlas. +-- To use this script, you need to select a rectangular area that should be your texture region. +-- If you want a custom pivot point, you also need to un-select exactly one pixel, the pivot point. +-- When you then execute the script and input the name of the texture region, it gets appended to the "SpriteName.atlas" file. + +-- get the currently selected sprite +local selection = app.activeSprite.selection +if selection == nil then return end +local bounds = selection.bounds + +local loc = "loc "..bounds.x.." "..bounds.y.." "..bounds.width.." "..bounds.height.."\n" +local piv = "" + +-- find the pivot point, which should be the only de-selected pixel in the selection +for x = bounds.x, bounds.x + bounds.width - 1 do + for y = bounds.y, bounds.y + bounds.height - 1 do + if not selection:contains(x, y) then + piv = "piv "..x.." "..y.."\n" + goto foundPivot + end + end +end +::foundPivot:: + +-- open the name dialog +local dialog = Dialog("Copy Texture Atlas Data") + :entry{ id = "name", label = "Region Name", focus = true } + :button{ id = "ok", text="&OK" } + :button{ text = "&Cancel" } +dialog:show() + +local data = dialog.data +if not data.ok then return end +local name = data.name + +-- get the atlas file and write the data to it +local spriteFile = app.activeSprite.filename +local atlas = spriteFile:match("(.+)%..+")..".atlas" +local file = io.open(atlas, "a") +file:write("\n"..name.."\n"..loc..piv) +file:close() \ No newline at end of file