85 lines
2.5 KiB
Lua
85 lines
2.5 KiB
Lua
local Players = game:GetService("Players")
|
|
local UserInputService = game:GetService("UserInputService")
|
|
local GameSettings = UserSettings():GetService("UserGameSettings")
|
|
|
|
local LocalPlayer = Players.LocalPlayer
|
|
if not LocalPlayer then
|
|
Players:GetPropertyChangedSignal("LocalPlayer"):Wait()
|
|
LocalPlayer = Players.LocalPlayer
|
|
end
|
|
|
|
local Mouse = LocalPlayer:GetMouse()
|
|
|
|
local Input = require(script.Parent:WaitForChild("CameraInput"))
|
|
local CameraUI = require(script.Parent:WaitForChild("CameraUI"))
|
|
|
|
local lastTogglePan = false
|
|
local lastTogglePanChange = tick()
|
|
|
|
local CROSS_MOUSE_ICON = "rbxasset://textures/Cursors/CrossMouseIcon.png"
|
|
|
|
local lockStateDirty = false
|
|
local wasTogglePanOnTheLastTimeYouWentIntoFirstPerson = false
|
|
local lastFirstPerson = false
|
|
|
|
CameraUI.setCameraModeToastEnabled(false)
|
|
|
|
return function(isFirstPerson)
|
|
local togglePan = Input.getTogglePan()
|
|
local toastTimeout = 3
|
|
|
|
if isFirstPerson and togglePan ~= lastTogglePan then
|
|
lockStateDirty = true
|
|
end
|
|
|
|
if lastTogglePan ~= togglePan or tick() - lastTogglePanChange > toastTimeout then
|
|
local doShow = togglePan and tick() - lastTogglePanChange < toastTimeout
|
|
|
|
CameraUI.setCameraModeToastOpen(doShow)
|
|
|
|
if togglePan then
|
|
lockStateDirty = false
|
|
end
|
|
lastTogglePanChange = tick()
|
|
lastTogglePan = togglePan
|
|
end
|
|
|
|
if isFirstPerson ~= lastFirstPerson then
|
|
if isFirstPerson then
|
|
wasTogglePanOnTheLastTimeYouWentIntoFirstPerson = Input.getTogglePan()
|
|
Input.setTogglePan(true)
|
|
elseif not lockStateDirty then
|
|
Input.setTogglePan(wasTogglePanOnTheLastTimeYouWentIntoFirstPerson)
|
|
end
|
|
end
|
|
|
|
if isFirstPerson then
|
|
if Input.getTogglePan() then
|
|
Mouse.Icon = CROSS_MOUSE_ICON
|
|
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
|
|
GameSettings.RotationType = Enum.RotationType.CameraRelative
|
|
else
|
|
Mouse.Icon = ""
|
|
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
|
|
GameSettings.RotationType = Enum.RotationType.CameraRelative
|
|
end
|
|
|
|
elseif Input.getTogglePan() then
|
|
Mouse.Icon = CROSS_MOUSE_ICON
|
|
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
|
|
GameSettings.RotationType = Enum.RotationType.MovementRelative
|
|
|
|
elseif Input.getHoldPan() then
|
|
Mouse.Icon = ""
|
|
UserInputService.MouseBehavior = Enum.MouseBehavior.LockCurrentPosition
|
|
GameSettings.RotationType = Enum.RotationType.MovementRelative
|
|
|
|
else
|
|
Mouse.Icon = ""
|
|
UserInputService.MouseBehavior = Enum.MouseBehavior.Default
|
|
GameSettings.RotationType = Enum.RotationType.MovementRelative
|
|
end
|
|
|
|
lastFirstPerson = isFirstPerson
|
|
end
|