aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-10-13 22:21:44 +0200
committermetamuffin <metamuffin@disroot.org>2024-10-13 22:21:44 +0200
commit8300b2f1853e026a2c3d5d1aa40a185341deba47 (patch)
tree5fe814992e917ea1a06c2e9faf1fd72bf5bb097b /server
parent21a9b4087b6612383ee4beb16c2576a4eeb6b38f (diff)
downloadhurrycurry-8300b2f1853e026a2c3d5d1aa40a185341deba47.tar
hurrycurry-8300b2f1853e026a2c3d5d1aa40a185341deba47.tar.bz2
hurrycurry-8300b2f1853e026a2c3d5d1aa40a185341deba47.tar.zst
fix compile for new rust nightly
Diffstat (limited to 'server')
-rw-r--r--server/client-lib/src/lib.rs2
-rw-r--r--server/src/entity/conveyor.rs13
-rw-r--r--server/src/entity/item_portal.rs13
-rw-r--r--server/src/server.rs19
4 files changed, 27 insertions, 20 deletions
diff --git a/server/client-lib/src/lib.rs b/server/client-lib/src/lib.rs
index 2bd8fb09..5d5e55d5 100644
--- a/server/client-lib/src/lib.rs
+++ b/server/client-lib/src/lib.rs
@@ -216,7 +216,7 @@ impl Game {
self.players_spatial_index.all(|p1, pos1| {
self.players_spatial_index.query(pos1, 2., |p2, _pos2| {
- if let Some([a, b]) = self.players.get_many_mut([&p1, &p2]) {
+ if let [Some(a), Some(b)] = self.players.get_many_mut([&p1, &p2]) {
a.movement.collide(&mut b.movement, dt)
}
})
diff --git a/server/src/entity/conveyor.rs b/server/src/entity/conveyor.rs
index e8ff34d7..6177ba9c 100644
--- a/server/src/entity/conveyor.rs
+++ b/server/src/entity/conveyor.rs
@@ -17,7 +17,7 @@
*/
use super::{Entity, EntityContext};
use crate::interaction::interact;
-use anyhow::{anyhow, Result};
+use anyhow::{anyhow, bail, Result};
use hurrycurry_protocol::{glam::IVec2, ItemIndex, ItemLocation};
#[derive(Debug, Clone)]
@@ -62,11 +62,12 @@ impl Entity for Conveyor {
}
self.cooldown = 0.;
- let [from, to] = c
- .game
- .tiles
- .get_many_mut([&self.from, &self.to])
- .ok_or(anyhow!("conveyor does ends in itself"))?;
+ if self.from == self.to {
+ bail!("conveyor does ends in itself")
+ }
+ let [Some(from), Some(to)] = c.game.tiles.get_many_mut([&self.from, &self.to]) else {
+ bail!("at least one conveyor end not on map");
+ };
interact(
&c.game.data,
diff --git a/server/src/entity/item_portal.rs b/server/src/entity/item_portal.rs
index 8eda7a3c..3ea33fa6 100644
--- a/server/src/entity/item_portal.rs
+++ b/server/src/entity/item_portal.rs
@@ -17,7 +17,7 @@
*/
use super::{Entity, EntityContext};
use crate::interaction::interact;
-use anyhow::{anyhow, Result};
+use anyhow::{bail, Result};
use hurrycurry_protocol::{glam::IVec2, ItemLocation};
#[derive(Debug, Default, Clone)]
@@ -28,11 +28,12 @@ pub struct ItemPortal {
impl Entity for ItemPortal {
fn tick(&mut self, c: EntityContext) -> Result<()> {
- let [from, to] = c
- .game
- .tiles
- .get_many_mut([&self.from, &self.to])
- .ok_or(anyhow!("conveyor does ends in itself"))?;
+ if self.from == self.to {
+ bail!("item portal ends in itself")
+ }
+ let [Some(from), Some(to)] = c.game.tiles.get_many_mut([&self.from, &self.to]) else {
+ bail!("at least one item portal end not on map");
+ };
if from.item.is_some() {
interact(
diff --git a/server/src/server.rs b/server/src/server.rs
index d8470fb8..18f78fc0 100644
--- a/server/src/server.rs
+++ b/server/src/server.rs
@@ -498,11 +498,14 @@ impl Server {
};
if let Some(base_pid) = other_pid {
- let [other, this] = self
- .game
- .players
- .get_many_mut([&pid, &base_pid])
- .ok_or(tre!("s.error.self_interact"))?;
+ if pid == base_pid {
+ return Err(tre!("s.error.self_interact"));
+ }
+ let [Some(other), Some(this)] =
+ self.game.players.get_many_mut([&pid, &base_pid])
+ else {
+ return Err(tre!("s.error.self_interact"));
+ };
if this.class == PlayerClass::Customer || other.class == PlayerClass::Customer {
return Err(tre!("s.error.customer_interact"));
@@ -633,8 +636,10 @@ impl Server {
self.game
.players_spatial_index
.query(pos1, 2., |p2, _pos2| {
- if let Some([a, b]) = self.game.players.get_many_mut([&p1, &p2]) {
- a.movement.collide(&mut b.movement, dt)
+ if p1 != p2 {
+ if let [Some(a), Some(b)] = self.game.players.get_many_mut([&p1, &p2]) {
+ a.movement.collide(&mut b.movement, dt)
+ }
}
})
});