use bevy::prelude::*;
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct ContagionSpawnRequested {
pub contagion_id: String,
pub content: super::components::ContagionContent,
pub origin_node: Entity,
pub mutation_rate: f32,
}
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct PropagationStepRequested;
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct TurnAdvancedMessage;
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct CredibilityDecayRequested {
pub elapsed_turns: u64,
}
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct ContagionSpawnedEvent {
pub contagion_entity: Entity,
pub contagion_id: String,
pub origin_node: Entity,
}
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct ContagionSpreadEvent {
pub infection_entity: Entity,
pub contagion_id: String,
pub from_node: Entity,
pub to_node: Entity,
pub is_mutation: bool,
pub original_id: Option<String>,
}
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct InfectionStateChangedEvent {
pub infection_entity: Entity,
pub node_entity: Entity,
pub contagion_id: String,
pub old_state: InfectionStateType,
pub new_state: InfectionStateType,
}
#[derive(Clone, Copy, Reflect, PartialEq, Debug)]
pub enum InfectionStateType {
Incubating,
Active,
Recovered,
Plain,
}
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct ReinfectionOccurredEvent {
pub infection_entity: Entity,
pub node_entity: Entity,
pub contagion_id: String,
}
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct ContagionRemovedEvent {
pub contagion_id: String,
pub reason: RemovalReason,
}
#[derive(Clone, Copy, Reflect, PartialEq, Debug)]
pub enum RemovalReason {
Expired,
Manual,
}
#[derive(Message, Clone, Reflect)]
#[reflect(opaque)]
pub struct PropagationStepCompletedEvent {
pub spread_count: usize,
pub mutation_count: usize,
}