~starkingdoms/starkingdoms

2baac6a6fe52aa501c1c556ec0c019b57daf1ac8 — ghostlyzsh 1 year, 8 months ago 71fcdf0
config put into res, some other things i dont remember
3 files changed, 57 insertions(+), 48 deletions(-)

M server/src/config.rs
M server/src/main.rs
M starkingdoms-client/src/pages/ShipEditor.svelte
M server/src/config.rs => server/src/config.rs +4 -3
@@ 15,12 15,13 @@
//     along with this program.  If not, see <https://www.gnu.org/licenses/>.

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<PlanetType, PlanetConfig>,
}


@@ 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<PartType, PartConfig>,
}

M server/src/main.rs => server/src/main.rs +46 -44
@@ 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<StkConfig> = OnceLock::new();
#[inline]
pub fn server_config() -> StkConfig {
    _SERVER_CONFIG.get().unwrap().clone()
}
static _PARTS_CONFIG: OnceLock<PartsConfig> = OnceLock::new();
#[inline]
pub fn parts_config() -> PartsConfig {
    _PARTS_CONFIG.get().unwrap().clone()
}
static _PLANETS_CONFIG: OnceLock<PlanetsConfig> = 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<StkConfig> = OnceLock::new();
#[inline]
pub fn server_config() -> StkConfig {
    _SERVER_CONFIG.get().unwrap().clone()
}
static _PARTS_CONFIG: OnceLock<PartsConfig> = OnceLock::new();
#[inline]
pub fn parts_config() -> PartsConfig {
    _PARTS_CONFIG.get().unwrap().clone()
}
static _PLANETS_CONFIG: OnceLock<PlanetsConfig> = 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::<ModuleTimer>()
        .add_plugins(RapierPhysicsPlugin::<NoUserData>::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::<Fixed>::from_seconds(cfg.server.world_fixed_timestep))
        .insert_resource(Time::<Fixed>::from_seconds(server_config.server.world_fixed_timestep))
        .run();

    info!("Goodbye!");
}

fn setup_integration_parameters(mut context: ResMut<RapierContext>) {
    context.integration_parameters = server_config().physics.parameters;
fn setup_integration_parameters(mut context: ResMut<RapierContext>, server_config: Res<StkConfig>) {
    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<ModuleTimer>,
    part_query: Query<&PartType, Without<Attach>>,
    mut packet_send: EventWriter<WsEvent>,
    server_config: Res<StkConfig>,
) {
    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<ManualEventReader<WsEvent>>,
    mut packet_event_send: ResMut<Events<WsEvent>>,
    app_keys: Res<AppKeys>,
    server_config: Res<StkConfig>,
) {
    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<PartType>,
    >,
    planet_query: Query<(&Transform, &ReadMassProperties), With<PlanetType>>,
    server_config: Res<StkConfig>,
) {
    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(),

M starkingdoms-client/src/pages/ShipEditor.svelte => starkingdoms-client/src/pages/ShipEditor.svelte +7 -1
@@ 308,6 308,12 @@

  function load_save_data(save: any) {
    grid = new Map();
    for (let [type, count] of save[1]) {
      part_counts.set(<PartType>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",