aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/src/customer.rs8
-rw-r--r--server/src/game.rs27
-rw-r--r--server/src/protocol.rs14
3 files changed, 44 insertions, 5 deletions
diff --git a/server/src/customer.rs b/server/src/customer.rs
index b003c935..87b67f0e 100644
--- a/server/src/customer.rs
+++ b/server/src/customer.rs
@@ -1,7 +1,7 @@
use crate::{
data::Gamedata,
game::Game,
- protocol::{PacketC, PacketS, PlayerID},
+ protocol::{Message, PacketC, PacketS, PlayerID},
};
use glam::{IVec2, Vec2};
use log::{debug, error};
@@ -118,6 +118,12 @@ impl DemandState {
packets_out
.push((p.id, move_player(p, &self.walkable, next - p.position, dt)));
} else {
+ packets_out.push((
+ p.id,
+ PacketS::Communicate {
+ message: Some(Message::Item(4)),
+ },
+ ));
p.state = CustomerState::Waiting { chair: *chair };
}
}
diff --git a/server/src/game.rs b/server/src/game.rs
index 228d7048..225455bf 100644
--- a/server/src/game.rs
+++ b/server/src/game.rs
@@ -1,7 +1,7 @@
use crate::{
data::Gamedata,
interaction::{interact, tick_tile, InteractEffect, TickEffect},
- protocol::{ItemIndex, PacketC, PacketS, PlayerID, RecipeIndex, TileIndex},
+ protocol::{ItemIndex, Message, PacketC, PacketS, PlayerID, RecipeIndex, TileIndex},
};
use anyhow::{anyhow, bail, Result};
use glam::{IVec2, Vec2};
@@ -36,6 +36,7 @@ pub struct Player {
pub position: Vec2,
pub interacting: Option<IVec2>,
pub item: Option<Item>,
+ pub communicate: Option<Message>,
}
pub struct Game {
@@ -80,12 +81,18 @@ impl Game {
character: player.character,
name: player.name.clone(),
item: player.item.as_ref().map(|i| i.kind),
- })
+ });
+ if let Some(c) = &player.communicate {
+ out.push(PacketC::Communicate {
+ player: id,
+ message: Some(c.to_owned()),
+ })
+ }
}
for (&tile, tdata) in &self.tiles {
out.push(PacketC::UpdateMap {
pos: tile,
- neighbours: [
+ neighbors: [
self.tiles.get(&(tile + IVec2::NEG_Y)).map(|e| e.kind),
self.tiles.get(&(tile + IVec2::NEG_X)).map(|e| e.kind),
self.tiles.get(&(tile + IVec2::Y)).map(|e| e.kind),
@@ -116,6 +123,7 @@ impl Game {
} else {
self.data.chef_spawn
},
+ communicate: None,
interacting: None,
name: name.clone(),
},
@@ -151,6 +159,11 @@ impl Game {
PacketS::Position { pos, rot } => {
self.packet_out
.push_back(PacketC::Position { player, pos, rot });
+ let player = self
+ .players
+ .get_mut(&player)
+ .ok_or(anyhow!("player does not exist"))?;
+ player.position = pos;
}
PacketS::Collide { player, force } => {
self.packet_out
@@ -224,6 +237,14 @@ impl Game {
player.interacting = if edge { Some(pos) } else { None };
}
+ PacketS::Communicate { message } => {
+ info!("{player} message {message:?}");
+ if let Some(player) = self.players.get_mut(&player) {
+ player.communicate = message.clone()
+ }
+ self.packet_out
+ .push_back(PacketC::Communicate { player, message })
+ }
}
Ok(())
}
diff --git a/server/src/protocol.rs b/server/src/protocol.rs
index 18b5f6fa..7eff2ba1 100644
--- a/server/src/protocol.rs
+++ b/server/src/protocol.rs
@@ -15,6 +15,14 @@ pub enum PacketS {
Position { pos: Vec2, rot: f32 },
Interact { pos: IVec2, edge: bool },
Collide { player: PlayerID, force: Vec2 },
+ Communicate { message: Option<Message> },
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "snake_case")]
+pub enum Message {
+ Text(String),
+ Item(ItemIndex),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
@@ -61,10 +69,14 @@ pub enum PacketC {
UpdateMap {
pos: IVec2,
tile: TileIndex,
- neighbours: [Option<TileIndex>; 4],
+ neighbors: [Option<TileIndex>; 4],
},
Collide {
player: PlayerID,
force: Vec2,
},
+ Communicate {
+ player: PlayerID,
+ message: Option<Message>,
+ },
}