add scene management (create/delete)

This commit is contained in:
Rusty Striker 2025-07-28 18:57:20 +03:00
parent e730f9a870
commit 8f5f82ff31
Signed by: RustyStriker
GPG key ID: 87E4D691632DFF15
6 changed files with 58 additions and 0 deletions

View file

@ -53,6 +53,9 @@ pub enum Request {
CreateScene {
title: String,
},
DeleteScene {
scene: usize,
},
SetSceneGrid {
scene: usize,
grid_cell_size: f32,

View file

@ -189,6 +189,10 @@ impl<'a, C: Character<A> + Serialize + Deserialize<'a>, A: entry::GameEntry + Se
},
);
}
/// Deletes a scene and returns true if the scene existed
pub fn delete_scene(&mut self, scene: usize) -> Option<Scene> {
self.scenes.remove(&scene)
}
pub fn scene_visible(&mut self, scene: usize, visible: bool) {
if let Some(scene) = self.scenes.get_mut(&scene) {

View file

@ -193,6 +193,18 @@ impl GameServer {
_ = broadcast.send((SendTo::User(id), scenes));
}
}
api::Request::DeleteScene { scene } => {
if self.is_admin(&id) {
if let Some(scene) = self.game.delete_scene(scene) {
if scene.visible_to_users {
// Only update the players if they knew the scene existed
_ = broadcast.send((SendTo::AllBut(id.clone()), self.get_scene_list(false)));
}
// but always update the admin
_ = broadcast.send((SendTo::User(id), self.get_scene_list(true)));
}
}
}
api::Request::SetSceneGrid {
grid_cell_size,
grid_offset,