summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/assemblage.rs62
-rw-r--r--src/assemblages.rs68
-rw-r--r--src/main.rs1
-rw-r--r--src/resources.rs2
-rw-r--r--src/room.rs2
5 files changed, 68 insertions, 67 deletions
diff --git a/src/assemblage.rs b/src/assemblage.rs
new file mode 100644
index 0000000..8949205
--- /dev/null
+++ b/src/assemblage.rs
@@ -0,0 +1,62 @@
+
+
+
+
+#[macro_export]
+macro_rules! assemblage {
+ ($name:ident { $($arg:ident : $argt:ident ),* } ; $( $comp:expr ),* ) => {
+ #[derive(Debug, Clone, Default)]
+ pub struct $name {$(
+ pub $arg : $argt
+ )* }
+ impl Assemblage for $name {
+ fn build<'a>(&self, mut builder: specs::EntityBuilder<'a>) -> specs::EntityBuilder<'a>{
+ $(
+ let $arg = &self.$arg;
+ )*
+ $(
+ builder = specs::Builder::with(builder, $comp);
+ )*
+ builder
+ }
+
+ #[allow(unused_variables, unused_mut)]
+ fn init_from_json(&mut self, mut args: Vec<serde_json::Value>, kwargs: std::collections::HashMap<&str, serde_json::Value>) {
+ $(
+ if args.len() > 0 {
+ let val = args.remove(0);
+ if let Some(actual_val) = super::unpack_json!($argt, val) {
+ self.$arg = actual_val;
+ }
+ }
+ )*
+ $(
+ if let Some(val) = kwargs.get(stringify!($arg)) {
+ if let Some(actual_val) = super::unpack_json!($argt, val) {
+ self.$arg = actual_val;
+ }
+ }
+ )*
+ }
+ }
+ }
+}
+
+#[macro_export]
+macro_rules! unpack_json {
+ (String, $val: ident) => {
+ if let Some(txt) = $val.as_str(){
+ Some(txt.to_string())
+ } else {
+ None
+ }
+ }
+}
+
+
+pub trait Assemblage: Send + Sync {
+ fn build<'a>(&self, builder: specs::EntityBuilder<'a>) -> specs::EntityBuilder<'a>;
+ fn init_from_json(&mut self, args: Vec<serde_json::Value>, kwargs: std::collections::HashMap<&str, serde_json::Value>);
+}
+
+
diff --git a/src/assemblages.rs b/src/assemblages.rs
index f90c5d0..c7140c9 100644
--- a/src/assemblages.rs
+++ b/src/assemblages.rs
@@ -1,70 +1,8 @@
-use std::collections::HashMap;
use rand::Rng;
-use serde_json::Value;
-use specs::{
- Builder,
- EntityBuilder
-};
-
use super::components::{Visible, Blocking, Played};
-
-macro_rules! assemblage {
- ($name:ident { $($arg:ident : $argt:ident ),* } ; $( $comp:expr ),* ) => {
- #[derive(Debug, Clone, Default)]
- pub struct $name {$(
- pub $arg : $argt
- )* }
- impl Assemblage for $name {
- fn build<'a>(&self, mut builder: EntityBuilder<'a>) -> EntityBuilder<'a>{
- $(
- let $arg = &self.$arg;
- )*
- $(
- builder = builder.with($comp);
- )*
- builder
- }
-
- #[allow(unused_variables, unused_mut)]
- fn init_from_json(&mut self, mut args: Vec<Value>, kwargs: HashMap<&str, Value>) {
- $(
- if args.len() > 0 {
- let val = args.remove(0);
- if let Some(actual_val) = unpack_json!($argt, val) {
- self.$arg = actual_val;
- }
- }
- )*
- $(
- if let Some(val) = kwargs.get(stringify!($arg)) {
- if let Some(actual_val) = unpack_json!($argt, val) {
- self.$arg = actual_val;
- }
- }
- )*
- }
- }
- }
-}
-
-macro_rules! unpack_json {
- (String, $val: ident) => {
- if let Some(txt) = $val.as_str(){
- Some(txt.to_string())
- } else {
- None
- }
- }
-}
-
-
-pub trait Assemblage: Send + Sync {
- fn build<'a>(&self, builder: EntityBuilder<'a>) -> EntityBuilder<'a>;
- fn init_from_json(&mut self, args: Vec<Value>, kwargs: HashMap<&str, Value>);
-}
-
-
+use super::assemblage;
+use super::assemblage::Assemblage;
assemblage!(Wall {}; Visible{sprite: "wall".to_string(), height: 2.0}, Blocking);
@@ -98,7 +36,7 @@ mod tests {
fn test_assemblage_from_json() {
let mut p = Player::new("Joe");
assert_eq!(p.name, "Joe");
- p.init_from_json(vec![json!("Bob"), json!("Mike")], HashMap::new());
+ p.init_from_json(vec![json!("Bob"), json!("Mike")], hashmap!());
assert_eq!(p.name, "Bob");
p.init_from_json(vec![], hashmap!("sprite" => json!("stone")));
assert_eq!(p.name, "Bob");
diff --git a/src/main.rs b/src/main.rs
index b1d30bb..646d2f3 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -15,6 +15,7 @@ mod resources;
mod systems;
mod worldmessages;
mod pos;
+mod assemblage;
use self::gameserver::GameServer;
use self::server::unixserver::UnixServer;
diff --git a/src/resources.rs b/src/resources.rs
index fcc4f32..e8b4059 100644
--- a/src/resources.rs
+++ b/src/resources.rs
@@ -4,7 +4,7 @@ use specs::Entity;
use super::pos::Pos;
use super::controls::Action;
-use super::assemblages::Assemblage;
+use super::assemblage::Assemblage;
use super::worldmessages::WorldMessage;
diff --git a/src/room.rs b/src/room.rs
index a6c696d..5eaee8e 100644
--- a/src/room.rs
+++ b/src/room.rs
@@ -13,7 +13,7 @@ use specs::{
use super::controls::Action;
use super::pos::Pos;
use super::components::Position;
-use super::assemblages::Assemblage;
+use super::assemblage::Assemblage;
use super::worldmessages::WorldMessage;
use super::resources::{
Size,