Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Original Creator: jobro13
- repeat wait(1/60) until game.Players.LocalPlayer.Character and game.Workspace.CurrentCamera
- repeat wait(1/60) until game.Players.LocalPlayer.Character:FindFirstChild("Torso")
- local Camera = game.Workspace.CurrentCamera
- local Torso = game.Players.LocalPlayer.Character.Torso
- Camera.CameraType = "Scriptable"
- Camera.CameraSubject = nil
- repeat wait() until game.Players.LocalPlayer:FindFirstChild("PlayerGui")
- local Player = game.Players.LocalPlayer
- local size = Instance.new("ScreenGui", Player.PlayerGui)
- size.Name = "Size"
- local TMaxHeight = 200
- local TMinHeight = 10
- local TStep = 2.5
- local THeight = 10
- local Keys = {}
- local Mouse = Player:GetMouse()
- local mouse = Mouse
- local dir = 0
- -- USED KEYS SO FAR
- -- E,Q,R,X
- local Keys = {}
- local Locked = false
- local MouseTrack = false
- function GetRotation(Unit)
- --// Cosine in radian circle: y/x so angle alpha is cos-1(y/x) x=1
- --// Problem here is the circle itself as they have 2 solutions.
- local AbZ, AbX = math.abs(Unit.z), math.abs(Unit.x)
- local Real = math.atan(AbX/AbZ)
- --// ^ugly, super, super, ugly...
- --// Now find the quadrant
- local Plus = 0
- --// Cases are Z and X
- if Unit.z >= 0 and Unit.x >= 0 then
- --Plus = 0
- elseif Unit.z >= 0 and Unit.x < 0 then
- Plus = (0.5 * math.pi)
- Real = ((math.pi *1.5) - Real)
- elseif Unit.z < 0 and Unit.x < 0 then
- Plus = math.pi
- elseif Unit.z < 0 and Unit.x >= 0 then
- Plus = math.pi * 1.5
- Real = ((math.pi * 1.5) - Real)
- end
- return Real + Plus
- end
- function Update()
- if not Locked and not Button2Down then
- if Keys["e"] then -- turn right
- dir = dir + 1
- end
- if Keys["q"] then -- turn left
- dir = dir - 1
- end
- if Keys["x"] then
- dir = math.deg(GetRotation(Torso.CFrame.lookVector)) - 90
- end
- end
- if not Button2Down then
- if not Locked and not MouseTrack then
- elseif MouseTrack then
- local Size = Player.PlayerGui.Size.AbsoluteSize.X / 2
- local Pos = mouse.X
- local Diff = 0
- if math.abs(Size - Pos) > Size / 20 then
- local this = ((Size - Pos) / (Size))
- local mul = (this < 0 and -1) or 1
- Diff = math.sqrt(math.abs(this)) * 3 * mul
- end
- dir = dir + Diff
- else
- dir = math.deg(GetRotation(Torso.CFrame.lookVector)) - 90
- end
- end
- local rot = math.rad(dir)
- local x = -math.cos(rot)
- local z = math.sin(rot)
- local New = Vector3.new(x,0,z) / 1000
- local this = (mouse.hit.p - Torso.Position ).unit
- Camera.CoordinateFrame = CFrame.new(Vector3.new(Torso.Position.x, Torso.Position.y + THeight, Torso.Position.z) + New , Torso.Position)
- Camera:SetRoll(math.rad(dir))
- end
- game:GetService("RunService").RenderStepped:connect(function()
- Update()
- end)
- function Zoom(TStep)
- THeight = ((THeight + TStep <= TMaxHeight and THeight + TStep >= TMinHeight) and THeight + TStep) or THeight
- end
- mouse.WheelBackward:connect(function()
- Zoom(TStep)
- end)
- mouse.WheelForward:connect(function() Zoom(-TStep) end)
- mouse.KeyDown:connect(function(key)
- if key == "r" then
- Locked = not Locked
- if Locked then
- MouseTrack = false
- end
- elseif key == "f" then
- MouseTrack = not MouseTrack
- if MouseTrack then
- Locked = false
- end
- end
- Keys[key] = true
- end)
- mouse.KeyUp:connect(function(key)
- Keys[key] = false
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement