Advertisement
XanthicDragon

RBX_LUA (ROBLOX Lua) - SK XML to OBJ - Triangle locator

Mar 24th, 2015
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.85 KB | None | 0 0
  1. local XML = {}
  2.  
  3. function XML:FindTriangles(PosEnd, XMLFile)
  4.     if not PosEnd then PosEnd = 1 end
  5.     local _, startOfTriangle = string.find(XMLFile, "<triangle>", PosEnd)
  6.     local endOfTriangle, _ = string.find(XMLFile, "</triangle>", startOfTriangle)
  7.    
  8.     local function GetV1(Pos, Pos2)
  9.         local find1, find1End = string.find(XMLFile, "<v1>", startOfTriangle)
  10.         local find2, find2End = string.find(XMLFile, "</v1>", find1)
  11.        
  12.         local AfirstNumberS1 = XMLFile:sub(find1End+1, (string.find(XMLFile, ",", find1End+1)))
  13.         local AfirstNumberS = AfirstNumberS1:sub(1, string.len(AfirstNumberS1)-1)
  14.         local AfirstNumberPosStr = (string.find(XMLFile, ",", find1))
  15.         local AfirstNumberPos = tonumber(AfirstNumberPosStr)
  16.         local AfirstNumber = tonumber(AfirstNumberS)
  17.            
  18.         local AsecondNumberS1 = XMLFile:sub(AfirstNumberPos+1, (string.find(XMLFile, ",", AfirstNumberPos+1))) 
  19.         local AsecondNumberS = AsecondNumberS1:sub(2, string.len(AsecondNumberS1)-1)
  20.         local AsecondNumberPosStr = (string.find(XMLFile, ",", AfirstNumberPos))
  21.         local AsecondNumberPos = tonumber(AsecondNumberPosStr)
  22.         local AsecondNumber = tonumber(AsecondNumberS)
  23.         local AsecondNumberLen = string.len(AsecondNumberS)
  24.            
  25.         local AthirdNumberS1 = XMLFile:sub(AsecondNumberPos+1, (string.find(XMLFile, "</v1>", AsecondNumberPos+1)))
  26.         local AthirdNumberS = AthirdNumberS1:sub(4+AsecondNumberLen, string.len(AthirdNumberS1)-1)
  27.         local AthirdNumber = tonumber(AthirdNumberS)
  28.         return Vector3.new(AfirstNumber, AthirdNumber, AsecondNumber), find2End, Pos
  29.     end
  30.    
  31.     local function GetV2(Pos, Pos2)
  32.         local find1, find1End = string.find(XMLFile, "<v2>", startOfTriangle)
  33.         local find2, find2End = string.find(XMLFile, "</v2>", find1)
  34.        
  35.         local AfirstNumberS1 = XMLFile:sub(find1End+1, (string.find(XMLFile, ",", find1End+1)))
  36.         local AfirstNumberS = AfirstNumberS1:sub(1, string.len(AfirstNumberS1)-1)
  37.         local AfirstNumberPosStr = (string.find(XMLFile, ",", find1))
  38.         local AfirstNumberPos = tonumber(AfirstNumberPosStr)
  39.         local AfirstNumber = tonumber(AfirstNumberS)
  40.            
  41.         local AsecondNumberS1 = XMLFile:sub(AfirstNumberPos+1, (string.find(XMLFile, ",", AfirstNumberPos+1))) 
  42.         local AsecondNumberS = AsecondNumberS1:sub(2, string.len(AsecondNumberS1)-1)
  43.         local AsecondNumberPosStr = (string.find(XMLFile, ",", AfirstNumberPos))
  44.         local AsecondNumberPos = tonumber(AsecondNumberPosStr)
  45.         local AsecondNumber = tonumber(AsecondNumberS)
  46.         local AsecondNumberLen = string.len(AsecondNumberS)
  47.            
  48.         local AthirdNumberS1 = XMLFile:sub(AsecondNumberPos+1, (string.find(XMLFile, "</v2>", AsecondNumberPos+1)))
  49.         local AthirdNumberS = AthirdNumberS1:sub(4+AsecondNumberLen, string.len(AthirdNumberS1)-1)
  50.         local AthirdNumber = tonumber(AthirdNumberS)
  51.        
  52.         return Vector3.new(AfirstNumber, AthirdNumber, AsecondNumber), find2End, Pos
  53.     end
  54.    
  55.     local function GetV3(Pos, Pos2)
  56.        
  57.         local find1, find1End = string.find(XMLFile, "<v3>", startOfTriangle)
  58.         local find2, find2End = string.find(XMLFile, "</v3>", find1)
  59.        
  60.         local AfirstNumberS1 = XMLFile:sub(find1End+1, (string.find(XMLFile, ",", find1End+1)))
  61.         local AfirstNumberS = AfirstNumberS1:sub(1, string.len(AfirstNumberS1)-1)
  62.         local AfirstNumberPosStr = (string.find(XMLFile, ",", find1))
  63.         local AfirstNumberPos = tonumber(AfirstNumberPosStr)
  64.         local AfirstNumber = tonumber(AfirstNumberS)
  65.            
  66.         local AsecondNumberS1 = XMLFile:sub(AfirstNumberPos+1, (string.find(XMLFile, ",", AfirstNumberPos+1))) 
  67.         local AsecondNumberS = AsecondNumberS1:sub(2, string.len(AsecondNumberS1)-1)
  68.         local AsecondNumberPosStr = (string.find(XMLFile, ",", AfirstNumberPos))
  69.         local AsecondNumberPos = tonumber(AsecondNumberPosStr)
  70.         local AsecondNumber = tonumber(AsecondNumberS)
  71.         local AsecondNumberLen = string.len(AsecondNumberS)
  72.            
  73.         local AthirdNumberS1 = XMLFile:sub(AsecondNumberPos+1, (string.find(XMLFile, "</v3>", AsecondNumberPos+1)))
  74.         local AthirdNumberS = AthirdNumberS1:sub(4+AsecondNumberLen, string.len(AthirdNumberS1)-1)
  75.         local AthirdNumber = tonumber(AthirdNumberS)
  76.         return Vector3.new(AfirstNumber, AthirdNumber, AsecondNumber), endOfTriangle
  77.     end
  78.     Vec1, nPos1 = GetV1(nPos3, PosEnd)
  79.     Vec2, nPos2 = GetV2(nPos1, PosEnd)
  80.     Vec3, nPos3 = GetV3(nPos2, PosEnd)
  81.     return Vec1, Vec2, Vec3, nPos2
  82. end
  83.  
  84. function XML:FindTrianglesWithOffset(PosEnd, XMLFile, Vec, bone)
  85.     if not PosEnd then PosEnd = 1 end
  86.     local _, startOfTriangle = string.find(XMLFile, "<triangle>", PosEnd)
  87.     local endOfTriangle, _ = string.find(XMLFile, "</triangle>", startOfTriangle)
  88.    
  89.     local function GetV1(Pos, Pos2)
  90.         local find1, find1End = string.find(XMLFile, "<v1>", startOfTriangle)
  91.         local find2, find2End = string.find(XMLFile, "</v1>", find1)
  92.        
  93.         local AfirstNumberS1 = XMLFile:sub(find1End+1, (string.find(XMLFile, ",", find1End+1)))
  94.         local AfirstNumberS = AfirstNumberS1:sub(1, string.len(AfirstNumberS1)-1)
  95.         local AfirstNumberPosStr = (string.find(XMLFile, ",", find1))
  96.         local AfirstNumberPos = tonumber(AfirstNumberPosStr)
  97.         local AfirstNumber = tonumber(AfirstNumberS)
  98.            
  99.         local AsecondNumberS1 = XMLFile:sub(AfirstNumberPos+1, (string.find(XMLFile, ",", AfirstNumberPos+1))) 
  100.         local AsecondNumberS = AsecondNumberS1:sub(2, string.len(AsecondNumberS1)-1)
  101.         local AsecondNumberPosStr = (string.find(XMLFile, ",", AfirstNumberPos))
  102.         local AsecondNumberPos = tonumber(AsecondNumberPosStr)
  103.         local AsecondNumber = tonumber(AsecondNumberS)
  104.         local AsecondNumberLen = string.len(AsecondNumberS)
  105.            
  106.         local AthirdNumberS1 = XMLFile:sub(AsecondNumberPos+1, (string.find(XMLFile, "</v1>", AsecondNumberPos+1)))
  107.         local AthirdNumberS = AthirdNumberS1:sub(4+AsecondNumberLen, string.len(AthirdNumberS1)-1)
  108.         local AthirdNumber = tonumber(AthirdNumberS)
  109.         return Vector3.new(AfirstNumber, AthirdNumber, AsecondNumber)+Vec, find2End, Pos
  110.     end
  111.    
  112.     local function GetV2(Pos, Pos2)
  113.         local find1, find1End = string.find(XMLFile, "<v2>", startOfTriangle)
  114.         local find2, find2End = string.find(XMLFile, "</v2>", find1)
  115.        
  116.         local AfirstNumberS1 = XMLFile:sub(find1End+1, (string.find(XMLFile, ",", find1End+1)))
  117.         local AfirstNumberS = AfirstNumberS1:sub(1, string.len(AfirstNumberS1)-1)
  118.         local AfirstNumberPosStr = (string.find(XMLFile, ",", find1))
  119.         local AfirstNumberPos = tonumber(AfirstNumberPosStr)
  120.         local AfirstNumber = tonumber(AfirstNumberS)
  121.            
  122.         local AsecondNumberS1 = XMLFile:sub(AfirstNumberPos+1, (string.find(XMLFile, ",", AfirstNumberPos+1))) 
  123.         local AsecondNumberS = AsecondNumberS1:sub(2, string.len(AsecondNumberS1)-1)
  124.         local AsecondNumberPosStr = (string.find(XMLFile, ",", AfirstNumberPos))
  125.         local AsecondNumberPos = tonumber(AsecondNumberPosStr)
  126.         local AsecondNumber = tonumber(AsecondNumberS)
  127.         local AsecondNumberLen = string.len(AsecondNumberS)
  128.            
  129.         local AthirdNumberS1 = XMLFile:sub(AsecondNumberPos+1, (string.find(XMLFile, "</v2>", AsecondNumberPos+1)))
  130.         local AthirdNumberS = AthirdNumberS1:sub(4+AsecondNumberLen, string.len(AthirdNumberS1)-1)
  131.         local AthirdNumber = tonumber(AthirdNumberS)
  132.        
  133.         return Vector3.new(AfirstNumber, AthirdNumber, AsecondNumber)+Vec, find2End, Pos
  134.     end
  135.    
  136.     local function GetV3(Pos, Pos2)
  137.        
  138.         local find1, find1End = string.find(XMLFile, "<v3>", startOfTriangle)
  139.         local find2, find2End = string.find(XMLFile, "</v3>", find1)
  140.        
  141.         local AfirstNumberS1 = XMLFile:sub(find1End+1, (string.find(XMLFile, ",", find1End+1)))
  142.         local AfirstNumberS = AfirstNumberS1:sub(1, string.len(AfirstNumberS1)-1)
  143.         local AfirstNumberPosStr = (string.find(XMLFile, ",", find1))
  144.         local AfirstNumberPos = tonumber(AfirstNumberPosStr)
  145.         local AfirstNumber = tonumber(AfirstNumberS)
  146.            
  147.         local AsecondNumberS1 = XMLFile:sub(AfirstNumberPos+1, (string.find(XMLFile, ",", AfirstNumberPos+1))) 
  148.         local AsecondNumberS = AsecondNumberS1:sub(2, string.len(AsecondNumberS1)-1)
  149.         local AsecondNumberPosStr = (string.find(XMLFile, ",", AfirstNumberPos))
  150.         local AsecondNumberPos = tonumber(AsecondNumberPosStr)
  151.         local AsecondNumber = tonumber(AsecondNumberS)
  152.         local AsecondNumberLen = string.len(AsecondNumberS)
  153.            
  154.         local AthirdNumberS1 = XMLFile:sub(AsecondNumberPos+1, (string.find(XMLFile, "</v3>", AsecondNumberPos+1)))
  155.         local AthirdNumberS = AthirdNumberS1:sub(4+AsecondNumberLen, string.len(AthirdNumberS1)-1)
  156.         local AthirdNumber = tonumber(AthirdNumberS)
  157.         return Vector3.new(AfirstNumber, AthirdNumber, AsecondNumber)+Vec, endOfTriangle
  158.     end
  159.     Vec1, nPos1 = GetV1(nPos3, PosEnd)
  160.     Vec2, nPos2 = GetV2(nPos1, PosEnd)
  161.     Vec3, nPos3 = GetV3(nPos2, PosEnd)
  162.     return Vec1, Vec2, Vec3, nPos2
  163. end
  164.  
  165. function XML:GetSkyBoneOffsets(PosEnd, xml)
  166.     local t1 = "<name>"
  167.     local t2 = "</name>"
  168.     local stp = xml:find(t1, PosEnd)
  169.     local fnp = xml:find(t2, PosEnd)
  170.     if not stp or not fnp then
  171.         return Vector3.new(), PosEnd
  172.     end
  173.    
  174.     local st = stp+t1:len()
  175.     local fn = fnp-1
  176.    
  177.     local bone = xml:sub(st, fn)
  178.    
  179.     local tstp = xml:find("<transform>", fnp+t2:len())
  180.     local tfnp = xml:find("</transform>", fnp+t2:len())
  181.    
  182.     if not tstp or not tfnp then
  183.         return Vector3.new(), PosEnd, bone
  184.     end
  185.    
  186.     --Current data:
  187.     --Bone name
  188.    
  189.     local function GetTrans(Pos, Pos2, XMLFile)
  190.         local find1, find1End = string.find(XMLFile, "<translation>", tstp+string.len("<transform>"))
  191.         local find2, find2End = string.find(XMLFile, "</translation>", find1)
  192.        
  193.         local AfirstNumberS1 = XMLFile:sub(find1End+1, (string.find(XMLFile, ",", find1End+1)))
  194.         local AfirstNumberS = AfirstNumberS1:sub(1, string.len(AfirstNumberS1)-1)
  195.         local AfirstNumberPosStr = (string.find(XMLFile, ",", find1))
  196.         local AfirstNumberPos = tonumber(AfirstNumberPosStr)
  197.         local AfirstNumber = tonumber(AfirstNumberS)
  198.            
  199.         local AsecondNumberS1 = XMLFile:sub(AfirstNumberPos+1, (string.find(XMLFile, ",", AfirstNumberPos+1))) 
  200.         local AsecondNumberS = AsecondNumberS1:sub(2, string.len(AsecondNumberS1)-1)
  201.         local AsecondNumberPosStr = (string.find(XMLFile, ",", AfirstNumberPos))
  202.         local AsecondNumberPos = tonumber(AsecondNumberPosStr)
  203.         local AsecondNumber = tonumber(AsecondNumberS)
  204.         local AsecondNumberLen = string.len(AsecondNumberS)
  205.            
  206.         local AthirdNumberS1 = XMLFile:sub(AsecondNumberPos+1, (string.find(XMLFile, "</translation>", AsecondNumberPos+1)))
  207.         local AthirdNumberS = AthirdNumberS1:sub(4+AsecondNumberLen, string.len(AthirdNumberS1)-1)
  208.         local AthirdNumber = tonumber(AthirdNumberS)
  209.         return Vector3.new(AfirstNumber, AthirdNumber, AsecondNumber), find2End, Pos
  210.     end
  211.    
  212.     local pos, nposend, npos1 = GetTrans(tstp, tfnp, xml)
  213.    
  214.     --Current data:
  215.     --Translation Vector3
  216.    
  217.     str1 = "<mode>TRIANGLES</mode>"
  218.     local rangeofTris = xml:find(str1, PosEnd)
  219.     local endofTris = xml:find("</collision>", rangeofTris)
  220.     if not rangeofTris or not endofTris then
  221.         return pos, nposend, bone, 0
  222.     end
  223.    
  224.     local seg = xml:sub(rangeofTris+str1:len(), endofTris-1)
  225.    
  226.     local _, tc = string.gsub(seg, "<triangle>", "<triangle>")
  227.    
  228.     return pos, nposend, bone, tc
  229. end
  230.  
  231. function XML:FindTriangleStart(xml)
  232.     local t = "<mode>TRIANGLES</mode>"
  233.     local f = xml:find(t)+t:len()
  234.     local nxml = xml:sub(f)
  235.     return nxml, f
  236. end
  237.  
  238. return XML
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement