CabinGame/Luxe/math/observable.wren
2020-09-13 17:58:22 +02:00

45 lines
No EOL
673 B
Text

import "math/event" for Event
class Observable{
value{_value}
value=(v){
_event.emit([v])
_value = v
}
value_no_update=(v){_value = v}
event{_event}
static new(value){
var variable = new()
variable.value_no_update = value
return variable
}
construct new(){
_event = Event.new()
}
on_change(fn){
return _event.listen(fn)
}
on_change(initial, fn){
if(initial){
fn.call(value)
}
return on_change(fn)
}
not_on_change(fn){
_event.unlisten(fn)
}
on_not_null(fn){
if(value){
fn.call(value)
} else {
_event.once(fn)
}
}
}