From 6a7a74e6878ff04e61e6ef21a922e314b9bab271 Mon Sep 17 00:00:00 2001 From: troido Date: Sun, 1 Mar 2020 22:28:02 +0100 Subject: use generics for message components --- src/components/messages.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/components/messages.rs (limited to 'src/components/messages.rs') diff --git a/src/components/messages.rs b/src/components/messages.rs new file mode 100644 index 0000000..a2ecd2f --- /dev/null +++ b/src/components/messages.rs @@ -0,0 +1,52 @@ + +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; -- cgit