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