## Represents a Godot [Signal] as an observable sequence static func from_godot_signal_( sig : Signal, scheduler : SchedulerBase = null ) -> Observable: var subscribe = func( observer : ObserverBase, scheduler_ : SchedulerBase = null ) -> DisposableBase: var _scheduler : SchedulerBase = null if scheduler != null: _scheduler = scheduler elif scheduler_ != null: _scheduler = scheduler_ else: _scheduler = GodotSignalScheduler.singleton() var obj = instance_from_id(sig.get_object_id()) if obj == null: GDRx.raise(NullReferenceError.new()) return Disposable.new() var n_args = -1 var sig_lst = obj.get_signal_list() for dict in sig_lst: if dict["name"] == sig.get_name(): n_args = dict["args"].size() break var action : Callable match n_args: 0: action = func(): observer.on_next(Tuple.new([])) 1: action = func(arg1): if arg1 is Array: observer.on_next(Tuple.new(arg1)) else: observer.on_next(arg1) 2: action = func(arg1, arg2): observer.on_next(Tuple.new([arg1, arg2])) 3: action = func(arg1, arg2, arg3): observer.on_next(Tuple.new([arg1, arg2, arg3])) 4: action = func(arg1, arg2, arg3, arg4): observer.on_next(Tuple.new([arg1, arg2, arg3, arg4])) 5: action = func(arg1, arg2, arg3, arg4, arg5): observer.on_next(Tuple.new([arg1, arg2, arg3, arg4, arg5])) 6: action = func(arg1, arg2, arg3, arg4, arg5, arg6): observer.on_next(Tuple.new([arg1, arg2, arg3, arg4, arg5, arg6])) 7: action = func(arg1, arg2, arg3, arg4, arg5, arg6, arg7): observer.on_next(Tuple.new([arg1, arg2, arg3, arg4, arg5, arg6, arg7])) 8: action = func(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8): observer.on_next(Tuple.new([arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8])) _: GDRx.raise(TooManyArgumentsError.new( "Only up to 8 signal parameters supported! Use lists instead!")) return Disposable.new() if not _scheduler is GodotSignalScheduler: _scheduler = GodotSignalScheduler.singleton() var godot_signal_scheduler : GodotSignalScheduler = _scheduler return godot_signal_scheduler.schedule_signal(sig, n_args, action) return Observable.new(subscribe)