You need to put this code in separate file
Events.verse
# !ATTENTION! use `set` while you subscribing to event
endo_event(t : type) := class:
Listeners<internal> : []type{_(:t):void} = array{}
Subscribe<public>(Listener(:t):void) : endo_event(t) =
endo_event(t):
Listeners := Listeners + array{Listener}
Invoke<public>(Value : t) : void =
for (Listener : Listeners):
Listener(Value)
Example usage
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
hello_world_device := class(creative_device):
var MoneyChangedEvent : endo_event(int) = endo_event(int){} #single parameter
var AgentLevelUpEvent : endo_event(tuple(agent, int)) = endo_event(tuple(agent, int)){} #multi parameters with tuple
OnBegin<override>()<suspends> : void =
set MoneyChangedEvent = MoneyChangedEvent.Subscribe(OnMoneyChanged) #its important to set result of subscription to your event variable
MoneyChangedEvent.Invoke(20)
MoneyChangedEvent.Invoke(50)
MoneyChangedEvent.Invoke(100)
OnMoneyChanged<private>(Value : int) : void =
Print("Money changed {Value}")