73 lines
3.4 KiB
GDScript3
73 lines
3.4 KiB
GDScript3
|
|
class_name SubjectBase
|
||
|
|
|
||
|
|
## Interface of a Subject.
|
||
|
|
##
|
||
|
|
## A subject is both an [Observer] and [Observable] in RxPY,
|
||
|
|
## meaning it implements both interfaces, however, in GDScript, this is not
|
||
|
|
## allowed! So, this interface provides all interface methods from
|
||
|
|
## [ObserverBase] and [ObservableBase].
|
||
|
|
|
||
|
|
func _init():
|
||
|
|
pass
|
||
|
|
|
||
|
|
## Creates a new subscription.
|
||
|
|
## [br]
|
||
|
|
## There are two ways to invoke this method:
|
||
|
|
## [br]
|
||
|
|
## 1. Subscribes an instance of [ObserverBase].
|
||
|
|
## [br]
|
||
|
|
## 2. Builds a new Observer in accordance to the Observer-Observable-Contract
|
||
|
|
## (see [ObserverBase]) from callbacks and subscribes it.
|
||
|
|
##
|
||
|
|
## [codeblock]
|
||
|
|
## var disp = obs.subscribe(observer)
|
||
|
|
## var disp = obs.subscribe(func(i) ..., func(e): ..., func(): ...)
|
||
|
|
## [/codeblock]
|
||
|
|
## [br]
|
||
|
|
## Since GDScript has no overloading to this date, use [code]subscribe{n}(...)[/code]
|
||
|
|
## for faster access!
|
||
|
|
func subscribe(
|
||
|
|
_on_next, # Callable or Observer or Object with callbacks
|
||
|
|
_on_error : Callable = GDRx.basic.noop,
|
||
|
|
_on_completed : Callable = GDRx.basic.noop,
|
||
|
|
_scheduler : SchedulerBase = null) -> DisposableBase:
|
||
|
|
NotImplementedError.raise()
|
||
|
|
return null
|
||
|
|
|
||
|
|
## Simulated overload for [code]subscribe[/code]
|
||
|
|
func subscribe1(obv : ObserverBase = null, _scheduler : SchedulerBase = null) -> DisposableBase:
|
||
|
|
return self.subscribe(obv, GDRx.basic.noop, GDRx.basic.noop, _scheduler)
|
||
|
|
## Simulated overload for [code]subscribe[/code]
|
||
|
|
func subscribe2(_on_next : Callable = GDRx.basic.noop, _scheduler : SchedulerBase = null) -> DisposableBase:
|
||
|
|
return self.subscribe(_on_next, GDRx.basic.noop, GDRx.basic.noop, _scheduler)
|
||
|
|
## Simulated overload for [code]subscribe[/code]
|
||
|
|
func subscribe3(_on_error : Callable = GDRx.basic.noop, _scheduler : SchedulerBase = null) -> DisposableBase:
|
||
|
|
return self.subscribe(GDRx.basic.noop, _on_error, GDRx.basic.noop, _scheduler)
|
||
|
|
## Simulated overload for [code]subscribe[/code]
|
||
|
|
func subscribe4(_on_completed : Callable = GDRx.basic.noop, _scheduler : SchedulerBase = null) -> DisposableBase:
|
||
|
|
return self.subscribe(GDRx.basic.noop, GDRx.basic.noop, _on_completed, _scheduler)
|
||
|
|
## Simulated overload for [code]subscribe[/code]
|
||
|
|
func subscribe5(_on_next : Callable = GDRx.basic.noop, _on_completed : Callable = GDRx.basic.noop, _scheduler : SchedulerBase = null) -> DisposableBase:
|
||
|
|
return self.subscribe(_on_next, GDRx.basic.noop, _on_completed, _scheduler)
|
||
|
|
## Simulated overload for [code]subscribe[/code]
|
||
|
|
func subscribe6(_on_next : Callable = GDRx.basic.noop, _on_error : Callable = GDRx.basic.noop, _scheduler : SchedulerBase = null) -> DisposableBase:
|
||
|
|
return self.subscribe(_on_next, _on_error, GDRx.basic.noop, _scheduler)
|
||
|
|
## Simulated overload for [code]subscribe[/code]
|
||
|
|
func subscribe7(_on_completed : Callable = GDRx.basic.noop, _on_error : Callable = GDRx.basic.noop, _scheduler : SchedulerBase = null) -> DisposableBase:
|
||
|
|
return self.subscribe(GDRx.basic.noop, _on_error, _on_completed, _scheduler)
|
||
|
|
## Simulated overload for [code]subscribe[/code]
|
||
|
|
func subscribe8(_scheduler : SchedulerBase = null) -> DisposableBase:
|
||
|
|
return self.subscribe(GDRx.basic.noop, GDRx.basic.noop, GDRx.basic.noop, _scheduler)
|
||
|
|
|
||
|
|
## Called when the [Observable] emits a new item on the stream
|
||
|
|
func on_next(_i):
|
||
|
|
NotImplementedError.raise()
|
||
|
|
|
||
|
|
## Called when the [Observable] emits an error on the stream
|
||
|
|
func on_error(_e):
|
||
|
|
NotImplementedError.raise()
|
||
|
|
|
||
|
|
## Called when the [Observable] is finished and no more items are sent.
|
||
|
|
func on_completed():
|
||
|
|
NotImplementedError.raise()
|