summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-02-02 21:14:39 +0100
committertroido <troido@protonmail.com>2020-02-02 21:14:39 +0100
commit4cf72119121f1b6d3f85a5f4279b6fffaf8138e9 (patch)
treea34c1138d747bd3861bd9374a7c833f23514bdfc
parent5e414fb932eee5aa90d2181cada3c6cd32e4ec09 (diff)
add worldmessages
-rw-r--r--src/assemblages.rs2
-rw-r--r--src/main.rs3
-rw-r--r--src/resources.rs2
-rw-r--r--src/util.rs4
-rw-r--r--src/worldmessages.rs50
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
+ })
+ }
+}
+
+