add scene management (create/delete)
This commit is contained in:
parent
e730f9a870
commit
8f5f82ff31
6 changed files with 58 additions and 0 deletions
|
@ -53,6 +53,9 @@ pub enum Request {
|
|||
CreateScene {
|
||||
title: String,
|
||||
},
|
||||
DeleteScene {
|
||||
scene: usize,
|
||||
},
|
||||
SetSceneGrid {
|
||||
scene: usize,
|
||||
grid_cell_size: f32,
|
||||
|
|
|
@ -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) {
|
||||
|
|
12
src/lib.rs
12
src/lib.rs
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue