• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# Reflect

AndrewTheMaster Jul 3rd, 2017 (edited) 60 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. Player = game:GetService("Players").andrewengen1
2. Button1Down = false
3.
4.
5. function CalculateReflection(PointA, PointB, Hit, Distance)
6.     local Offset = Hit.CFrame:toObjectSpace(CFrame.new(PointB)).p
7.     local Face = nil
8.     local Largest = "x"
9.     if math.abs(Offset.y / Hit.Size.y) > math.abs(Offset.x / Hit.Size.x) then
10.         Largest = "y"
11.     end
12.     if math.abs(Offset.z / Hit.Size.z) > math.abs(Offset[Largest] / Hit.Size[Largest]) then
13.         Largest = "z"
14.     end
15.     if Offset[Largest] < 0 then
16.         if Largest == "x" then
17.             Face = "Left"
18.         elseif Largest == "y" then
19.             Face = "Bottom"
20.         elseif Largest == "z" then
21.             Face = "Back"
22.         end
23.     else
24.         if Largest == "x" then
25.             Face = "Right"
26.         elseif Largest == "y" then
27.             Face = "Top"
28.         elseif Largest == "z" then
29.             Face = "Front"
30.         end
31.     end
32.     local X, Y = CFrame.new(PointA, PointB):toEulerAnglesXYZ() --Vector3.new(Hit.CFrame:toEulerAnglesXYZ()).y???
33.     if Face == Enum.NormalId.Left.Name or Face == Enum.NormalId.Right.Name then
34.         return CFrame.new(PointB) * CFrame.fromEulerAnglesXYZ(X + math.rad(180), Y, 0)
35.     elseif Face == Enum.NormalId.Bottom.Name or Face == Enum.NormalId.Top.Name then
36.         return CFrame.new(PointB) * CFrame.fromEulerAnglesXYZ(-X + math.rad(180), -Y, 0)
37.     elseif Face == Enum.NormalId.Front.Name or Face == Enum.NormalId.Back.Name then
38.         return CFrame.new(PointB) * CFrame.fromEulerAnglesXYZ(-X, -Y, 0)
39.     end
40. end
41.
42.
43. function onSelected(Mouse)
44.     Mouse.Button1Down:connect(function()
45.         Button1Down = true
46.         while Button1Down do
47.             for _, Part in pairs(Player.Character:GetChildren()) do
48.                 if Part.Name == "RayPart" then
49.                     Part:Remove()
50.                 end
51.             end
52.             local PointA = Player.Character.Torso.CFrame.p
53.             local PointB = Mouse.Hit.p
54.             for i = 1, 50 do
55.                 local Ray = Ray.new((CFrame.new(PointA, PointB) * CFrame.new(0, 0, -0.1)).p, (PointB - PointA).unit * 300)
56.                 local Hit, Position = game.Workspace:FindPartOnRay(Ray, Player.Character)
57.                 local RayPart = Instance.new("Part", Player.Character)
58.                 RayPart.Name = "RayPart"
59.                 RayPart.BrickColor = BrickColor.new("Bright red")
60.                 RayPart.Transparency = 0.5
61.                 RayPart.Anchored = true
62.                 RayPart.CanCollide = false
63.                 RayPart.TopSurface = Enum.SurfaceType.Smooth
64.                 RayPart.BottomSurface = Enum.SurfaceType.Smooth
65.                 RayPart.FormFactor = Enum.FormFactor.Custom
66.                 local Distance = (Position - PointA).magnitude
67.                 RayPart.Size = Vector3.new(0.2, 0.2, Distance)
68.                 RayPart.CFrame = CFrame.new(PointA, Position) * CFrame.new(0, 0, -Distance / 2)
69.                 if Hit ~= nil then
70.                     PointB = (CalculateReflection(PointA, Position, Hit, Distance) * CFrame.new(0, 0, 1)).p
71.                     PointA = Position
72.                 else
73.                     break
74.                 end
75.             end
76.             wait()
77.         end
78.     end)
79.     Mouse.Button1Up:connect(function()
80.         Button1Down = false
81.     end)
82. end
83.
84.
85. if script.Parent.ClassName ~= "HopperBin" then
86.     if Player == nil then print("Error: Player not found!") return end
87.     Tool = Instance.new("HopperBin")
88.     Tool.Name = "Laser"
89.     Tool.Parent = Player.Backpack
90.     script.Name = "Main"
91.     script.Parent = Tool
92. elseif script.Parent.ClassName == "HopperBin" then
93.     Player = script.Parent.Parent.Parent
94.     script.Parent.Selected:connect(onSelected)
95.     --script.Parent.Deselected:connect(onDeselected)
96. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.
Not a member of Pastebin yet?