PROGRESS! mostly ui, got admin stuff
This commit is contained in:
parent
2658f3d28c
commit
e730f9a870
6 changed files with 198 additions and 68 deletions
|
@ -16,6 +16,7 @@ pub enum Request {
|
|||
Login(login::LoginRequest),
|
||||
Quit,
|
||||
Kick(String),
|
||||
Save,
|
||||
Shutdown,
|
||||
// Character stuff
|
||||
CreateCharacter,
|
||||
|
@ -57,12 +58,15 @@ pub enum Request {
|
|||
grid_cell_size: f32,
|
||||
grid_offset: [f32; 2],
|
||||
},
|
||||
SceneSetVisible {
|
||||
SetSceneVisible {
|
||||
scene: usize,
|
||||
visible: bool,
|
||||
},
|
||||
GetScene {
|
||||
id: usize,
|
||||
scene: usize,
|
||||
},
|
||||
ShowScene {
|
||||
scene: usize,
|
||||
},
|
||||
/// TODO: Perhaps remove it, as the client should auto get it on login and on scene list updates
|
||||
GetSceneList,
|
||||
|
@ -101,7 +105,7 @@ pub enum Response {
|
|||
grid_offset: Option<[f32; 2]>,
|
||||
},
|
||||
SceneList {
|
||||
scenes: Vec<(usize, String)>,
|
||||
scenes: Vec<(usize, String, bool)>,
|
||||
},
|
||||
MoveToken {
|
||||
token_id: usize,
|
||||
|
@ -110,6 +114,7 @@ pub enum Response {
|
|||
},
|
||||
SpawnToken(SpawnToken),
|
||||
CharacterCreated(usize),
|
||||
ConnectedPlayers(Vec<String>),
|
||||
Quit {
|
||||
id: String,
|
||||
},
|
||||
|
|
33
src/lib.rs
33
src/lib.rs
|
@ -69,6 +69,7 @@ impl GameServer {
|
|||
}
|
||||
|
||||
pub async fn save(&self) {
|
||||
println!("Saving game data!");
|
||||
let _ = tokio::fs::create_dir("data").await;
|
||||
if let Ok(json) = serde_json::to_string(self) {
|
||||
let _ = tokio::fs::write(GAME_SAVE_FILE, json.as_bytes()).await;
|
||||
|
@ -108,6 +109,8 @@ impl GameServer {
|
|||
// Send the list of scenes and chat history and such
|
||||
_ = broadcast.send((SendTo::User(login.username.clone()), self.get_scene_list(admin)));
|
||||
_ = broadcast.send((SendTo::User(login.username.clone()), self.get_last_messages(50)));
|
||||
let c = self.users.keys().cloned().collect();
|
||||
_ = broadcast.send((SendTo::All, api::Response::ConnectedPlayers(c)))
|
||||
} else {
|
||||
_ = broadcast.send((
|
||||
SendTo::User(id.clone()),
|
||||
|
@ -163,11 +166,26 @@ impl GameServer {
|
|||
}
|
||||
}
|
||||
}
|
||||
api::Request::GetScene { id: scene_id } => {
|
||||
if let Some(response) = self.get_scene(&id, scene_id) {
|
||||
api::Request::GetScene { scene } => {
|
||||
if let Some(response) = self.get_scene(&id, scene) {
|
||||
_ = broadcast.send((SendTo::User(id), response));
|
||||
}
|
||||
}
|
||||
api::Request::ShowScene { scene } => {
|
||||
if self.is_admin(&id) {
|
||||
if let Some(s) = self.game.get_scene_mut(scene) {
|
||||
// Force visible to players
|
||||
if !s.visible_to_users {
|
||||
s.visible_to_users = true;
|
||||
_ = broadcast.send((SendTo::AllBut(id.clone()), self.get_scene_list(false)));
|
||||
_ = broadcast.send((SendTo::User(id.clone()), self.get_scene_list(true)));
|
||||
}
|
||||
}
|
||||
if let Some(response) = self.get_scene(&id, scene) {
|
||||
_ = broadcast.send((SendTo::All, response))
|
||||
}
|
||||
}
|
||||
}
|
||||
api::Request::CreateScene { title } => {
|
||||
if self.is_admin(&id) {
|
||||
self.game.create_scene(title);
|
||||
|
@ -197,7 +215,7 @@ impl GameServer {
|
|||
}
|
||||
}
|
||||
}
|
||||
api::Request::SceneSetVisible { scene, visible } => {
|
||||
api::Request::SetSceneVisible { scene, visible } => {
|
||||
if self.is_admin(&id) {
|
||||
self.game.scene_visible(scene, visible);
|
||||
_ = broadcast.send((SendTo::AllBut(id.clone()), self.get_scene_list(false)));
|
||||
|
@ -272,19 +290,24 @@ impl GameServer {
|
|||
if self.users.contains_key(&id) {
|
||||
self.users.remove(&id);
|
||||
}
|
||||
_ = broadcast.send((SendTo::All, api::Response::Quit { id }));
|
||||
// _ = broadcast.send((SendTo::All, api::Response::Quit { id }));
|
||||
let c = self.users.keys().cloned().collect();
|
||||
_ = broadcast.send((SendTo::All, api::Response::ConnectedPlayers(c)))
|
||||
}
|
||||
api::Request::Kick(id) => {
|
||||
if self.users.contains_key(&id) {
|
||||
self.users.remove(&id);
|
||||
}
|
||||
_ = broadcast.send((SendTo::User(id), api::Response::Shutdown));
|
||||
let c = self.users.keys().cloned().collect();
|
||||
_ = broadcast.send((SendTo::All, api::Response::ConnectedPlayers(c)))
|
||||
}
|
||||
api::Request::Shutdown => {
|
||||
if self.is_admin(&id) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
api::Request::Save => self.save().await,
|
||||
api::Request::CharacterDisplay { id: _ } => {}
|
||||
api::Request::CharacterInputs { id: _ } => todo!(),
|
||||
api::Request::CharacterGetField { id: _, field: _ } => todo!(),
|
||||
|
@ -313,7 +336,7 @@ impl GameServer {
|
|||
.map(|id| self.game.get_scene(*id).map(|s| (id, s)))
|
||||
.flatten()
|
||||
.filter(|(_, scene)| admin || scene.visible_to_users)
|
||||
.map(|(id, s)| (*id, s.title.to_string()))
|
||||
.map(|(id, s)| (*id, s.title.to_string(), s.visible_to_users))
|
||||
.collect::<Vec<_>>();
|
||||
api::Response::SceneList { scenes }
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue