From 2baac6a6fe52aa501c1c556ec0c019b57daf1ac8 Mon Sep 17 00:00:00 2001 From: ghostlyzsh Date: Wed, 10 Apr 2024 22:52:38 -0500 Subject: [PATCH] config put into res, some other things i dont remember --- server/src/config.rs | 7 +- server/src/main.rs | 90 ++++++++++--------- .../src/pages/ShipEditor.svelte | 8 +- 3 files changed, 57 insertions(+), 48 deletions(-) diff --git a/server/src/config.rs b/server/src/config.rs index 06cfa8c48aef312307fcfb806ad4df9808c8b2bc..6d3a62655335f152c1d691f993efebe43a87c1c7 100644 --- a/server/src/config.rs +++ b/server/src/config.rs @@ -15,12 +15,13 @@ // along with this program. If not, see . use crate::component::{PartType, PlanetType}; +use bevy::ecs::system::Resource; use bevy_rapier2d::rapier::dynamics::IntegrationParameters; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::net::IpAddr; -#[derive(Serialize, Deserialize, Debug, Clone)] +#[derive(Resource, Serialize, Deserialize, Debug, Clone)] pub struct StkConfig { pub security: SecurityConfig, pub server: ServerConfig, @@ -65,7 +66,7 @@ pub enum PhysicsSolver { OldPGS, } -#[derive(Serialize, Deserialize, Debug, Clone)] +#[derive(Resource, Serialize, Deserialize, Debug, Clone)] pub struct PlanetsConfig { pub planets: HashMap, } @@ -75,7 +76,7 @@ pub struct PlanetConfig { pub mass: f32, } -#[derive(Serialize, Deserialize, Debug, Clone)] +#[derive(Resource, Deserialize, Debug, Clone)] pub struct PartsConfig { pub parts: HashMap, } diff --git a/server/src/main.rs b/server/src/main.rs index 9fd5577a0d82e13abf8bb9f4ea03e253b2641a06..962e03ef31bd873a704d84c1bcbe837148cadede 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -58,6 +58,22 @@ struct StkPluginGroup; pub static CLIENT_SCALE: f32 = 50.0; pub static PART_HALF_SIZE: f32 = 25.0; +static _SERVER_CONFIG: OnceLock = OnceLock::new(); +#[inline] +pub fn server_config() -> StkConfig { + _SERVER_CONFIG.get().unwrap().clone() +} +static _PARTS_CONFIG: OnceLock = OnceLock::new(); +#[inline] +pub fn parts_config() -> PartsConfig { + _PARTS_CONFIG.get().unwrap().clone() +} +static _PLANETS_CONFIG: OnceLock = OnceLock::new(); +#[inline] +pub fn planets_config() -> PlanetsConfig { + _PLANETS_CONFIG.get().unwrap().clone() +} + #[cfg(debug_assertions)] impl PluginGroup for StkPluginGroup { fn build(self) -> PluginGroupBuilder { @@ -97,47 +113,30 @@ pub struct UserToken { pub expires: std::time::SystemTime, } -static _SERVER_CONFIG: OnceLock = OnceLock::new(); -#[inline] -pub fn server_config() -> StkConfig { - _SERVER_CONFIG.get().unwrap().clone() -} -static _PARTS_CONFIG: OnceLock = OnceLock::new(); -#[inline] -pub fn parts_config() -> PartsConfig { - _PARTS_CONFIG.get().unwrap().clone() -} -static _PLANETS_CONFIG: OnceLock = OnceLock::new(); -#[inline] -pub fn planets_config() -> PlanetsConfig { - _PLANETS_CONFIG.get().unwrap().clone() -} - fn main() { - { - // read the server main config - let server_config = fs::read_to_string("/etc/starkingdoms/config.toml").unwrap(); - let parts_config = fs::read_to_string("/etc/starkingdoms/parts.toml").unwrap(); - let planets_config = fs::read_to_string("/etc/starkingdoms/planets.toml").unwrap(); - - let server_config: StkConfig = toml::from_str(&server_config).unwrap(); - _SERVER_CONFIG.set(server_config).unwrap(); - let parts_config: PartsConfig = toml::from_str(&parts_config).unwrap(); - _PARTS_CONFIG.set(parts_config).unwrap(); - let planets_config: PlanetsConfig = toml::from_str(&planets_config).unwrap(); - _PLANETS_CONFIG.set(planets_config).unwrap(); - } - - let cfg = server_config(); + // read the server main config + let server_config = fs::read_to_string("/etc/starkingdoms/config.toml").unwrap(); + let parts_config = fs::read_to_string("/etc/starkingdoms/parts.toml").unwrap(); + let planets_config = fs::read_to_string("/etc/starkingdoms/planets.toml").unwrap(); + + let server_config: StkConfig = toml::from_str(&server_config).unwrap(); + _SERVER_CONFIG.set(server_config.clone()).unwrap(); + let parts_config: PartsConfig = toml::from_str(&parts_config).unwrap(); + _PARTS_CONFIG.set(parts_config.clone()).unwrap(); + let planets_config: PlanetsConfig = toml::from_str(&planets_config).unwrap(); + _PLANETS_CONFIG.set(planets_config.clone()).unwrap(); App::new() .insert_resource(AppKeys { - app_key: cfg.security.app_key.as_bytes().to_vec(), + app_key: server_config.security.app_key.as_bytes().to_vec(), }) .insert_resource(StkTungsteniteServerConfig { - addr: cfg.server.bind.ip, - port: cfg.server.bind.port, + addr: server_config.server.bind.ip, + port: server_config.server.bind.port, }) + .insert_resource(server_config.clone()) + .insert_resource(parts_config) + .insert_resource(planets_config) .add_plugins(StkPluginGroup) .insert_resource(RapierConfiguration { gravity: Vect { x: 0.0, y: 0.0 }, @@ -145,7 +144,7 @@ fn main() { }) .init_resource::() .add_plugins(RapierPhysicsPlugin::::pixels_per_meter( - cfg.world.pixels_per_meter, + server_config.world.pixels_per_meter, )) .add_plugins(StkTungsteniteServerPlugin) .add_systems(Startup, setup_integration_parameters) @@ -161,16 +160,16 @@ fn main() { ) .add_systems(FixedUpdate, save_eligibility) .add_systems(FixedUpdate, convert_modules) - .insert_resource(Time::::from_seconds(cfg.server.world_fixed_timestep)) + .insert_resource(Time::::from_seconds(server_config.server.world_fixed_timestep)) .run(); info!("Goodbye!"); } -fn setup_integration_parameters(mut context: ResMut) { - context.integration_parameters = server_config().physics.parameters; +fn setup_integration_parameters(mut context: ResMut, server_config: Res) { + context.integration_parameters = server_config.physics.parameters; - match server_config().physics.solver { + match server_config.physics.solver { PhysicsSolver::SmallstepPGS => { context .integration_parameters @@ -246,9 +245,10 @@ fn module_spawn( mut module_timer: ResMut, part_query: Query<&PartType, Without>, mut packet_send: EventWriter, + server_config: Res, ) { if module_timer.0.tick(time.delta()).just_finished() - && part_query.iter().count() < server_config().server.max_free_parts + && part_query.iter().count() < server_config.server.max_free_parts { let angle: f32 = { let mut rng = rand::thread_rng(); @@ -335,6 +335,7 @@ fn on_message( mut packet_recv: Local>, mut packet_event_send: ResMut>, app_keys: Res, + server_config: Res, ) { let mut event_queue = Vec::new(); for ev in packet_recv.read(&packet_event_send) { @@ -364,11 +365,11 @@ fn on_message( }; if claims.permission_level - < server_config().security.required_permission_level + < server_config.security.required_permission_level { event_queue.push(WsEvent::Send { to: *from, - message: Packet::Message { message_type: MessageType::Error, actor: "SERVER".to_string(), content: format!("Permission level {} is too low, {} is required. If your permissions were just changed, you need to log out and log back in for the change to take effect. If you believe this is a mistake, contact StarKingdoms staff.", claims.permission_level, server_config().security.required_permission_level) }.into(), + message: Packet::Message { message_type: MessageType::Error, actor: "SERVER".to_string(), content: format!("Permission level {} is too low, {} is required. If your permissions were just changed, you need to log out and log back in for the change to take effect. If you believe this is a mistake, contact StarKingdoms staff.", claims.permission_level, server_config.security.required_permission_level) }.into(), }); event_queue.push(WsEvent::Close { addr: *from }); continue; @@ -378,7 +379,7 @@ fn on_message( to: *from, message: Packet::Message { message_type: MessageType::Server, actor: "StarKingdoms Team".to_string(), content: "Thank you for participating in the StarKingdoms private alpha! Your feedback is essential to improving the game, so please give us any feedback you have in the Discord! <3".to_string() }.into(), }); - } else if server_config().security.required_permission_level != 0 { + } else if server_config.security.required_permission_level != 0 { event_queue.push(WsEvent::Send { to: *from, message: Packet::Message { message_type: MessageType::Error, actor: "SERVER".to_string(), content: "Authentication is required to join this server at the moment. Log in and try again, or try again later.".to_string() }.into(), @@ -2135,6 +2136,7 @@ fn gravity_update( With, >, planet_query: Query<(&Transform, &ReadMassProperties), With>, + server_config: Res, ) { for (part_transform, part_mp, mut forces, mut impulses) in &mut part_query { impulses.impulse = Vec2::ZERO; @@ -2149,7 +2151,7 @@ fn gravity_update( let planet_translate = planet_transform.translation; let distance = planet_translate.distance(part_translate); let force = - server_config().world.gravity * ((part_mass * planet_mass) / (distance * distance)); + server_config.world.gravity * ((part_mass * planet_mass) / (distance * distance)); let direction = (planet_translate - part_translate).normalize() * force; /*let gravity_force = ExternalForce::at_point( direction.xy(), diff --git a/starkingdoms-client/src/pages/ShipEditor.svelte b/starkingdoms-client/src/pages/ShipEditor.svelte index 6636515c32c953bde01c67ae4f07abba332dbb2e..6fff70bb9e830bb7f3a5ef42031b1e14626e0eee 100644 --- a/starkingdoms-client/src/pages/ShipEditor.svelte +++ b/starkingdoms-client/src/pages/ShipEditor.svelte @@ -308,6 +308,12 @@ function load_save_data(save: any) { grid = new Map(); + for (let [type, count] of save[1]) { + part_counts.set(type, { + used: 0, + available: count, + }); + } place(0, 0, [PartType.Hearty, save[0]], 2); } @@ -410,7 +416,7 @@ let packed_savefile = __pack_save_for_api(save_data); - let r = await fetch(config.environments[3].apiBaseUrl + "/sign_save", { + let r = await fetch(config.environments[2].apiBaseUrl + "/sign_save", { method: "POST", headers: { "Content-Type": "application/json",