diff options
Diffstat (limited to 'server/src/game.rs')
| -rw-r--r-- | server/src/game.rs | 24 | 
1 files changed, 19 insertions, 5 deletions
| diff --git a/server/src/game.rs b/server/src/game.rs index 14d096e1..4f724446 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -3,7 +3,7 @@ use crate::{      protocol::{ItemID, ItemIndex, PacketC, PacketS, PlayerID, RecipeIndex, TileIndex},      recipes::Gamedata,  }; -use anyhow::{anyhow, Result}; +use anyhow::{anyhow, bail, Result};  use glam::IVec2;  use log::info;  use std::{ @@ -26,6 +26,7 @@ pub struct Tile {  struct Player {      name: String, +    interacting: bool,      hand: Option<ItemID>,  } @@ -57,7 +58,7 @@ impl Game {          for x in -5..5 {              g.tiles.insert(                  IVec2 { x, y: -5 }, -                gamedata.get_tile("table").unwrap().into(), +                gamedata.get_tile("counter").unwrap().into(),              );              g.tiles.insert(                  IVec2 { x, y: 4 }, @@ -77,10 +78,14 @@ impl Game {          g.tiles.extend(              [ +                ([1, 4], "pan"),                  ([2, 4], "pan"), -                ([3, 4], "pan"), -                ([4, 3], "meat-spawn"), -                ([4, 1], "trash"), +                ([-5, 2], "sink"), +                ([-5, 3], "dirty-plate-spawn"), +                ([4, 0], "flour-spawn"), +                ([4, 1], "tomato-spawn"), +                ([4, 2], "raw-steak-spawn"), +                ([4, -4], "trash"),              ]              .map(|(k, v)| (IVec2::from_array(k), gamedata.get_tile(v).unwrap().into())),          ); @@ -128,6 +133,7 @@ impl Game {                      player,                      Player {                          hand: None, +                        interacting: false,                          name: name.clone(),                      },                  ); @@ -153,6 +159,8 @@ impl Game {                      .push_back(PacketC::Position { player, pos, rot });              }              PacketS::Interact { pos, edge } => { +                info!("interact {pos:?} edge={edge}"); +                  let pid = player;                  let player = self                      .players @@ -163,6 +171,10 @@ impl Game {                      .get_mut(&pos)                      .ok_or(anyhow!("tile does not exist"))?; +                if edge == player.interacting { +                    bail!("already (not) interacting") +                } +                  let items = tile.items.iter().map(|e| self.items[e]).collect::<Vec<_>>();                  let tilekind = tile.kind;                  let hand = player.hand.map(|e| self.items[&e]); @@ -212,6 +224,8 @@ impl Game {                          }                      },                  ); + +                player.interacting = edge;              }          }          Ok(()) | 
