Browse Source

remove findslotindex from skeletondata and make it into a table, for faster lookups

Matias 12 years ago
parent
commit
c5016f0da0
3 changed files with 6 additions and 13 deletions
  1. 1 1
      spine-lua/Skeleton.lua
  2. 1 8
      spine-lua/SkeletonData.lua
  3. 4 4
      spine-lua/SkeletonJson.lua

+ 1 - 1
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)

+ 1 - 8
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

+ 4 - 4
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