diff options
| author | troido <troido@protonmail.com> | 2020-03-01 22:28:02 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-03-01 22:28:02 +0100 |
| commit | 6a7a74e6878ff04e61e6ef21a922e314b9bab271 (patch) | |
| tree | b26015955f50856052153019969f7bee8d1cfbd3 /src/components/messages.rs | |
| parent | c846e929a88837094d7a5383a306df1fec56c333 (diff) | |
use generics for message components
Diffstat (limited to 'src/components/messages.rs')
| -rw-r--r-- | src/components/messages.rs | 52 |
1 files changed, 52 insertions, 0 deletions
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<M: Message> { + pub messages: Vec<M> +} + +impl <M: Message> Component for Inbox<M> { + type Storage = DenseVecStorage<Self>; +} + +impl <M: Message> Inbox<M> { + + pub fn add_message(messages: &mut WriteStorage<Self>, 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<Entity> +} + +impl AttackMessage { + pub fn new(damage: i64) -> Self { + Self { + damage, + attacker: None + } + } +} + +impl Message for AttackMessage {} + +pub type AttackInbox = Inbox<AttackMessage>; |
