aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-06-17 13:32:18 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-17 13:32:18 +0200
commit5d2bd4a2a6e38d75a5168afc1ef9a6cbcd90ea36 (patch)
treecab52ea116eb19fc2a0a3b2158b2086b6db790a9 /server
parent3f23989c2829a4a99349d4670511d71c0f4af8e1 (diff)
downloadhurrycurry-5d2bd4a2a6e38d75a5168afc1ef9a6cbcd90ea36.tar
hurrycurry-5d2bd4a2a6e38d75a5168afc1ef9a6cbcd90ea36.tar.bz2
hurrycurry-5d2bd4a2a6e38d75a5168afc1ef9a6cbcd90ea36.tar.zst
active start / stop
Diffstat (limited to 'server')
-rw-r--r--server/src/game.rs45
-rw-r--r--server/src/protocol.rs26
2 files changed, 34 insertions, 37 deletions
diff --git a/server/src/game.rs b/server/src/game.rs
index 18bd6519..a9ee8f3d 100644
--- a/server/src/game.rs
+++ b/server/src/game.rs
@@ -8,6 +8,7 @@ struct TileData {
kind: Tile,
items: Vec<ID>,
active: bool,
+ progress: f32,
}
struct Player {
@@ -29,31 +30,32 @@ impl Game {
let mut g = Self::default();
for x in -5..5 {
for y in -5..5 {
- g.tiles.insert(IVec2 { x, y }, Tile::Floor.into());
+ g.tiles
+ .insert(IVec2 { x, y }, Tile("floor".to_string()).into());
}
}
for x in -5..5 {
- g.tiles.insert(IVec2 { x, y: -5 }, Tile::Table.into());
- g.tiles.insert(IVec2 { x, y: 4 }, Tile::Table.into());
+ g.tiles
+ .insert(IVec2 { x, y: -5 }, Tile("table".to_string()).into());
+ g.tiles
+ .insert(IVec2 { x, y: 4 }, Tile("table".to_string()).into());
}
for y in -5..5 {
- g.tiles.insert(IVec2 { x: -5, y }, Tile::Table.into());
- g.tiles.insert(IVec2 { x: 4, y }, Tile::Table.into());
+ g.tiles
+ .insert(IVec2 { x: -5, y }, Tile("table".to_string()).into());
+ g.tiles
+ .insert(IVec2 { x: 4, y }, Tile("table".to_string()).into());
}
g.tiles.extend(
- [
- ([-5, 1], Tile::Pan),
- ([-5, 2], Tile::Pan),
- ([4, 3], Tile::FlourBag),
- ]
- .map(|(k, v)| {
+ [([-5, 1], "pan"), ([-5, 2], "pan"), ([4, 3], "flour_bag")].map(|(k, v)| {
(
IVec2::from_array(k),
TileData {
active: false,
items: vec![],
- kind: v,
+ kind: Tile(v.to_string()).into(),
+ progress: 0.,
},
)
}),
@@ -72,19 +74,19 @@ impl Game {
out.push(PacketC::AddPlayer {
id,
name: player.name.clone(),
- hand: player.hand.map(|i| (i, self.items[&i])),
+ hand: player.hand.map(|i| (i, self.items[&i].clone())),
})
}
for (&pos, tdata) in &self.tiles {
out.push(PacketC::UpdateMap {
pos,
- tile: tdata.kind,
+ tile: tdata.kind.clone(),
});
for &id in &tdata.items {
out.push(PacketC::ProduceItem {
id,
pos,
- kind: self.items[&id],
+ kind: self.items[&id].clone(),
})
}
}
@@ -123,7 +125,10 @@ impl Game {
self.packet_out
.push_back(PacketC::Position { player, pos, rot });
}
- PacketS::Interact { pos } => {
+ PacketS::Interact { pos, edge } => {
+ if !edge {
+ return Ok(());
+ }
let tile = self
.tiles
.get_mut(&pos)
@@ -133,14 +138,15 @@ impl Game {
.get_mut(&player)
.ok_or(anyhow!("player does not exist"))?;
- if let Tile::FlourBag = tile.kind {
+ if tile.kind.0 == "flour_bag" {
info!("new flour");
- self.items.insert(self.item_id_counter, Item::Flour);
+ let item = Item("flour".to_string());
+ self.items.insert(self.item_id_counter, item.clone());
tile.items.push(self.item_id_counter);
self.packet_out.push_back(PacketC::ProduceItem {
id: self.item_id_counter,
pos,
- kind: Item::Flour,
+ kind: item,
});
self.item_id_counter += 1;
}
@@ -166,6 +172,7 @@ impl From<Tile> for TileData {
fn from(kind: Tile) -> Self {
Self {
kind,
+ progress: 0.,
active: false,
items: vec![],
}
diff --git a/server/src/protocol.rs b/server/src/protocol.rs
index 0218658d..a318a9b2 100644
--- a/server/src/protocol.rs
+++ b/server/src/protocol.rs
@@ -3,24 +3,13 @@ use serde::{Deserialize, Serialize};
pub type ID = u32;
-#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
-#[serde(rename_all = "snake_case")]
-pub enum Item {
- Flour,
- Water,
- Dough,
- Pancake,
-}
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(transparent)]
+pub struct Item(pub String);
-#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
-#[serde(rename_all = "snake_case")]
-pub enum Tile {
- Sink,
- FlourBag,
- Floor,
- Table,
- Pan,
-}
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(transparent)]
+pub struct Tile(pub String);
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
@@ -28,7 +17,7 @@ pub enum PacketS {
Join { name: String },
Leave,
Position { pos: Vec2, rot: f32 },
- Interact { pos: IVec2 },
+ Interact { pos: IVec2, edge: bool },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
@@ -69,6 +58,7 @@ pub enum PacketC {
},
SetActive {
tile: IVec2,
+ progress: f32,
},
UpdateMap {
pos: IVec2,