소스 검색

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

Matias 12 년 전
부모
커밋
c5016f0da0
3개의 변경된 파일6개의 추가작업 그리고 13개의 파일을 삭제
  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)
 	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.nameIndices[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)

+ 1 - 8
spine-lua/SkeletonData.lua

@@ -28,6 +28,7 @@ function SkeletonData.new ()
 	local self = {
 	local self = {
 		bones = {},
 		bones = {},
 		slots = {},
 		slots = {},
+        nameIndices = {},
 		skins = {},
 		skins = {},
 		animations = {}
 		animations = {}
 	}
 	}
@@ -56,14 +57,6 @@ function SkeletonData.new ()
 		return nil
 		return nil
 	end
 	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)
 	function self:findSkin (skinName)
 		if not skinName then error("skinName cannot be nil.", 2) end
 		if not skinName then error("skinName cannot be nil.", 2) end
 		for i,skin in ipairs(self.skins) do
 		for i,skin in ipairs(self.skins) do

+ 4 - 4
spine-lua/SkeletonJson.lua

@@ -102,8 +102,8 @@ 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.nameIndices[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.nameIndices[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.nameIndices[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