Berry animation improve event_manager (#23743)

This commit is contained in:
s-hadinger 2025-08-01 21:57:35 +02:00 committed by GitHub
parent 3ef60018f0
commit 5416890f11
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 9241 additions and 9171 deletions

View File

@ -58,13 +58,6 @@ register_to_animation(event_handler)
import "core/user_functions" as user_functions import "core/user_functions" as user_functions
register_to_animation(user_functions) register_to_animation(user_functions)
def animation_init(m)
import global
global._event_manager = m.event_manager()
return m
end
animation.init = animation_init
# Import effects # Import effects
import "effects/filled" as filled_animation import "effects/filled" as filled_animation
register_to_animation(filled_animation) register_to_animation(filled_animation)
@ -151,6 +144,7 @@ register_to_animation(dsl_runtime)
def animation_global(name, module_name) def animation_global(name, module_name)
import global import global
import introspect import introspect
import animation
# First try to find in animation module # First try to find in animation module
if (module_name != nil) && introspect.contains(animation, module_name) if (module_name != nil) && introspect.contains(animation, module_name)
@ -166,4 +160,24 @@ def animation_global(name, module_name)
end end
animation.global = animation_global animation.global = animation_global
def animation_init(m)
var animation_new = module("animation") # create new non-solidified module
animation_new._ntv = m # keep the native module
animation_new.event_manager = m.EventManager() # create monad for event manager
# create a member function that looks in current module then in solidified
animation_new.member = def (k)
import animation
import introspect
if introspect.contains(animation._ntv, k)
return animation._ntv.(k)
else
return module("undefined")
end
end
return animation_new
end
animation.init = animation_init
return animation return animation

View File

@ -294,10 +294,10 @@ class AnimationEngine
# Event processing methods # Event processing methods
def _process_events(current_time) def _process_events(current_time)
# Process any queued events from the global event manager # Process any queued events from the animation event manager
# This is called during fast_loop to handle events asynchronously # This is called during fast_loop to handle events asynchronously
if global._event_manager != nil if animation.event_manager != nil
global._event_manager._process_queued_events() animation.event_manager._process_queued_events()
end end
end end

View File

@ -218,43 +218,37 @@ end
# Event system functions to monad # Event system functions to monad
def register_event_handler(event_name, callback_func, priority, condition, metadata) def register_event_handler(event_name, callback_func, priority, condition, metadata)
import global return animation.event_manager.register_handler(event_name, callback_func, priority, condition, metadata)
return global._event_manager.register_handler(event_name, callback_func, priority, condition, metadata)
end end
def unregister_event_handler(handler) def unregister_event_handler(handler)
import global animation.event_manager.unregister_handler(handler)
global._event_manager.unregister_handler(handler)
end end
def trigger_event(event_name, event_data) def trigger_event(event_name, event_data)
import global animation.event_manager.trigger_event(event_name, event_data)
global._event_manager.trigger_event(event_name, event_data)
end end
def get_registered_events() def get_registered_events()
return global._event_manager.get_registered_events() return animation.event_manager.get_registered_events()
end end
def get_event_handlers(event_name) def get_event_handlers(event_name)
import global return animation.event_manager.get_handlers(event_name)
return global._event_manager.get_handlers(event_name)
end end
def clear_all_event_handlers() def clear_all_event_handlers()
import global animation.event_manager.clear_all_handlers()
global._event_manager.clear_all_handlers()
end end
def set_event_active(event_name, active) def set_event_active(event_name, active)
import global animation.event_manager.set_event_active(event_name, active)
global._event_manager.set_event_active(event_name, active)
end end
# Export classes # Export classes
return { return {
"event_handler": EventHandler, "event_handler": EventHandler,
"event_manager": EventManager, "EventManager": EventManager,
'register_event_handler': register_event_handler, 'register_event_handler': register_event_handler,
'unregister_event_handler': unregister_event_handler, 'unregister_event_handler': unregister_event_handler,
'trigger_event': trigger_event, 'trigger_event': trigger_event,

File diff suppressed because it is too large Load Diff

View File

@ -39,7 +39,7 @@ end
# Test 2: Event Manager Registration # Test 2: Event Manager Registration
def test_event_manager_registration() def test_event_manager_registration()
var manager = global._event_manager var manager = animation.event_manager
var callback_called = false var callback_called = false
var handler = manager.register_handler("button_press", def(data) callback_called = true end, 0, nil, nil) var handler = manager.register_handler("button_press", def(data) callback_called = true end, 0, nil, nil)
@ -52,7 +52,7 @@ end
# Test 3: Event Priority Ordering # Test 3: Event Priority Ordering
def test_event_priority_ordering() def test_event_priority_ordering()
var manager = global._event_manager var manager = animation.event_manager
var execution_order = [] var execution_order = []
# Register handlers with different priorities # Register handlers with different priorities
@ -72,7 +72,7 @@ end
# Test 4: Event Conditions # Test 4: Event Conditions
def test_event_conditions() def test_event_conditions()
var manager = global._event_manager var manager = animation.event_manager
var callback_called = false var callback_called = false
# Register handler with condition # Register handler with condition
@ -92,7 +92,7 @@ end
# Test 5: Global Event Handlers # Test 5: Global Event Handlers
def test_global_event_handlers() def test_global_event_handlers()
var manager = global._event_manager var manager = animation.event_manager
var global_events = [] var global_events = []
# Register global handler # Register global handler
@ -157,7 +157,7 @@ end
# Test 9: Event Handler Deactivation # Test 9: Event Handler Deactivation
def test_event_handler_deactivation() def test_event_handler_deactivation()
var manager = global._event_manager var manager = animation.event_manager
var callback_called = false var callback_called = false
var handler = manager.register_handler("deactivation_test", def(data) callback_called = true end, 0, nil, nil) var handler = manager.register_handler("deactivation_test", def(data) callback_called = true end, 0, nil, nil)
@ -173,7 +173,7 @@ end
# Test 10: Event Queue Processing # Test 10: Event Queue Processing
def test_event_queue_processing() def test_event_queue_processing()
var manager = global._event_manager var manager = animation.event_manager
var events_processed = [] var events_processed = []
# Register handler that triggers another event (tests queue) # Register handler that triggers another event (tests queue)
@ -208,7 +208,7 @@ end
# Test 12: Event Metadata Handling # Test 12: Event Metadata Handling
def test_event_metadata_handling() def test_event_metadata_handling()
var manager = global._event_manager var manager = animation.event_manager
var received_metadata = nil var received_metadata = nil
var metadata = {"interval": 1000, "repeat": true} var metadata = {"interval": 1000, "repeat": true}