123 lines
2.6 KiB
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) |