//! NPC 领域事件。 //! //! 用于表达好感变化、关系变化、NPC 被招募和战斗请求产生等事实。 use crate::domain::{NpcInteractionBattleMode, NpcRelationStance, NpcSocialActionKind}; 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 NpcDomainEvent { RelationChanged(NpcRelationChangedEvent), SocialActionResolved(NpcSocialActionResolvedEvent), RecruitResolved(NpcRecruitResolvedEvent), BattleRequested(NpcBattleRequestedEvent), } #[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))] #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct NpcRelationChangedEvent { pub npc_state_id: String, pub previous_affinity: i32, pub next_affinity: i32, pub next_stance: NpcRelationStance, pub occurred_at_micros: i64, } #[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))] #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct NpcSocialActionResolvedEvent { pub npc_state_id: String, pub action_kind: NpcSocialActionKind, pub occurred_at_micros: i64, } #[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))] #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct NpcRecruitResolvedEvent { pub npc_state_id: String, pub recruited: bool, pub occurred_at_micros: i64, } #[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))] #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct NpcBattleRequestedEvent { pub npc_state_id: String, pub battle_mode: NpcInteractionBattleMode, pub occurred_at_micros: i64, }