@@ 17,9 17,9 @@
#![allow(clippy::too_many_arguments)] // bevy :(
#![allow(clippy::only_used_in_recursion)] // todo: remove this
-use std::cell::OnceCell;
+
use std::collections::HashMap;
-use std::net::IpAddr;
+
use crate::mathutil::rot2d;
use crate::ws::{StkTungsteniteServerConfig, StkTungsteniteServerPlugin, WsEvent};
@@ 42,10 42,10 @@ use starkingdoms_common::SaveModule;
use starkingdoms_common::{pack_savefile, unpack_savefile, SaveData};
use std::f32::consts::PI;
use std::fs;
-use std::str::FromStr;
-use std::sync::{Arc, OnceLock};
+
+use std::sync::{OnceLock};
use std::time::Duration;
-use crate::config::{PartsConfig, PlanetsConfig, ServerConfig, StkConfig};
+use crate::config::{PartsConfig, PhysicsSolver, PlanetsConfig, StkConfig};
pub mod component;
pub mod macros;
@@ 97,13 97,6 @@ pub struct UserToken {
pub expires: std::time::SystemTime,
}
-pub const REQUIRED_PERM_LEVEL: i32 = 0;
-
-#[derive(Deserialize)]
-struct KeyJson {
- app_key: String,
-}
-
static _SERVER_CONFIG: OnceLock<StkConfig> = OnceLock::new();
#[inline]
pub fn server_config() -> StkConfig {
@@ 173,13 166,16 @@ fn main() {
}
fn setup_integration_parameters(mut context: ResMut<RapierContext>) {
- context.integration_parameters.dt = 1.0 / 20.0;
- context.integration_parameters.joint_erp = 0.01;
- context.integration_parameters.erp = 0.1;
- //context.integration_parameters.num_solver_iterations = NonZeroUsize::new(1).unwrap();
- //context.integration_parameters.num_internal_pgs_iterations = 1;
- context.integration_parameters.max_penetration_correction = 0.5;
- //context.integration_parameters.switch_to_standard_pgs_solver();
+ context.integration_parameters = server_config().physics.parameters;
+
+ match server_config().physics.solver {
+ PhysicsSolver::SmallstepPGS => {
+ context.integration_parameters.switch_to_small_steps_pgs_solver();
+ },
+ PhysicsSolver::OldPGS => {
+ context.integration_parameters.switch_to_standard_pgs_solver();
+ }
+ }
}
fn spawn_planets(mut commands: Commands) {
info!("Spawning planets");
@@ 355,10 351,10 @@ fn on_message(
}
};
- if claims.permission_level < REQUIRED_PERM_LEVEL {
+ if claims.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, {REQUIRED_PERM_LEVEL} 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) }.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;
@@ 368,7 364,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 REQUIRED_PERM_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(),
@@ 2026,49 2022,25 @@ fn search_thrusters(
force.torque += thruster_force.torque;
*energy -= energy_lose_by;
}
- if PI / 4. < relative_angle && relative_angle < 3. * PI / 4. {
- if relative_pos.y < -0.48 {
- let thruster_force = ExternalForce::at_point(
- Vec2::new(-force_mult * angle.sin(), force_mult * angle.cos()),
- transform.translation.xy(),
- transform.translation.xy(),
- );
- force.force += thruster_force.force;
- force.torque += thruster_force.torque;
- *energy -= energy_lose_by;
- }
- /*if -0.48 < relative_pos.y && relative_pos.y < 0.48 {
- let thruster_force = ExternalForce::at_point(
- Vec2::new(-force_mult * angle.sin(), force_mult * angle.cos()),
- transform.translation.xy(),
- transform.translation.xy(),
- );
- force.force += thruster_force.force;
- force.torque += thruster_force.torque;
- *energy -= energy_lose_by;
- }*/
+ if PI / 4. < relative_angle && relative_angle < 3. * PI / 4. && relative_pos.y < -0.48 {
+ let thruster_force = ExternalForce::at_point(
+ Vec2::new(-force_mult * angle.sin(), force_mult * angle.cos()),
+ transform.translation.xy(),
+ transform.translation.xy(),
+ );
+ force.force += thruster_force.force;
+ force.torque += thruster_force.torque;
+ *energy -= energy_lose_by;
}
- if 5. * PI / 4. < relative_angle && relative_angle < 7. * PI / 4. {
- if relative_pos.y > 0.48 {
- let thruster_force = ExternalForce::at_point(
- Vec2::new(-force_mult * angle.sin(), force_mult * angle.cos()),
- transform.translation.xy(),
- transform.translation.xy(),
- );
- force.force += thruster_force.force;
- force.torque += thruster_force.torque;
- *energy -= energy_lose_by;
- }
- /*if -0.48 < relative_pos.y && relative_pos.y < 0.48 {
- let thruster_force = ExternalForce::at_point(
- Vec2::new(-force_mult * angle.sin(), force_mult * angle.cos()),
- transform.translation.xy(),
- transform.translation.xy(),
- );
- force.force += thruster_force.force;
- force.torque += thruster_force.torque;
- *energy -= energy_lose_by;
- }*/
+ if 5. * PI / 4. < relative_angle && relative_angle < 7. * PI / 4. && relative_pos.y > 0.48 {
+ let thruster_force = ExternalForce::at_point(
+ Vec2::new(-force_mult * angle.sin(), force_mult * angle.cos()),
+ transform.translation.xy(),
+ transform.translation.xy(),
+ );
+ force.force += thruster_force.force;
+ force.torque += thruster_force.torque;
+ *energy -= energy_lose_by;
}
}
if input.right {
@@ 2098,29 2070,25 @@ fn search_thrusters(
force.torque += thruster_force.torque;
*energy -= energy_lose_by;
}
- if PI / 4. < relative_angle && relative_angle < 3. * PI / 4. {
- if relative_pos.y > 0.48 {
- let thruster_force = ExternalForce::at_point(
- Vec2::new(-force_mult * angle.sin(), force_mult * angle.cos()),
- transform.translation.xy(),
- transform.translation.xy(),
- );
- force.force += thruster_force.force;
- force.torque += thruster_force.torque;
- *energy -= energy_lose_by;
- }
+ if PI / 4. < relative_angle && relative_angle < 3. * PI / 4. && relative_pos.y > 0.48 {
+ let thruster_force = ExternalForce::at_point(
+ Vec2::new(-force_mult * angle.sin(), force_mult * angle.cos()),
+ transform.translation.xy(),
+ transform.translation.xy(),
+ );
+ force.force += thruster_force.force;
+ force.torque += thruster_force.torque;
+ *energy -= energy_lose_by;
}
- if 5. * PI / 4. < relative_angle && relative_angle < 7. * PI / 4. {
- if relative_pos.y < -0.48 {
- let thruster_force = ExternalForce::at_point(
- Vec2::new(-force_mult * angle.sin(), force_mult * angle.cos()),
- transform.translation.xy(),
- transform.translation.xy(),
- );
- force.force += thruster_force.force;
- force.torque += thruster_force.torque;
- *energy -= energy_lose_by;
- }
+ if 5. * PI / 4. < relative_angle && relative_angle < 7. * PI / 4. && relative_pos.y < -0.48 {
+ let thruster_force = ExternalForce::at_point(
+ Vec2::new(-force_mult * angle.sin(), force_mult * angle.cos()),
+ transform.translation.xy(),
+ transform.translation.xy(),
+ );
+ force.force += thruster_force.force;
+ force.torque += thruster_force.torque;
+ *energy -= energy_lose_by;
}
}