Merge remote-tracking branch 'origin/master'

This commit is contained in:
NathanSweet 2013-06-13 20:09:30 +02:00
commit baa70fa810
4 changed files with 24 additions and 20 deletions

View File

@ -413,9 +413,16 @@ function Animation.AttachmentTimeline.new ()
end end
local attachmentName = self.attachmentNames[frameIndex] local attachmentName = self.attachmentNames[frameIndex]
local attachment local slot = skeleton.slotsByName[self.slotName]
if attachmentName then attachment = skeleton:getAttachment(self.slotName, attachmentName) end if attachmentName then
skeleton:findSlot(self.slotName):setAttachment(attachment) if not slot.attachment then
slot:setAttachment(skeleton:getAttachment(self.slotName, attachmentName))
elseif slot.attachment.name ~= attachmentName then
slot:setAttachment(skeleton:getAttachment(self.slotName, attachmentName))
end
else
slot:setAttachment(nil)
end
end end
return self return self

View File

@ -35,6 +35,7 @@ function Skeleton.new (skeletonData)
data = skeletonData, data = skeletonData,
bones = {}, bones = {},
slots = {}, slots = {},
slotsByName = {},
drawOrder = {} drawOrder = {}
} }
@ -73,13 +74,10 @@ function Skeleton.new (skeletonData)
return nil return nil
end end
function self:findSlot (slotName) function self:findSlot (slotName)
if not slotName then error("slotName cannot be nil.", 2) end if not slotName then error("slotName cannot be nil.", 2) end
for i,slot in ipairs(self.slots) do return slotsByName[slotName]
if slot.data.name == slotName then return slot end end
end
return nil
end
function self:setSkin (skinName) function self:setSkin (skinName)
local newSkin local newSkin
@ -106,7 +104,7 @@ function Skeleton.new (skeletonData)
function self:getAttachment (slotName, attachmentName) function self:getAttachment (slotName, attachmentName)
if not slotName then error("slotName cannot be nil.", 2) end if not slotName then error("slotName cannot be nil.", 2) end
if not attachmentName then error("attachmentName 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.slotNameIndices[slotName]
if slotIndex == -1 then error("Slot not found: " .. slotName, 2) end if slotIndex == -1 then error("Slot not found: " .. slotName, 2) end
if self.skin then if self.skin then
local attachment = self.skin:getAttachment(slotIndex, attachmentName) local attachment = self.skin:getAttachment(slotIndex, attachmentName)
@ -147,6 +145,7 @@ function Skeleton.new (skeletonData)
local bone = self.bones[spine.utils.indexOf(skeletonData.bones, slotData.boneData)] local bone = self.bones[spine.utils.indexOf(skeletonData.bones, slotData.boneData)]
local slot = Slot.new(slotData, self, bone) local slot = Slot.new(slotData, self, bone)
table.insert(self.slots, slot) table.insert(self.slots, slot)
self.slotsByName[slot.data.name] = slot
table.insert(self.drawOrder, slot) table.insert(self.drawOrder, slot)
end end

View File

@ -28,6 +28,7 @@ function SkeletonData.new ()
local self = { local self = {
bones = {}, bones = {},
slots = {}, slots = {},
slotNameIndices = {},
skins = {}, skins = {},
animations = {} animations = {}
} }
@ -58,10 +59,7 @@ function SkeletonData.new ()
function self:findSlotIndex (slotName) function self:findSlotIndex (slotName)
if not slotName then error("slotName cannot be nil.", 2) end if not slotName then error("slotName cannot be nil.", 2) end
for i,slot in ipairs(self.slots) do return slotNameIndices[slotName] or -1
if slot.name == slotName then return i end
end
return -1
end end
function self:findSkin (skinName) function self:findSkin (skinName)

View File

@ -29,7 +29,6 @@ local SlotData = require "spine-lua.SlotData"
local Skin = require "spine-lua.Skin" local Skin = require "spine-lua.Skin"
local AttachmentLoader = require "spine-lua.AttachmentLoader" local AttachmentLoader = require "spine-lua.AttachmentLoader"
local Animation = require "spine-lua.Animation" local Animation = require "spine-lua.Animation"
local TIMELINE_SCALE = "scale" local TIMELINE_SCALE = "scale"
local TIMELINE_ROTATE = "rotate" local TIMELINE_ROTATE = "rotate"
local TIMELINE_TRANSLATE = "translate" local TIMELINE_TRANSLATE = "translate"
@ -102,8 +101,9 @@ function SkeletonJson.new (attachmentLoader)
end end
slotData.attachmentName = slotMap["attachment"] slotData.attachmentName = slotMap["attachment"]
table.insert(skeletonData.slots, slotData)
table.insert(skeletonData.slots, slotData) skeletonData.slotNameIndices[slotData.name] = #skeletonData.slots
end end
end end
@ -113,7 +113,7 @@ function SkeletonJson.new (attachmentLoader)
for skinName,skinMap in pairs(map) do for skinName,skinMap in pairs(map) do
local skin = Skin.new(skinName) local skin = Skin.new(skinName)
for slotName,slotMap in pairs(skinMap) do for slotName,slotMap in pairs(skinMap) do
local slotIndex = skeletonData:findSlotIndex(slotName) local slotIndex = skeletonData.slotNameIndices[slotName]
for attachmentName,attachmentMap in pairs(slotMap) do for attachmentName,attachmentMap in pairs(slotMap) do
local attachment = readAttachment(attachmentName, attachmentMap, self.scale) local attachment = readAttachment(attachmentName, attachmentMap, self.scale)
if attachment then if attachment then
@ -213,7 +213,7 @@ function SkeletonJson.new (attachmentLoader)
local slotsMap = map["slots"] local slotsMap = map["slots"]
if slotsMap then if slotsMap then
for slotName,timelineMap in pairs(slotsMap) do for slotName,timelineMap in pairs(slotsMap) do
local slotIndex = skeletonData:findSlotIndex(slotName) local slotIndex = skeletonData.slotNameIndices[slotName]
for timelineName,values in pairs(timelineMap) do for timelineName,values in pairs(timelineMap) do
if timelineName == TIMELINE_COLOR then if timelineName == TIMELINE_COLOR then