diff options
Diffstat (limited to 'src/components')
| -rw-r--r-- | src/components/messages.rs | 52 | ||||
| -rw-r--r-- | src/components/mod.rs | 30 |
2 files changed, 60 insertions, 22 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>; 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<Attack> -} - -impl Attacked { - pub fn add_attack(attacked: &mut WriteStorage<Attacked> , 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 } |
