diff --git a/spine-lua/Skeleton.lua b/spine-lua/Skeleton.lua index 50d27a589..63e05b968 100644 --- a/spine-lua/Skeleton.lua +++ b/spine-lua/Skeleton.lua @@ -99,7 +99,7 @@ function Skeleton.new (skeletonData) function self:getAttachment (slotName, attachmentName) if not slotName then error("slotName cannot be nil.", 2) end if not attachmentName then error("attachmentName cannot be nil.", 2) end - local slotIndex = self.data:findSlotIndex(slotName) + local slotIndex = skeletonData.nameIndices[slotName] if slotIndex == -1 then error("Slot not found: " .. slotName, 2) end if self.skin then local attachment = self.skin:getAttachment(slotIndex, attachmentName) diff --git a/spine-lua/SkeletonData.lua b/spine-lua/SkeletonData.lua index db776b153..a9e70c29e 100644 --- a/spine-lua/SkeletonData.lua +++ b/spine-lua/SkeletonData.lua @@ -28,6 +28,7 @@ function SkeletonData.new () local self = { bones = {}, slots = {}, + nameIndices = {}, skins = {}, animations = {} } @@ -56,14 +57,6 @@ function SkeletonData.new () return nil end - function self:findSlotIndex (slotName) - if not slotName then error("slotName cannot be nil.", 2) end - for i,slot in ipairs(self.slots) do - if slot.name == slotName then return i end - end - return -1 - end - function self:findSkin (skinName) if not skinName then error("skinName cannot be nil.", 2) end for i,skin in ipairs(self.skins) do diff --git a/spine-lua/SkeletonJson.lua b/spine-lua/SkeletonJson.lua index a837ceb13..4fd745629 100644 --- a/spine-lua/SkeletonJson.lua +++ b/spine-lua/SkeletonJson.lua @@ -102,8 +102,8 @@ function SkeletonJson.new (attachmentLoader) end slotData.attachmentName = slotMap["attachment"] - - table.insert(skeletonData.slots, slotData) + table.insert(skeletonData.slots, slotData) + skeletonData.nameIndices[slotData.name] = #skeletonData.slots end end @@ -113,7 +113,7 @@ function SkeletonJson.new (attachmentLoader) for skinName,skinMap in pairs(map) do local skin = Skin.new(skinName) for slotName,slotMap in pairs(skinMap) do - local slotIndex = skeletonData:findSlotIndex(slotName) + local slotIndex = skeletonData.nameIndices[slotName] for attachmentName,attachmentMap in pairs(slotMap) do local attachment = readAttachment(attachmentName, attachmentMap, self.scale) if attachment then @@ -213,7 +213,7 @@ function SkeletonJson.new (attachmentLoader) local slotsMap = map["slots"] if slotsMap then for slotName,timelineMap in pairs(slotsMap) do - local slotIndex = skeletonData:findSlotIndex(slotName) + local slotIndex = skeletonData.nameIndices[slotName] for timelineName,values in pairs(timelineMap) do if timelineName == TIMELINE_COLOR then