diff options
author | metamuffin <metamuffin@disroot.org> | 2024-06-19 00:08:13 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-06-23 19:21:22 +0200 |
commit | 203a4309a762488a4de72123e2f08f229e607e1a (patch) | |
tree | 752e7ffade32c6d66ee02725280c3041e25d6194 /server/src | |
parent | fe0dd480d6e93098cddc71d596a8d7e61fec68ed (diff) | |
download | hurrycurry-203a4309a762488a4de72123e2f08f229e607e1a.tar hurrycurry-203a4309a762488a4de72123e2f08f229e607e1a.tar.bz2 hurrycurry-203a4309a762488a4de72123e2f08f229e607e1a.tar.zst |
character selection
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/game.rs | 14 | ||||
-rw-r--r-- | server/src/interaction.rs | 4 | ||||
-rw-r--r-- | server/src/main.rs | 7 | ||||
-rw-r--r-- | server/src/protocol.rs | 6 |
4 files changed, 23 insertions, 8 deletions
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, |