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 ++++++++++++++++++++++++++++++++++++++++++++++ src/components/mod.rs | 30 +++++++------------------- 2 files changed, 60 insertions(+), 22 deletions(-) create mode 100644 src/components/messages.rs (limited to 'src/components') 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; diff --git a/src/components/mod.rs b/src/components/mod.rs index 6fae490..3925d85 100644 --- a/src/components/mod.rs +++ b/src/components/mod.rs @@ -1,7 +1,12 @@ pub mod item; +pub mod messages; pub use item::Item; +pub use messages::{ + AttackMessage, + AttackInbox +}; use specs::{ DenseVecStorage, @@ -9,9 +14,7 @@ use specs::{ HashMapStorage, FlaggedStorage, NullStorage, - Component, - Entity, - WriteStorage + Component }; use crate::{ @@ -22,7 +25,6 @@ use crate::{ controls::Control, Template, playerstate::RoomPos, - attack::Attack, Timestamp }; @@ -126,22 +128,6 @@ pub struct RoomExit { pub dest_pos: RoomPos } -#[derive(Component, Debug, Clone, Default)] -pub struct Attacked { - pub attacks: Vec -} - -impl Attacked { - pub fn add_attack(attacked: &mut WriteStorage , ent: Entity, attack: Attack) { - attacked - .entry(ent) - .unwrap() - .or_insert_with(Attacked::default) - .attacks - .push(attack); - } -} - #[derive(Default, Component, Debug, Clone)] #[storage(NullStorage)] pub struct Entered; @@ -153,13 +139,13 @@ pub struct Dying; #[derive(Component, Debug, Clone)] #[storage(HashMapStorage)] pub struct Trap { - pub attack: Attack + pub attack: AttackMessage } #[derive(Component, Debug, Clone)] #[storage(HashMapStorage)] pub struct Fighter { - pub attack: Attack, + pub attack: AttackMessage, pub cooldown: i64 } -- cgit