diff options
| -rw-r--r-- | src/assemblages.rs | 2 | ||||
| -rw-r--r-- | src/main.rs | 3 | ||||
| -rw-r--r-- | src/resources.rs | 2 | ||||
| -rw-r--r-- | src/util.rs | 4 | ||||
| -rw-r--r-- | src/worldmessages.rs | 50 |
5 files changed, 58 insertions, 3 deletions
diff --git a/src/assemblages.rs b/src/assemblages.rs index 61833b4..a80e5c9 100644 --- a/src/assemblages.rs +++ b/src/assemblages.rs @@ -31,7 +31,7 @@ macro_rules! assemblage { } -pub trait Assemblage { +pub trait Assemblage: Send + Sync { fn build<'a>(&self, builder: EntityBuilder<'a>) -> EntityBuilder<'a>; } diff --git a/src/main.rs b/src/main.rs index abf6039..6e64154 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,12 +13,13 @@ pub mod assemblages; pub mod components; pub mod resources; pub mod systems; +pub mod worldmessages; use self::gameserver::GameServer; use self::server::unixserver::UnixServer; use self::server::tcpserver::TcpServer; use self::server::Server; -use self::assemblages::{Player, Wall, Grass}; +use self::assemblages::{Wall, Grass}; use serde_json; diff --git a/src/resources.rs b/src/resources.rs index 0e32423..b35a9d2 100644 --- a/src/resources.rs +++ b/src/resources.rs @@ -31,5 +31,5 @@ pub struct Floor { #[derive(Default)] pub struct NewEntities { - pub assemblages: Vec<(Position, Box<dyn Assemblage + Send + Sync>)> + pub assemblages: Vec<(Position, Box<dyn Assemblage>)> } diff --git a/src/util.rs b/src/util.rs index 1e7821f..fed0400 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,8 +1,12 @@ use std::cmp::{min, max}; +use serde_json::Value; pub fn clamp<T: Ord>(val: T, lower: T, upper: T) -> T{ return max(min(val, upper), lower); } +pub trait ToJson { + fn to_json(&self) -> Value; +} diff --git a/src/worldmessages.rs b/src/worldmessages.rs new file mode 100644 index 0000000..1d00028 --- /dev/null +++ b/src/worldmessages.rs @@ -0,0 +1,50 @@ + +use serde_json::{Value, json}; +use super::util::ToJson; +// use serde::Serialize; + +// #[derive(Serialize)] +pub struct WorldMessage { + pub updates: Vec<WorldUpdate> + +} + +impl ToJson for WorldMessage { + fn to_json(&self) -> Value { + let updates: Vec<Value> = self.updates.iter().map(|u| u.to_json()).collect(); + json!(["world", updates]) + } +} + +pub enum WorldUpdate { + Field(FieldMessage) +} + +impl ToJson for WorldUpdate { + fn to_json(&self) -> Value { + match self { + WorldUpdate::Field(msg) => Value::Array(vec![Value::String("field".to_string()), msg.to_json()]) + } + } +} + +pub struct FieldMessage { + width: i32, + height: i32, + field: Vec<usize>, + mapping: Vec<Vec<String>> +} + + +impl ToJson for FieldMessage { + fn to_json(&self) -> Value { + json!({ + "width": self.width, + "height": self.height, + "field": self.field, + "mapping": self.mapping + }) + } +} + + |
