use std::any::Any; use specs::{ Component, DenseVecStorage, Entity, WriteStorage }; pub trait Message: Send + Sync + Any {} #[derive(Debug, Clone, Default)] pub struct Inbox { pub messages: Vec } impl Component for Inbox { type Storage = DenseVecStorage; } impl Inbox { pub fn add_message(messages: &mut WriteStorage, ent: Entity, message: M){ messages .entry(ent) .unwrap() .or_insert_with(|| Self{messages: Vec::new()}) .messages .push(message); } } #[derive(Debug, Clone)] pub struct AttackMessage { pub damage: i64, pub attacker: Option } impl AttackMessage { pub fn new(damage: i64) -> Self { Self { damage, attacker: None } } } impl Message for AttackMessage {} pub type AttackInbox = Inbox;