diff options
Diffstat (limited to 'server/src/entity/player_portal.rs')
-rw-r--r-- | server/src/entity/player_portal.rs | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/server/src/entity/player_portal.rs b/server/src/entity/player_portal.rs index 6ee04f15..11442677 100644 --- a/server/src/entity/player_portal.rs +++ b/server/src/entity/player_portal.rs @@ -15,11 +15,9 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ -use super::EntityT; -use crate::game::Game; +use super::{EntityContext, EntityT}; use anyhow::{anyhow, Result}; use hurrycurry_protocol::{glam::Vec2, PacketC}; -use std::collections::VecDeque; #[derive(Debug, Default, Clone)] pub struct PlayerPortal { @@ -28,19 +26,21 @@ pub struct PlayerPortal { } impl EntityT for PlayerPortal { - fn tick( - &mut self, - game: &mut Game, - _packet_out: &mut VecDeque<PacketC>, - _dt: f32, - ) -> Result<()> { + fn tick(&mut self, c: EntityContext) -> Result<()> { let mut players = Vec::new(); - game.players_spatial_index + c.game + .players_spatial_index .query(self.from, 0.5, |pid, _| players.push(pid)); - for p in players { - let p = game.players.get_mut(&p).ok_or(anyhow!("player missing"))?; + for pid in players { + let p = c + .game + .players + .get_mut(&pid) + .ok_or(anyhow!("player missing"))?; p.movement.position = self.to; + c.packet_out + .push_back(PacketC::MovementSync { player: pid }); } Ok(()) |