From 2cc5b468cfd4c28bf1ad17ef1b3600c3d42f8b83 Mon Sep 17 00:00:00 2001 From: troido Date: Sat, 4 Apr 2020 14:01:17 +0200 Subject: listen to sounds in the world --- src/components/ear.rs | 24 ++++++++++++++++++++++++ src/components/interactable.rs | 4 +++- src/components/mod.rs | 5 +++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/components/ear.rs (limited to 'src/components') diff --git a/src/components/ear.rs b/src/components/ear.rs new file mode 100644 index 0000000..d032122 --- /dev/null +++ b/src/components/ear.rs @@ -0,0 +1,24 @@ + +use specs::{ + HashMapStorage, + Component, +}; + + +#[derive(Debug, Clone)] +pub struct Sound { + pub source: Option, + pub text: String +} + +impl Sound { + pub fn as_message(self) -> (Option, String) { + return (None, format!("{}: {}", self.source.unwrap_or("".to_string()), self.text)); + } +} + +#[derive(Component, Debug, Clone, Default)] +#[storage(HashMapStorage)] +pub struct Ear{ + pub sounds: Vec +} diff --git a/src/components/interactable.rs b/src/components/interactable.rs index 2dca6ea..3c8f918 100644 --- a/src/components/interactable.rs +++ b/src/components/interactable.rs @@ -12,7 +12,8 @@ use crate::{ #[storage(HashMapStorage)] pub enum Interactable { Harvest, - Change(Template) + Change(Template), + Say(String) } impl Interactable { @@ -22,6 +23,7 @@ impl Interactable { match typ.as_str()? { "harvest" => Some(Interactable::Harvest), "change" => Some(Interactable::Change(Template::from_json(arg).ok()?)), + "say" => Some(Interactable::Say(arg.as_str()?.to_string())), _ => None } } diff --git a/src/components/mod.rs b/src/components/mod.rs index efdf8f7..b7e3875 100644 --- a/src/components/mod.rs +++ b/src/components/mod.rs @@ -7,6 +7,7 @@ pub mod equipment; pub mod inventory; pub mod serialise; pub mod flags; +pub mod ear; pub use item::Item; pub use messages::{ @@ -23,6 +24,10 @@ pub use flags::{ Flag, Flags }; +pub use ear::{ + Sound, + Ear +}; use specs::{ DenseVecStorage, -- cgit