@@ -374,4 +374,62 @@ function basalt.getAPI(name)
374374 return elementManager .getAPI (name )
375375end
376376
377+ --- Registers a callback function for a specific event
378+ --- @shortDescription Registers an event callback
379+ --- @param eventName string The name of the event to listen for (e.g. " mouse_click" , " key" , " timer" )
380+ --- @param callback function The callback function to execute when the event occurs
381+ --- @usage basalt.onEvent("mouse_click", function(button, x, y) basalt.debug("Clicked at", x, y) end)
382+ function basalt .onEvent (eventName , callback )
383+ expect (1 , eventName , " string" )
384+ expect (2 , callback , " function" )
385+
386+ if not basalt ._events [eventName ] then
387+ basalt ._events [eventName ] = {}
388+ end
389+
390+ table.insert (basalt ._events [eventName ], callback )
391+ end
392+
393+ --- Removes a callback function for a specific event
394+ --- @shortDescription Removes an event callback
395+ --- @param eventName string The name of the event
396+ --- @param callback function The callback function to remove
397+ --- @return boolean success Whether the callback was found and removed
398+ function basalt .removeEvent (eventName , callback )
399+ expect (1 , eventName , " string" )
400+ expect (2 , callback , " function" )
401+
402+ if not basalt ._events [eventName ] then
403+ return false
404+ end
405+
406+ for i , registeredCallback in ipairs (basalt ._events [eventName ]) do
407+ if registeredCallback == callback then
408+ table.remove (basalt ._events [eventName ], i )
409+ return true
410+ end
411+ end
412+
413+ return false
414+ end
415+
416+ --- Triggers a custom event and calls all registered callbacks
417+ --- @shortDescription Triggers a custom event
418+ --- @param eventName string The name of the event to trigger
419+ --- @vararg any Arguments to pass to the event callbacks
420+ --- @usage basalt.triggerEvent("custom_event", "data1", "data2")
421+ function basalt .triggerEvent (eventName , ...)
422+ expect (1 , eventName , " string" )
423+
424+ if basalt ._events [eventName ] then
425+ for _ , callback in ipairs (basalt ._events [eventName ]) do
426+ local ok , err = pcall (callback , ... )
427+ if not ok then
428+ errorManager .header = " Basalt Event Callback Error"
429+ errorManager .error (" Error in event callback for '" .. eventName .. " ': " .. tostring (err ))
430+ end
431+ end
432+ end
433+ end
434+
377435return basalt
0 commit comments