aboutsummaryrefslogtreecommitdiff
path: root/server/src/game.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/game.rs')
-rw-r--r--server/src/game.rs24
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(())