Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- services
- local runService = game:GetService("RunService")
- local players = game:GetService("Players")
- local rs = game:GetService("ReplicatedStorage")
- local TweenService = game:GetService("TweenService")
- -- Player stuff
- local localPlr = players.LocalPlayer
- local mouse = localPlr:GetMouse()
- local isHolding = false
- -- Camera Constants
- local camera = game.Workspace.CurrentCamera
- local cameraAnchor = rs.clientEssentials.cameraAnchor:Clone()
- local cameraPanning = rs.clientEssentials.cameraPanner:Clone()
- -- Camera Variables
- local cameraDistance = 20
- -- Camera properties
- camera.CameraType = Enum.CameraType.Scriptable
- camera.CameraSubject = cameraAnchor
- -- Panning Settings
- local mouseIcon = ""
- local panningRadius = 12
- mouse.Icon = mouseIcon
- local function CameraTransition(target, isSmooth)
- camera.CameraSubject = target
- local newAnchorCFrame = CFrame.new(0, cameraDistance, 0)
- local targetCFrame = target.CFrame:ToWorldSpace(newAnchorCFrame) * CFrame.Angles(math.rad(-90), 0, 0)
- if isSmooth then
- local seconds = .3
- local tweenInfo = TweenInfo.new(seconds, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
- local goal = { CFrame = targetCFrame }
- local tween = TweenService:Create(camera, tweenInfo, goal)
- tween:Play() -- Tween/Lerp does pretty much everything
- else
- camera.CFrame = target.CFrame:ToWorldSpace(newAnchorCFrame)* CFrame.Angles(math.rad(-90), 0, 0)
- end
- end
- runService.RenderStepped:Connect(function(deltaTime)
- -- Handles Camera Parts
- local chr = localPlr.Character or localPlr.CharacterAdded:Wait()
- local anchor = chr:WaitForChild("cameraAnchor")
- local panner = chr:WaitForChild("cameraPanner")
- anchor.Position = chr.HumanoidRootPart.Position
- panner.Position = chr.HumanoidRootPart.Position
- -- Selection
- if chr and not isHolding then
- CameraTransition(anchor, false) -- Transition to cameraw
- --camera.CFrame = anchor.CFrame:ToWorldSpace(newAnchorCFrame) * CFrame.Angles(math.rad(-90), 0, 0)
- elseif chr and isHolding then
- -- Handles Panner Movement
- local pannerPosition = panner.Position
- local mousePosition = mouse.Hit
- panner.Position = Vector3.new(mousePosition.X, pannerPosition.Y, mousePosition.Z)
- local pannerOffset = panner.CFrame.Position - anchor.CFrame.Position
- if pannerOffset.Magnitude > panningRadius then
- panner.CFrame = anchor.CFrame * CFrame.new(pannerOffset.Unit * panningRadius)
- end
- CameraTransition(panner, true)
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment