Guest User

Mirror script

a guest
Sep 13th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.06 KB | None | 0 0
  1. local function reflectOne(part, mirror, mod)
  2.  
  3.     local x,y,z,r00,r01,r02,r10,r11,r12,r20,r21,r22 = mirror.CFrame:toObjectSpace(part.CFrame):components()
  4.  
  5.     local mpart = part:Clone()
  6.  
  7.     mpart.CFrame = mirror.CFrame:toWorldSpace(CFrame.new(-x,y,z,r00,-r01,-r02,-r10,r11,r12,-r20,r21,r22))
  8.  
  9.     -- CornerWedgeParts are not symmetric so we rotate 90 degrees about
  10.     -- the y axis and exchange the x and z sizes.  (Currently only works
  11.     -- right with integer sized parts since we cannot script other resolutions.)
  12.     if part.className == "CornerWedgePart" then
  13.  
  14.         mpart.Size = Vector3.new(mpart.Size.z, mpart.Size.y, mpart.Size.x)
  15.         mpart.CFrame = mpart.CFrame * CFrame.Angles(0,math.rad(90),0)
  16.     end
  17.  
  18.     mpart.Parent = mod
  19. end
  20.  
  21. ------------------------------------------------------------
  22. -- Clone and reflect all Parts and WedgeParts in everything in this
  23. -- model and recursively all contained models.
  24.  
  25. local function reflectAll( srcModel, mirror, tgtModel )
  26.  
  27.     for k,v in pairs(srcModel:GetChildren()) do
  28.  
  29.         if v.className == "Model" then
  30.             local m2 = Instance.new("Model", tgtModel)
  31.             m2.Name = v.Name
  32.  
  33.             reflectAll(v, mirror, m2)
  34.  
  35.         elseif v:IsA("BasePart")  then
  36.  
  37.             reflectOne(v, mirror, tgtModel)
  38.  
  39.         else
  40.             local np = v:Clone()
  41.             np.Parent = tgtModel
  42.         end
  43.     end
  44. end
  45.  
  46.  
  47. ------------------------------------------------------------
  48. function _G.reflect()
  49.  
  50.     local list = game.Selection:Get()
  51.     if (not list) or (#list ~= 2) then
  52.         error "Select both the model to be reflected and the mirror part"
  53.     end
  54.  
  55.     local model = list[1]
  56.     local mirror = list[2]
  57.  
  58.     if model.className ~= "Model" then
  59.         model,mirror = mirror,model
  60.     end
  61.  
  62.     if (model.className ~= "Model") or (not mirror:IsA("BasePart")) then
  63.         error "Select both the model to be reflected and the mirror part"
  64.     end
  65.  
  66.     local mmodel = Instance.new("Model", model.Parent)
  67.     mmodel.Name = model.Name.."-M"
  68.  
  69.     reflectAll(model, mirror, mmodel)
  70. end
  71.  
  72.  
  73. -------------------------------------------------------------------
  74.  
  75. print("Select the model and mirror part and in command bar type: _G.reflect()")
Add Comment
Please, Sign In to add comment