64 lines
1.6 KiB
Lua
64 lines
1.6 KiB
Lua
local PlayersService = game:GetService('Players')
|
|
local RootCameraCreator = require(script.Parent)
|
|
|
|
local ZERO_VECTOR2 = Vector2.new(0, 0)
|
|
|
|
local CFrame_new = CFrame.new
|
|
|
|
local function CreateWatchCamera()
|
|
local module = RootCameraCreator()
|
|
module.PanEnabled = false
|
|
|
|
local lastUpdate = tick()
|
|
function module:Update()
|
|
local now = tick()
|
|
|
|
local camera = workspace.CurrentCamera
|
|
local player = PlayersService.LocalPlayer
|
|
|
|
if lastUpdate == nil or now - lastUpdate > 1 then
|
|
module:ResetCameraLook()
|
|
self.LastZoom = nil
|
|
end
|
|
|
|
|
|
local subjectPosition = self:GetSubjectPosition()
|
|
if subjectPosition and player and camera then
|
|
local cameraLook = nil
|
|
|
|
local humanoid = self:GetHumanoid()
|
|
if humanoid and humanoid.Torso then
|
|
-- TODO: let the paging buttons move the camera but not the mouse/touch
|
|
-- currently neither do
|
|
local diffVector = subjectPosition - camera.CFrame.p
|
|
cameraLook = diffVector.unit
|
|
|
|
if self.LastZoom and self.LastZoom == self:GetCameraZoom() then
|
|
-- Don't clobber the zoom if they zoomed the camera
|
|
local zoom = diffVector.magnitude
|
|
self:ZoomCamera(zoom)
|
|
end
|
|
end
|
|
|
|
local zoom = self:GetCameraZoom()
|
|
if zoom <= 0 then
|
|
zoom = 0.1
|
|
end
|
|
|
|
local newLookVector = self:RotateVector(cameraLook or self:GetCameraLook(), self.RotateInput)
|
|
self.RotateInput = ZERO_VECTOR2
|
|
local newFocus = CFrame_new(subjectPosition)
|
|
local newCamCFrame = CFrame_new(newFocus.p - (zoom * newLookVector), subjectPosition)
|
|
|
|
camera.Focus = newFocus
|
|
camera.CFrame = newCamCFrame
|
|
self.LastZoom = zoom
|
|
end
|
|
lastUpdate = now
|
|
end
|
|
|
|
return module
|
|
end
|
|
|
|
return CreateWatchCamera
|