diff options
| author | troido <troido@protonmail.com> | 2020-02-03 17:12:13 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-03 17:12:13 +0100 |
| commit | fa205303a3ae4dca0ee6c7bd8de94949e180ba75 (patch) | |
| tree | 0b71002d9ade42c32f3ce51c03aa44ed41cd8747 /src | |
| parent | 19ce5319e2250b7b0e1a188f69d24de282a85a7f (diff) | |
now also send playerpos messages
Diffstat (limited to 'src')
| -rw-r--r-- | src/components.rs | 35 | ||||
| -rw-r--r-- | src/controls.rs | 2 | ||||
| -rw-r--r-- | src/main.rs | 11 | ||||
| -rw-r--r-- | src/resources.rs | 2 | ||||
| -rw-r--r-- | src/room.rs | 2 | ||||
| -rw-r--r-- | src/systems/controlinput.rs | 5 | ||||
| -rw-r--r-- | src/systems/makefloor.rs | 4 | ||||
| -rw-r--r-- | src/systems/moving.rs | 3 | ||||
| -rw-r--r-- | src/systems/view.rs | 17 | ||||
| -rw-r--r-- | src/worldmessages.rs | 13 |
10 files changed, 32 insertions, 62 deletions
diff --git a/src/components.rs b/src/components.rs index 1613b7f..3b17f0c 100644 --- a/src/components.rs +++ b/src/components.rs @@ -1,45 +1,10 @@ -use std::ops; - use specs::{ DenseVecStorage, Component }; use super::controls::Control; -use super::util::clamp; - - -#[derive(Component, Debug, Hash, PartialEq, Eq, Clone, Copy)] -pub struct Pos { - pub x: i32, - pub y: i32 -} - -impl ops::Add<Pos> for Pos { - type Output = Pos; - - fn add(self, other: Pos) -> Pos { - Pos { - x: self.x + other.x, - y: self.y + other.y - } - } -} - -impl Pos { - - pub fn new(x: i32, y: i32) -> Pos { - Pos {x, y} - } - - pub fn clamp(self, smaller: Pos, larger: Pos) -> Pos { - Pos { - x: clamp(self.x, smaller.x, larger.x), - y: clamp(self.y, smaller.y, larger.y) - } - } -} #[derive(Component, Debug, Clone)] pub struct Visible { diff --git a/src/controls.rs b/src/controls.rs index ae806a9..101b401 100644 --- a/src/controls.rs +++ b/src/controls.rs @@ -1,7 +1,7 @@ use serde_json::Value; -use super::components::Pos; +use super::pos::Pos; #[derive(Debug, Clone)] pub enum Direction { diff --git a/src/main.rs b/src/main.rs index 3fcb842..97f5bac 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,6 +14,7 @@ pub mod components; pub mod resources; pub mod systems; pub mod worldmessages; +pub mod pos; use self::gameserver::GameServer; use self::server::unixserver::UnixServer; @@ -21,6 +22,7 @@ use self::server::tcpserver::TcpServer; use self::server::Server; use self::assemblages::{Wall, Grass}; use self::util::ToJson; +use self::room::Room; @@ -38,9 +40,8 @@ fn main() { let mut gameserver = GameServer::new(servers); - let mut room = room::Room::new((50, 50)); + let mut room = gen_room(50, 40); - gen_room(&mut room); loop { let actions = gameserver.update(); @@ -55,9 +56,8 @@ fn main() { } } -fn gen_room(room: &mut room::Room){ - - let (width, height) = room.get_size(); +fn gen_room<'a, 'b>(width: i32, height: i32) -> Room<'a, 'b> { + let mut room = Room::new((width, height)); let wall = Wall{}; for x in 0..width { room.add_obj(&wall, (x, 0)); @@ -72,5 +72,6 @@ fn gen_room(room: &mut room::Room){ room.add_obj(&Grass::new(), (x, y)); } } + room } diff --git a/src/resources.rs b/src/resources.rs index 35e5bdf..fcc4f32 100644 --- a/src/resources.rs +++ b/src/resources.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use specs::Entity; -use super::components::Pos; +use super::pos::Pos; use super::controls::Action; use super::assemblages::Assemblage; use super::worldmessages::WorldMessage; diff --git a/src/room.rs b/src/room.rs index df14549..da92d69 100644 --- a/src/room.rs +++ b/src/room.rs @@ -11,7 +11,7 @@ use specs::{ }; use super::controls::Action; -use super::components::Pos; +use super::pos::Pos; use super::assemblages::Assemblage; use super::worldmessages::WorldMessage; use super::resources::{ diff --git a/src/systems/controlinput.rs b/src/systems/controlinput.rs index b672b4c..6d07bc5 100644 --- a/src/systems/controlinput.rs +++ b/src/systems/controlinput.rs @@ -11,10 +11,11 @@ use specs::{ Join }; +use super::super::pos::Pos; + use super::super::components::{ Controller, - Played, - Pos + Played }; use super::super::controls::{ diff --git a/src/systems/makefloor.rs b/src/systems/makefloor.rs index ba3727d..b6fedd9 100644 --- a/src/systems/makefloor.rs +++ b/src/systems/makefloor.rs @@ -8,9 +8,7 @@ use specs::{ Join }; -use super::super::components::{ - Pos -}; +use super::super::pos::Pos; use super::super::resources::{ Floor diff --git a/src/systems/moving.rs b/src/systems/moving.rs index 8bce8e5..38588d5 100644 --- a/src/systems/moving.rs +++ b/src/systems/moving.rs @@ -7,8 +7,9 @@ use specs::{ Join }; +use super::super::pos::Pos; + use super::super::components::{ - Pos, Controller, Blocking }; diff --git a/src/systems/view.rs b/src/systems/view.rs index 144a544..209b1a5 100644 --- a/src/systems/view.rs +++ b/src/systems/view.rs @@ -9,13 +9,13 @@ use specs::{ Join }; +use super::super::pos::Pos; + use super::super::components::{ - Pos, Visible, Played }; - use super::super::resources::{ Size, Output @@ -44,15 +44,20 @@ impl <'a> System<'a> for View { let height = size.height; let (values, mapping) = draw_room(cells, (width, height)); - let message = WorldMessage{updates: vec![WorldUpdate::Field(FieldMessage{ + let field = WorldUpdate::Field(FieldMessage{ width, height, field: values, mapping - })]}; + }); output.output.clear(); - for player in (&players).join() { - output.output.insert(player.name.clone(), message.clone()); + for (player, pos) in (&players, &positions).join() { + + let message = WorldMessage{updates: vec![ + field.clone(), + WorldUpdate::Pos(*pos) + ]}; + output.output.insert(player.name.clone(), message); } } } diff --git a/src/worldmessages.rs b/src/worldmessages.rs index 34b6a6b..8feb29f 100644 --- a/src/worldmessages.rs +++ b/src/worldmessages.rs @@ -1,13 +1,11 @@ use serde_json::{Value, json}; use super::util::ToJson; -// use serde::Serialize; +use super::pos::Pos; -// #[derive(Serialize)] #[derive(Clone)] pub struct WorldMessage { pub updates: Vec<WorldUpdate> - } impl ToJson for WorldMessage { @@ -19,13 +17,15 @@ impl ToJson for WorldMessage { #[derive(Clone)] pub enum WorldUpdate { - Field(FieldMessage) + Field(FieldMessage), + Pos(Pos) } 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()]) + WorldUpdate::Field(msg) => Value::Array(vec![Value::String("field".to_string()), msg.to_json()]), + WorldUpdate::Pos(pos) => Value::Array(vec![Value::String("playerpos".to_string()), pos.to_json()]) } } } @@ -37,8 +37,6 @@ pub struct FieldMessage { pub field: Vec<usize>, pub mapping: Vec<Vec<String>> } - - impl ToJson for FieldMessage { fn to_json(&self) -> Value { json!({ @@ -51,3 +49,4 @@ impl ToJson for FieldMessage { } + |
