EvilCocoGame1/addons/reactivex/operators/_takeuntilwithtime.gd
2025-01-11 00:25:52 +01:00

45 lines
1.3 KiB
GDScript

static func take_until_with_time_(
end_time : float,
absolute : bool = false,
scheduler : SchedulerBase = null
) -> Callable:
var take_until_with_time = func(source : Observable) -> Observable:
# """Takes elements for the specified duration until the specified end
# time, using the specified scheduler to run timers.
#
# Examples:
# >>> var res = take_until_with_time.call(source)
#
# Args:
# source: Source observale to take elements from.
#
# Returns:
# An observable sequence with the elements taken
# until the specified end time.
# """
var subscribe = func(
observer : ObserverBase,
scheduler_ : SchedulerBase = null
) -> DisposableBase:
var _scheduler : SchedulerBase
if scheduler != null: _scheduler = scheduler
elif scheduler_ != null: _scheduler = scheduler_
else: _scheduler = SceneTreeTimeoutScheduler.singleton()
var action = func(_scheduler : SchedulerBase, _state = null):
observer.on_completed()
var task
if absolute:
task = _scheduler.schedule_absolute(end_time, action)
else:
task = _scheduler.schedule_relative(end_time, action)
return CompositeDisposable.new([
task, source.subscribe(observer, GDRx.basic.noop, GDRx.basic.noop, scheduler_)
])
return Observable.new(subscribe)
return take_until_with_time