AchieveStuffs

teardown.lua

Oct 4th, 2022
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.69 KB | None | 0 0
  1. ---------------------------------------------------------------------------------------------------------------------------
  2. -- XmlNode
  3. ---------------------------------------------------------------------------------------------------------------------------
  4.  
  5. local function XmlNode(class: string)
  6.     local node = Instance.new("Configuration")
  7.     node.Name = class
  8.    
  9.     return function (attributes)
  10.         if next(attributes) then
  11.             for key, value in pairs(attributes) do
  12.                 if typeof(value) == "Instance" then
  13.                     value.Parent = node
  14.                 else
  15.                     node:SetAttribute(key, value)
  16.                 end
  17.             end
  18.         end
  19.        
  20.         return node
  21.     end
  22. end
  23.  
  24. ---------------------------------------------------------------------------------------------------------------------------
  25. -- XmlWriter
  26. ---------------------------------------------------------------------------------------------------------------------------
  27.  
  28. local XmlWriter = {}
  29. XmlWriter.__index = XmlWriter
  30.  
  31. function XmlWriter.new()
  32.     local writer = { Buffer = "" }
  33.     return setmetatable(writer, XmlWriter)
  34. end
  35.  
  36. function XmlWriter:__tostring()
  37.     return self.Buffer
  38. end
  39.  
  40. function XmlWriter:Write(str: string, ...)
  41.     if select('#', ...) > 0 then
  42.         str = str:format(...)
  43.     end
  44.    
  45.     self.Buffer ..= str
  46. end
  47.  
  48. function XmlWriter:NextLine()
  49.     self:Write("\r\n")
  50. end
  51.  
  52. function XmlWriter:WriteLine(str: string, ...)
  53.     self:Write(str, ...)
  54.     self:NextLine()
  55. end
  56.  
  57. function XmlWriter:WriteAttribute(key: string, value: any)
  58.     local valueType = typeof(value)
  59.     self:Write(' %s="', key)
  60.    
  61.     if valueType == "Color3" then
  62.         local r, g, b = value.R, value.G, value.B
  63.         self:Write("%.4f %.4f %.4f", r, g, b)
  64.     elseif valueType == "Vector3" then
  65.         local x, y, z = value.X, value.Y, value.Z
  66.         self:Write("%.2f %.2f %.2f", x, y, z)
  67.     else
  68.         local str = tostring(value)
  69.         self:Write(str)
  70.     end
  71.    
  72.     self:Write('"')
  73. end
  74.  
  75. function XmlWriter:WriteNode(node: Instance, stack: number?)
  76.     local attributes = node:GetAttributes()
  77.     local children = node:GetChildren()
  78.     local stack = stack or 0
  79.    
  80.     for i = 1, stack do
  81.         self:Write('\t')
  82.     end
  83.    
  84.     self:Write('<')
  85.     self:Write(node.Name)
  86.    
  87.     if next(attributes) then
  88.         for key, value in pairs(attributes) do
  89.             self:WriteAttribute(key, value)
  90.         end
  91.     end
  92.  
  93.     if next(children) then
  94.         self:Write('>')
  95.         self:NextLine()
  96.  
  97.         for i, child in ipairs(children) do
  98.             self:WriteNode(child, stack + 1)
  99.         end
  100.  
  101.         self:Write("</%s>", node.Name)
  102.     else
  103.         self:Write("/>")
  104.     end
  105.  
  106.     self:NextLine()
  107. end
  108.  
  109. ---------------------------------------------------------------------------------------------------------------------------
  110. -- Generate main.xml
  111. ---------------------------------------------------------------------------------------------------------------------------
  112.  
  113. local VOXEL_SIZE = 10
  114. local MAP_SCALE = 0.5
  115.  
  116. local scene = XmlNode "scene"
  117. {
  118.     version = "0.6.0";
  119.     shadowVolume = Vector3.new(200, 50, 200);
  120.    
  121.     XmlNode "environment" { template = "sunset"  };
  122.     XmlNode "script"      { file = "main.lua"    };
  123.     XmlNode "script"      { file = "sandbox.lua" };
  124. }
  125.  
  126. for _,part in pairs(workspace:GetDescendants()) do
  127.     if not part:IsA("Part") then
  128.         continue
  129.     end
  130.  
  131.     local cf = part.CFrame
  132.     local size = part.Size
  133.  
  134.     local rot = part.Rotation
  135.     local pos = cf * CFrame.new(-size / 2)
  136.    
  137.     pos = pos.Position * MAP_SCALE
  138.     size = (size * VOXEL_SIZE) * MAP_SCALE
  139.    
  140.     local node = XmlNode "voxbox"
  141.     {
  142.         pos = pos;
  143.         rot = rot;
  144.         size = size;
  145.        
  146.         color = part.Color;
  147.         material = "plaster";
  148.         tags = "nocull";
  149.     }
  150.    
  151.     node.Parent = scene
  152. end
  153.  
  154. local main = XmlWriter.new()
  155. main:WriteNode(scene)
  156.  
  157. print(main)
  158.  
  159. ---------------------------------------------------------------------------------------------------------------------------
Add Comment
Please, Sign In to add comment