Files
Genarrative/server-rs/crates/module-progression/src/events.rs

47 lines
1.7 KiB
Rust

//! 成长领域事件。
//!
//! 领域事件用于表达经验、升级和章节账本已经发生的事实;是否持久化为 SpacetimeDB
//! event table 或向前端投影,由外层 adapter 决定。
use crate::domain::{PlayerProgressionGrantSource, RuntimeEntityLevelProfile};
use serde::{Deserialize, Serialize};
#[cfg(feature = "spacetime-types")]
use spacetimedb::SpacetimeType;
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum ProgressionDomainEvent {
PlayerExperienceGranted(PlayerExperienceGrantedEvent),
ChapterProgressionLedgerApplied(ChapterProgressionLedgerAppliedEvent),
ChapterAutoLevelProfileResolved(ChapterAutoLevelProfileResolvedEvent),
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PlayerExperienceGrantedEvent {
pub user_id: String,
pub amount: u32,
pub source: PlayerProgressionGrantSource,
pub level: u32,
pub pending_level_ups: u32,
pub occurred_at_micros: i64,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChapterProgressionLedgerAppliedEvent {
pub user_id: String,
pub chapter_id: String,
pub granted_quest_xp: u32,
pub granted_hostile_xp: u32,
pub hostile_defeat_increment: u32,
pub occurred_at_micros: i64,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChapterAutoLevelProfileResolvedEvent {
pub profile: RuntimeEntityLevelProfile,
pub occurred_at_micros: i64,
}