You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
3.4 KiB

4 years ago
4 years ago
1 year ago
4 years ago
1 year ago
1 year ago
1 year ago
  1. use libpso::packet::ship::*;
  2. use networking::serverstate::ClientId;
  3. use crate::{SendShipPacket, Clients};
  4. use entity::gateway::EntityGateway;
  5. pub async fn update_config<EG>(id: ClientId,
  6. update_config: UpdateConfig,
  7. clients: &Clients,
  8. entity_gateway: &mut EG)
  9. -> Result<Vec<(ClientId, SendShipPacket)>, anyhow::Error>
  10. where
  11. EG: EntityGateway + Clone + 'static,
  12. {
  13. clients.with_mut(id, |client| {
  14. let mut entity_gateway = entity_gateway.clone();
  15. Box::pin(async move {
  16. client.character.config.update(&update_config);
  17. entity_gateway.save_character(&client.character).await
  18. })}).await??;
  19. Ok(Vec::new())
  20. }
  21. pub async fn save_options<EG>(id: ClientId,
  22. save_options: SaveOptions,
  23. clients: &Clients,
  24. entity_gateway: &mut EG)
  25. -> Result<Vec<(ClientId, SendShipPacket)>, anyhow::Error>
  26. where
  27. EG: EntityGateway + Clone + 'static,
  28. {
  29. clients.with_mut(id, |client| {
  30. let mut entity_gateway = entity_gateway.clone();
  31. Box::pin(async move {
  32. client.character.option_flags = save_options.options;
  33. entity_gateway.save_character(&client.character).await
  34. })}).await??;
  35. Ok(Vec::new())
  36. }
  37. pub async fn keyboard_config<EG>(id: ClientId,
  38. keyboard_config: KeyboardConfig,
  39. clients: &Clients,
  40. entity_gateway: &mut EG)
  41. -> Result<Vec<(ClientId, SendShipPacket)>, anyhow::Error>
  42. where
  43. EG: EntityGateway + Clone + 'static,
  44. {
  45. clients.with_mut(id, |client| {
  46. let mut entity_gateway = entity_gateway.clone();
  47. Box::pin(async move {
  48. client.settings.settings.keyboard_config = keyboard_config.keyboard_config;
  49. entity_gateway.save_user_settings(&client.settings).await
  50. })}).await??;
  51. Ok(Vec::new())
  52. }
  53. pub async fn gamepad_config<EG>(id: ClientId,
  54. gamepad_config: GamepadConfig,
  55. clients: &Clients,
  56. entity_gateway: &mut EG)
  57. -> Result<Vec<(ClientId, SendShipPacket)>, anyhow::Error>
  58. where
  59. EG: EntityGateway + Clone + 'static,
  60. {
  61. clients.with_mut(id, |client| {
  62. let mut entity_gateway = entity_gateway.clone();
  63. Box::pin(async move {
  64. client.settings.settings.gamepad_config = gamepad_config.gamepad_config;
  65. entity_gateway.save_user_settings(&client.settings).await
  66. })}).await??;
  67. Ok(Vec::new())
  68. }
  69. pub async fn update_tech_menu<EG>(id: ClientId,
  70. update_tech_menu: UpdateTechMenu,
  71. clients: &Clients,
  72. entity_gateway: &mut EG)
  73. -> Result<Vec<(ClientId, SendShipPacket)>, anyhow::Error>
  74. where
  75. EG: EntityGateway + Clone + 'static,
  76. {
  77. clients.with_mut(id, |client| {
  78. let mut entity_gateway = entity_gateway.clone();
  79. Box::pin(async move {
  80. client.character.tech_menu.tech_menu = update_tech_menu.config;
  81. entity_gateway.save_character(&client.character).await
  82. })}).await??;
  83. Ok(Vec::new())
  84. }