summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-02-03 17:12:13 +0100
committertroido <troido@protonmail.com>2020-02-03 17:12:13 +0100
commitfa205303a3ae4dca0ee6c7bd8de94949e180ba75 (patch)
tree0b71002d9ade42c32f3ce51c03aa44ed41cd8747 /src
parent19ce5319e2250b7b0e1a188f69d24de282a85a7f (diff)
now also send playerpos messages
Diffstat (limited to 'src')
-rw-r--r--src/components.rs35
-rw-r--r--src/controls.rs2
-rw-r--r--src/main.rs11
-rw-r--r--src/resources.rs2
-rw-r--r--src/room.rs2
-rw-r--r--src/systems/controlinput.rs5
-rw-r--r--src/systems/makefloor.rs4
-rw-r--r--src/systems/moving.rs3
-rw-r--r--src/systems/view.rs17
-rw-r--r--src/worldmessages.rs13
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 {
}
+