From 529896a352fcde85e0def0324ebd47c2eb19890b Mon Sep 17 00:00:00 2001 From: Rusty Striker Date: Thu, 17 Jul 2025 19:03:46 +0300 Subject: [PATCH] implement SetSceneGrid --- src/api/mod.rs | 3 ++- src/game/mod.rs | 5 +++++ src/lib.rs | 14 ++++++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/api/mod.rs b/src/api/mod.rs index a853d93..1dffc46 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -51,7 +51,8 @@ pub enum Request { CreateScene { title: String, }, - SceneSetGrid { + SetSceneGrid { + scene: usize, grid_cell_size: f32, grid_offset: [f32; 2], }, diff --git a/src/game/mod.rs b/src/game/mod.rs index 61d65db..ad9c63c 100644 --- a/src/game/mod.rs +++ b/src/game/mod.rs @@ -25,6 +25,7 @@ pub trait GameImpl<'a, C: Character + Serialize + Deserialize<'a>, A: entry:: /// the list of available scenes fn scenes(&self) -> Vec; fn get_scene(&self, id: usize) -> Option<&Scene>; + fn get_scene_mut(&mut self, id: usize) -> Option<&mut Scene>; fn create_scene(&mut self, title: String); fn scene_visible(&mut self, scene: usize, visible: bool); fn create_token(&mut self, scene_id: usize, character: String, img_source: String, x: f32, y: f32) -> usize; @@ -208,6 +209,10 @@ impl<'a, C: Character + Serialize + Deserialize<'a>, A: entry::GameEntry + Se scene.visible_to_users = visible; } } + + fn get_scene_mut(&mut self, id: usize) -> Option<&mut Scene> { + self.scenes.get_mut(&id) + } } #[derive(Serialize, Deserialize, Default, Debug, Clone)] diff --git a/src/lib.rs b/src/lib.rs index a31ad25..c30695a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -169,10 +169,20 @@ impl GameServer { _ = broadcast.send((Some(id), scenes)); } } - api::Request::SceneSetGrid { + api::Request::SetSceneGrid { grid_cell_size, grid_offset, - } => todo!(), + scene, + } => { + if *self.users.get(&id).unwrap_or(&false) { + if let Some(scene) = self.game.get_scene_mut(scene) { + if let Some(map) = scene.map.as_mut() { + map.grid_cell_size = grid_cell_size; + map.grid_offset = grid_offset; + } + } + } + } api::Request::SceneSetVisible { scene, visible } => { if *self.users.get(&id).unwrap_or(&false) { self.game.scene_visible(scene, visible);