Lifecycle Events

Last updated:

Published on

Introduction

This document lists all lifecycle events provided by RitsuLib, explains subscription patterns, and details replayable event behavior.


简介

本文列出 RitsuLib 提供的全部生命周期事件,介绍订阅方式及可重放事件的行为。


Subscription Patterns

csharp
var sub = RitsuLibFramework.SubscribeLifecycle<GameReadyEvent>(evt =>
{
    Logger.Info(
quot;Game ready:
{evt.Game}");
}); // Unsubscribe sub.Dispose();

Subscribe via ILifecycleObserver

csharp
public class MyObserver : ILifecycleObserver
{
    public void OnEvent(IFrameworkLifecycleEvent evt)
    {
        if (evt is CombatStartingEvent combat)
            HandleCombatStart(combat);
        else if (evt is RunEndedEvent run)
            HandleRunEnd(run);
    }
}

RitsuLibFramework.SubscribeLifecycle(new MyObserver());

Replayable events (IReplayableFrameworkLifecycleEvent): if you subscribe after the event has already fired, the framework immediately calls your handler with the stored event instance — no timing concerns.


订阅方式

按类型订阅(推荐)

csharp
var sub = RitsuLibFramework.SubscribeLifecycle<GameReadyEvent>(evt =>
{
    Logger.Info(
quot;游戏已就绪:
{evt.Game}");
}); // 取消订阅 sub.Dispose();

通过 ILifecycleObserver 订阅多种事件

csharp
public class MyObserver : ILifecycleObserver
{
    public void OnEvent(IFrameworkLifecycleEvent evt)
    {
        if (evt is CombatStartingEvent combat)
            HandleCombatStart(combat);
        else if (evt is RunEndedEvent run)
            HandleRunEnd(run);
    }
}

RitsuLibFramework.SubscribeLifecycle(new MyObserver());

可重放事件(IReplayableFrameworkLifecycleEvent): 若在事件已发生后才订阅,框架会立即以已存储的事件实例回调,无需关心订阅时机。


Framework Events

Fired during framework initialization and profile service setup.

EventReplayablePayload
FrameworkInitializingEventFrameworkModId, FrameworkVersion
FrameworkInitializedEventFrameworkModId, IsActive
ProfileServicesInitializingEvent
ProfileServicesInitializedEventProfileId

框架事件

框架初始化与 Profile 服务初始化阶段触发。

事件可重放携带数据
FrameworkInitializingEventFrameworkModIdFrameworkVersion
FrameworkInitializedEventFrameworkModIdIsActive
ProfileServicesInitializingEvent
ProfileServicesInitializedEventProfileId

Game Bootstrap Events

Fired in sequence during game startup, from model registration through to game ready.

EventReplayablePayload
EssentialInitializationStartingEvent
EssentialInitializationCompletedEvent
DeferredInitializationStartingEvent
DeferredInitializationCompletedEvent
ContentRegistrationClosedEventReason
ModelRegistryInitializingEvent
ModelRegistryInitializedEventRegisteredModelTypeCount
ModelIdsInitializingEvent
ModelIdsInitializedEvent
ModelPreloadingStartingEvent
ModelPreloadingCompletedEvent
GameTreeEnteredEventGame
GameReadyEventGame
csharp
RitsuLibFramework.SubscribeLifecycle<ModelIdsInitializedEvent>(_ =>
{
    var id = ModelDb.GetId<MyCard>();
});

游戏引导事件

游戏启动流程中依次触发,覆盖 Model 注册到游戏就绪全程。

事件可重放携带数据
EssentialInitializationStartingEvent
EssentialInitializationCompletedEvent
DeferredInitializationStartingEvent
DeferredInitializationCompletedEvent
ContentRegistrationClosedEventReason
ModelRegistryInitializingEvent
ModelRegistryInitializedEventRegisteredModelTypeCount
ModelIdsInitializingEvent
ModelIdsInitializedEvent
ModelPreloadingStartingEvent
ModelPreloadingCompletedEvent
GameTreeEnteredEventGame
GameReadyEventGame
csharp
RitsuLibFramework.SubscribeLifecycle<ModelIdsInitializedEvent>(_ =>
{
    var id = ModelDb.GetId<MyCard>();
});

Run Events

EventReplayablePayload
RunStartedEventRunState, IsMultiplayer, IsDaily
RunLoadedEventRunState, IsMultiplayer, IsDaily
RunEndedEventRun, IsVictory, IsAbandoned

跑局事件

事件可重放携带数据
RunStartedEventRunStateIsMultiplayerIsDaily
RunLoadedEventRunStateIsMultiplayerIsDaily
RunEndedEventRunIsVictoryIsAbandoned

Room & Act Events

EventPayload
RoomEnteringEventRunState, Room
RoomEnteredEventRunState, Room
RoomExitedEventRunManager, Room
ActEnteringEventRunManager, TargetActIndex, DoTransition
ActEnteredEventRunState, CurrentActIndex
RewardsScreenContinuingEventRunManager

房间与章节事件

事件携带数据
RoomEnteringEventRunStateRoom
RoomEnteredEventRunStateRoom
RoomExitedEventRunManagerRoom
ActEnteringEventRunManagerTargetActIndexDoTransition
ActEnteredEventRunStateCurrentActIndex
RewardsScreenContinuingEventRunManager

Combat Events

EventPayload
CombatStartingEventRunState, CombatState?
CombatEndedEventRunState, CombatState?, Room
CombatVictoryEventRunState, CombatState?, Room
SideTurnStartingEventCombatState, Side
SideTurnStartedEventCombatState, Side
CardPlayingEventCombatState, CardPlay
CardPlayedEventCombatState, CardPlay
CardDrawnEventCombatState, Card, FromHandDraw
CardDiscardedEventCombatState, Card
CardExhaustedEventCombatState, Card, CausedByEthereal
CardRetainedEventCombatState, Card
CardMovedBetweenPilesEventRunState, CombatState?, Card, PreviousPile, Source

Creature Events

EventPayload
CreatureDyingEventCombatState, Creature
CreatureDiedEventCombatState, Creature
csharp
RitsuLibFramework.SubscribeLifecycle<CardDrawnEvent>(evt =>
{
    if (evt.Card is MyCard myCard)
        myCard.OnDrawn(evt.CombatState);
});

战斗事件

事件携带数据
CombatStartingEventRunStateCombatState?
CombatEndedEventRunStateCombatState?Room
CombatVictoryEventRunStateCombatState?Room
SideTurnStartingEventCombatStateSide
SideTurnStartedEventCombatStateSide
CardPlayingEventCombatStateCardPlay
CardPlayedEventCombatStateCardPlay
CardDrawnEventCombatStateCardFromHandDraw
CardDiscardedEventCombatStateCard
CardExhaustedEventCombatStateCardCausedByEthereal
CardRetainedEventCombatStateCard
CardMovedBetweenPilesEventRunStateCombatState?CardPreviousPileSource

生物事件

事件携带数据
CreatureDyingEventCombatStateCreature
CreatureDiedEventCombatStateCreature
csharp
RitsuLibFramework.SubscribeLifecycle<CardDrawnEvent>(evt =>
{
    if (evt.Card is MyCard myCard)
        myCard.OnDrawn(evt.CombatState);
});

Reward Events

EventPayload
GoldGainedEventAmount
GoldLostEventAmount
PotionProcuredEventPotion
PotionDiscardedEventPotion
RelicObtainedEventRelic
RelicRemovedEventRelic
RewardTakenEventReward

奖励事件

事件携带数据
GoldGainedEventAmount
GoldLostEventAmount
PotionProcuredEventPotion
PotionDiscardedEventPotion
RelicObtainedEventRelic
RelicRemovedEventRelic
RewardTakenEventReward

Unlock Events

EventPayload
EpochObtainedEventEpoch
EpochRevealedEventEpoch
UnlockIncrementedEventUnlockState

解锁事件

事件携带数据
EpochObtainedEventEpoch
EpochRevealedEventEpoch
UnlockIncrementedEventUnlockState

Save & Persistence Events

Profile Lifecycle

EventPayload
ProfileIdInitializedEventProfileId
ProfileSwitchingEventOldProfileId, NewProfileId
ProfileSwitchedEventProfileId
ProfileDeletingEventProfileId
ProfileDeletedEventProfileId

Save Writing

EventPayload
RunSavingEventRunState
RunSavedEventRunState
ProgressSavingEvent
ProgressSavedEvent

ModDataStore Data Events

Used internally by ModDataStore, also available for mods to react to save state changes.

EventDescription
ProfileDataReadyEventSave data loaded — safe to read/write
ProfileDataChangedEventSave data changed
ProfileDataInvalidatedEventSave data invalidated (e.g. profile switch)

存档与持久化事件

Profile 生命周期

事件携带数据
ProfileIdInitializedEventProfileId
ProfileSwitchingEventOldProfileIdNewProfileId
ProfileSwitchedEventProfileId
ProfileDeletingEventProfileId
ProfileDeletedEventProfileId

存档写入

事件携带数据
RunSavingEventRunState
RunSavedEventRunState
ProgressSavingEvent
ProgressSavedEvent

ModDataStore 数据事件

ModDataStore 内部使用,也可供 Mod 监听存档状态变化。

事件说明
ProfileDataReadyEvent存档数据加载完毕,可安全读写
ProfileDataChangedEvent存档数据发生变更
ProfileDataInvalidatedEvent存档数据失效(如切换档案)

Game Over Events

EventPayload
GameOverScreenCreatedEventScreen

游戏结算事件

事件携带数据
GameOverScreenCreatedEventScreen

相关文档