This is really cool and I like all the utilitarian features it provides! But there were some issues with the source code that I found that you might want to change:
-- Line 507
local isBroadcasted = self.IsBroadcasted
isBroadcasted = true
This will only change local isBroadcasted to true, not self.IsBroadcasted causing cancelBroadcast to fail.
-- Line 518
task.spawn(function()
animateHint(self)
end)
Use task.defer instead of task.spawn; deferring the thread schedules it to run on the next resumption cycle while spawn runs it immediately. There are very few cases where you would want to run a thread immediately, but animating a hint is not one of them.
-- Line 499
if debounceEnabled then
if tick() - lastHint < debounceTime then return end
end
lastHint = tick()
tick is on the road to deprecation. time would be a more future-proof global for this.
-- Line 531
if isBroadcasted then
broadcastCancelled:Fire()
cancelBroadcast(self)
cancelBroadcast yields but is not ran in a separate thread, causing the running thread to yield as well.
-- Line 137
local borderStroke = label:FindFrstChild("BorderStroke")
Misspelling causing cancelBroadcast break.
My only other issue I have is all the returned methods are in camelCase instead of LuaU-Standard PascalCase, but that’s totally just a nitpick thing with me and I can just fork it anytime.
I have a permanent hint set at the bottom of the screen. When another hint is broadcasted, it gets pushed up. When that other hint disappears, the permanent hint stays pushed up. Is there any way to bring it back down to the bottom?
Oh I see, so you want to have clickable hints. Will do; also the setHotbarOffset function will set the offset for you. I could figure how to do it automatically.
You can now set hints to be clickable, they will act just as buttons act if you set setCanClick(enabled) to true. You can then use the Hint.Clicked event to detect when it was clicked.