Appearance
eventpp
Fairlanes uses eventpp as low-level callback infrastructure, but the current game code usually reaches it through small project bus wrappers.
Current Usage
The active project-level event bus is seerin::VariantBus<std::variant<...>>, defined in src/sr/variant_bus.hpp. It stores one eventpp::CallbackList per payload type and exposes:
emit(Variant{payload})for producerson<T>(...)/subscribe<T>(...)for listeners- RAII-style subscriptions for Seerin buses
Fairlanes domain buses use that wrapper:
fl::events::PartyBusfl::events::CombatantBusseerin::BeatBusseerin::AtbInBusseerin::AtbOutBus
The direct eventpp::EventDispatcher usage that remains is the root logging path in src/fl/primitives/logging.hpp: Logger dispatches fl::primitives::LogEvent, and FancyLogSink listens and appends markup to a FancyLog.
How To Read Event Code
Start from the domain type, not from eventpp:
src/fl/events/party_bus.hppfor party and combatant eventssrc/sr/atb_events.hppfor ATB input/output eventssrc/sr/variant_bus.hppfor the wrapper mechanicssrc/fl/primitives/logging.hppfor the direct logging dispatcher
Useful searches:
emit(fl::events::PartyEventemit(fl::events::CombatantEventatb_in().emitatb_out().subscribeScopedPartyListenerScopedCombatantListenerappendListener
Mental Model
text
payload type -> VariantBus::emit(...) -> typed callback list -> listenerFor the combat loop, the important chain is concrete:
text
seerin::Beat -> PartyTick -> ATB -> BecameActive -> skill scheduling -> FinishedTurn