add gs
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
--[[
|
||||
Prevents conflicts when multiple CoreScript subsystems are trying to override
|
||||
the mouse cursor at the same time. This uses a stack approach similar to how
|
||||
ContextActionService works. The most recent override takes precedence, and any
|
||||
previously set overrides will remain on the stack beneath it until removed.
|
||||
|
||||
Example usage:
|
||||
local MOUSE_OVERRIDE_KEY = Symbol.named("PurchasePrompt")
|
||||
MouseIconOverrideService.push(MOUSE_OVERRIDE_KEY, Enum.OverrideMouseIconBehavior.ForceShow)
|
||||
MouseIconOverrideService.pop(MOUSE_OVERRIDE_KEY)
|
||||
]]
|
||||
|
||||
local UserInputService = game:GetService("UserInputService")
|
||||
|
||||
local FFlagUseCursorOverrideManager2 = game:DefineFastFlag("UseCursorOverrideManager2", false)
|
||||
|
||||
local cursorOverrideStack = {}
|
||||
|
||||
local function update()
|
||||
local activeOverride = cursorOverrideStack[#cursorOverrideStack]
|
||||
if activeOverride then
|
||||
UserInputService.OverrideMouseIconBehavior = activeOverride[2]
|
||||
else
|
||||
UserInputService.OverrideMouseIconBehavior = Enum.OverrideMouseIconBehavior.None
|
||||
end
|
||||
end
|
||||
|
||||
return {
|
||||
push = function(key, behavior)
|
||||
if not FFlagUseCursorOverrideManager2 then
|
||||
UserInputService.OverrideMouseIconBehavior = behavior
|
||||
return
|
||||
end
|
||||
|
||||
assert(type(key) == "userdata" or type(key) == "string")
|
||||
assert(typeof(behavior) == "EnumItem")
|
||||
assert(behavior.EnumType == Enum.OverrideMouseIconBehavior)
|
||||
|
||||
for idx, entry in ipairs(cursorOverrideStack) do
|
||||
if entry[1] == key then
|
||||
table.remove(cursorOverrideStack, idx)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(cursorOverrideStack, {key, behavior})
|
||||
update()
|
||||
end,
|
||||
pop = function(key)
|
||||
if not FFlagUseCursorOverrideManager2 then
|
||||
UserInputService.OverrideMouseIconBehavior = Enum.OverrideMouseIconBehavior.None
|
||||
return
|
||||
end
|
||||
|
||||
assert(type(key) == "userdata" or type(key) == "string")
|
||||
|
||||
local idx
|
||||
|
||||
for testIdx, entry in ipairs(cursorOverrideStack) do
|
||||
if entry[1] == key then
|
||||
idx = testIdx
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
assert(idx, "No cursor override named " .. tostring(key))
|
||||
|
||||
table.remove(cursorOverrideStack, idx)
|
||||
update()
|
||||
end,
|
||||
}
|
||||
Reference in New Issue
Block a user