summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/examples/client.rs1
-rw-r--r--server/src/game.rs14
-rw-r--r--server/src/interaction.rs4
-rw-r--r--server/src/main.rs7
-rw-r--r--server/src/protocol.rs6
5 files changed, 24 insertions, 8 deletions
diff --git a/server/examples/client.rs b/server/examples/client.rs
index 02c9c9e3..e22656d4 100644
--- a/server/examples/client.rs
+++ b/server/examples/client.rs
@@ -24,6 +24,7 @@ fn main() {
let mut toks = line.split(" ");
let packet = match toks.next().unwrap() {
"j" => PacketS::Join {
+ character: 0,
name: "test".to_string(),
},
"p" => PacketS::Position {
diff --git a/server/src/game.rs b/server/src/game.rs
index 35502d3c..c9881e7c 100644
--- a/server/src/game.rs
+++ b/server/src/game.rs
@@ -32,6 +32,7 @@ pub struct Tile {
pub struct Player {
pub name: String,
+ pub character: usize,
pub position: Vec2,
pub interacting: Option<IVec2>,
pub item: Option<Item>,
@@ -71,8 +72,10 @@ impl Game {
for (&id, player) in &self.players {
out.push(PacketC::AddPlayer {
id,
+ position: player.position,
+ character: player.character,
name: player.name.clone(),
- hand: player.item.as_ref().map(|i| i.kind),
+ item: player.item.as_ref().map(|i| i.kind),
})
}
for (&tile, tdata) in &self.tiles {
@@ -92,11 +95,12 @@ impl Game {
pub fn packet_in(&mut self, player: PlayerID, packet: PacketS) -> Result<()> {
match packet {
- PacketS::Join { name } => {
+ PacketS::Join { name, character } => {
self.players.insert(
player,
Player {
item: None,
+ character,
position: self.data.spawn,
interacting: None,
name: name.clone(),
@@ -105,7 +109,9 @@ impl Game {
self.packet_out.push_back(PacketC::AddPlayer {
id: player,
name,
- hand: None,
+ position: self.data.spawn,
+ character,
+ item: None,
});
}
PacketS::Leave => {
@@ -157,7 +163,7 @@ impl Game {
}
let tile_had_item = tile.item.is_some();
- let player_had_item = tile.item.is_some();
+ let player_had_item = player.item.is_some();
if let Some(effect) = interact(&self.data, edge, tile, player) {
match effect {
diff --git a/server/src/interaction.rs b/server/src/interaction.rs
index d43c71da..d822340f 100644
--- a/server/src/interaction.rs
+++ b/server/src/interaction.rs
@@ -3,6 +3,7 @@ use crate::{
game::{Involvement, Item, Player, Tile},
protocol::{ItemIndex, TileIndex},
};
+use log::info;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
@@ -101,6 +102,7 @@ pub fn interact(
if let Some(item) = &mut tile.item {
if item.kind == *input {
if item.active.is_none() {
+ info!("start active recipe {ri}");
item.active = Some(Involvement {
recipe: ri,
working: 1,
@@ -117,6 +119,7 @@ pub fn interact(
if let Some(active) = &mut item.active {
active.working += 1;
} else {
+ info!("start active recipe {ri}");
item.active = Some(Involvement {
recipe: ri,
working: 1,
@@ -137,6 +140,7 @@ pub fn interact(
let ok = (inputs[0] == on_tile && inputs[1] == in_hand)
|| (inputs[1] == on_tile && inputs[0] == in_hand);
if ok {
+ info!("instant recipe {ri}");
player.item = outputs[0].map(|kind| Item { kind, active: None });
tile.item = outputs[1].map(|kind| Item { kind, active: None });
return Some(InteractEffect::Produce);
diff --git a/server/src/main.rs b/server/src/main.rs
index c4df346e..45ee39dd 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -11,9 +11,9 @@ use tokio::{
};
use tokio_tungstenite::tungstenite::Message;
use undercooked::{
+ data::build_gamedata,
game::Game,
protocol::{PacketC, PacketS},
- data::build_gamedata,
};
#[tokio::main]
@@ -94,7 +94,10 @@ async fn main() -> Result<()> {
}
r = ws_listener.accept() => {
let (sock, addr) = r?;
- let sock = tokio_tungstenite::accept_async(sock).await?;
+ let Ok(sock) = tokio_tungstenite::accept_async(sock).await else {
+ warn!("invalid ws handshake");
+ continue
+ };
let (mut write, mut read) = sock.split();
let game = game.clone();
let mut rx = rx.resubscribe();
diff --git a/server/src/protocol.rs b/server/src/protocol.rs
index 4f04793f..6fe8ccd8 100644
--- a/server/src/protocol.rs
+++ b/server/src/protocol.rs
@@ -10,7 +10,7 @@ pub type RecipeIndex = usize;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case", tag = "type")]
pub enum PacketS {
- Join { name: String },
+ Join { name: String, character: usize },
Leave,
Position { pos: Vec2, rot: f32 },
Interact { pos: IVec2, edge: bool },
@@ -26,8 +26,10 @@ pub enum PacketC {
},
AddPlayer {
id: PlayerID,
+ position: Vec2,
+ character: usize,
name: String,
- hand: Option<ItemIndex>,
+ item: Option<ItemIndex>,
},
RemovePlayer {
id: PlayerID,