@@ -66,8 +66,8 @@ void GdSceneSynchronizer::_bind_methods() {
6666 ClassDB::bind_method (D_METHOD (" get_frames_per_seconds" ), &GdSceneSynchronizer::get_frames_per_seconds);
6767
6868 ClassDB::bind_method (D_METHOD (" register_node" , " node" ), &GdSceneSynchronizer::register_node_gdscript);
69- ClassDB::bind_method (D_METHOD (" register_node_as_controller_by_peer" , " node" , " peer" ), &GdSceneSynchronizer::register_node_as_controller_by_peer);
7069 ClassDB::bind_method (D_METHOD (" unregister_node" , " node" ), &GdSceneSynchronizer::unregister_node);
70+ ClassDB::bind_method (D_METHOD (" setup_controller" , " node" , " peer" , " collect_input_func" , " count_input_size_func" , " are_inputs_different_func" , " proces_func" ), &GdSceneSynchronizer::setup_controller);
7171 ClassDB::bind_method (D_METHOD (" get_node_id" , " node" ), &GdSceneSynchronizer::get_node_id);
7272 ClassDB::bind_method (D_METHOD (" get_node_from_id" , " id" , " expected" ), &GdSceneSynchronizer::get_node_from_id, DEFVAL (true ));
7373
@@ -468,8 +468,39 @@ uint32_t GdSceneSynchronizer::register_node_gdscript(Node *p_node) {
468468 return id.id ;
469469}
470470
471- void GdSceneSynchronizer::register_node_as_controller_by_peer (Node *p_node, int p_peer) {
472- scene_synchronizer.register_app_object_as_controlled_by_peer (scene_synchronizer.find_object_local_id (scene_synchronizer.to_handle (p_node)), p_peer);
471+ void GdSceneSynchronizer::setup_controller (
472+ Node *p_node,
473+ int p_peer,
474+ const Callable &p_collect_input_func,
475+ const Callable &p_count_input_size_func,
476+ const Callable &p_are_inputs_different_func,
477+ const Callable &p_process_func) {
478+ scene_synchronizer.setup_controller (
479+ scene_synchronizer.find_object_local_id (scene_synchronizer.to_handle (p_node)),
480+ p_peer,
481+ [p_collect_input_func](double p_delta, DataBuffer &r_collect_input) -> void {
482+ Array arguments;
483+ arguments.push_back (p_delta);
484+ arguments.push_back (&r_collect_input);
485+ p_collect_input_func.callv (arguments);
486+ },
487+ [p_count_input_size_func](DataBuffer &p_collect_input) -> int {
488+ Array arguments;
489+ arguments.push_back (&p_collect_input);
490+ return p_count_input_size_func.callv (arguments);
491+ },
492+ [p_are_inputs_different_func](DataBuffer &p_collect_input_A, DataBuffer &p_collect_input_B) -> bool {
493+ Array arguments;
494+ arguments.push_back (&p_collect_input_A);
495+ arguments.push_back (&p_collect_input_B);
496+ return p_are_inputs_different_func.callv (arguments);
497+ },
498+ [p_process_func](double p_delta, DataBuffer &p_collect_input) -> void {
499+ Array arguments;
500+ arguments.push_back (p_delta);
501+ arguments.push_back (&p_collect_input);
502+ p_process_func.callv (arguments);
503+ });
473504}
474505
475506void GdSceneSynchronizer::unregister_node (Node *p_node) {
0 commit comments