Skip to content

SignalBus

SignalBus is a global event bus for communication across scenes/world transitions.

Unlike Signal objects (which are instance-owned), this bus is process-global and identified by string channel names.


Subscribe

Register a listener node + function for a channel.

Sig: SignalBus.Subscribe(name, listener, func) - Arg: string name Channel/event name. - Arg: Node listener Node used as self when invoking func. - Arg: function func Listener callback (function MyNode:OnEvent(...)).

Example:

function HUD:OnScoreChanged(score)
    self.scoreText:SetText("Score: " .. tostring(score))
    return score
end

function HUD:Start()
    SignalBus.Subscribe("ScoreChanged", self, HUD.OnScoreChanged)
end

Unsubscribe

Remove a listener from a channel.

Sig: SignalBus.Unsubscribe(name, listener) - Arg: string name Channel/event name. - Arg: Node listener Listener node to remove.


Emit

Emit a global signal channel with any number of args.

Sig: ret0, ret1, ... = SignalBus.Emit(name, args...) - Arg: string name Channel/event name. - Arg: args... Payload values forwarded to listeners. - Ret: ... Return values from listeners (one return value per listener that returned a value).

Example:

local a, b = SignalBus.Emit("RequestDifficulty", "campaign")

Clear

Remove all channels and listeners from the global bus.

Sig: SignalBus.Clear()


C++

C++ can access the same global bus:

static Datum OnGlobalEvent(Node* listener, const std::vector<Datum>& args)
{
    // listener is your subscribed node
    return Datum(true);
}

SignalBus* bus = GetSignalBus();
bus->Subscribe("MyEvent", this, &OnGlobalEvent);
std::vector<Datum> ret = bus->Emit("MyEvent", { Datum(123) });

Supported C++ listener callback forms: - Datum (*)(Node*, const std::vector<Datum>&) - void (*)(Node*, const std::vector<Datum>&) - ScriptFunc