Super-Nostalgia-Zone/UI/ZoomControls/ZoomControls.client.lua

123 lines
2.6 KiB
Lua

local UserInputService = game:GetService("UserInputService")
local GuiService = game:GetService("GuiService")
if GuiService:IsTenFootInterface() then
return
end
local IS_TOUCH = UserInputService.TouchEnabled
local player = game.Players.LocalPlayer
local playerScripts = player:WaitForChild("PlayerScripts")
local passCameraEvent = playerScripts:WaitForChild("PassCameraEvent")
local self = script.Parent
local zoomIn = self:WaitForChild("ZoomIn")
local zoomLock = zoomIn:WaitForChild("Lock")
local firstPersonIndicator = self:WaitForChild("FirstPersonIndicator")
local yellow = Color3.new(1, 1, 0)
local white = Color3.new(1, 1, 1)
local cyan = Color3.new(0, 1, 1)
local c = workspace.CurrentCamera
local currentlyDown
local function updateCameraStatus()
local dist = (c.Focus.p - c.CFrame.p).magnitude
firstPersonIndicator.Visible = (dist <= 1.5)
zoomLock.Visible = (dist <= 1)
end
local function setupButton(btn)
local isDown = false
local inBounds = false
local lock = btn:FindFirstChild("Lock")
local mouse = player:GetMouse()
btn.MouseEnter:connect(function ()
if (lock == nil or not lock.Visible) then
if (currentlyDown == nil or currentlyDown == btn) then
inBounds = true
if isDown then
btn.ImageColor3 = yellow
else
btn.ImageColor3 = cyan
end
end
end
end)
btn.MouseLeave:connect(function ()
if (lock == nil or not lock.Visible) then
inBounds = false
if isDown then
btn.ImageColor3 = cyan
else
btn.ImageColor3 = white
end
end
end)
btn.MouseButton1Down:connect(function ()
if (lock == nil or not lock.Visible) then
isDown = true
currentlyDown = btn
btn.ImageColor3 = yellow
end
end)
btn.MouseButton1Click:connect(function ()
if (lock == nil or not lock.Visible) then
isDown = false
currentlyDown = nil
inBounds = false
passCameraEvent:Fire(btn.Name)
if IS_TOUCH then
btn.ImageColor3 = white
end
end
end)
mouse.Button1Up:Connect(function ()
if (lock == nil or not lock.Visible) then
if isDown then
isDown = false
currentlyDown = nil
if inBounds then
inBounds = false
passCameraEvent:Fire(btn.Name)
end
end
end
btn.ImageColor3 = white
end)
if lock then
lock.Changed:Connect(function ()
if lock.Visible then
btn.ImageColor3 = white
isDown = false
if currentlyDown == btn then
currentlyDown = nil
end
end
end)
end
if IS_TOUCH then
btn.Modal = true
end
end
for _,v in pairs(script.Parent:GetChildren()) do
if v:IsA("ImageButton") then
setupButton(v)
end
end
c.Changed:connect(updateCameraStatus)