M crates/unified/assets/config/world.wc.toml => crates/unified/assets/config/world.wc.toml +5 -0
@@ 7,6 7,11 @@ spawn_parts_interval_secs = 1
default_height = 50
default_width = 50
default_mass = 100
+joint_align_compliance = 0.0002
+joint_angle_compliance = 0.00000002
+joint_limit_compliance = 0.006
+joint_linear_damping = 4.0
+joint_angular_damping = 2.0
[hearty]
thrust = 500000
M crates/unified/src/config/world.rs => crates/unified/src/config/world.rs +5 -0
@@ 21,6 21,11 @@ pub struct WPartConfig {
pub default_width: f32,
pub default_height: f32,
pub default_mass: f32,
+ pub joint_align_compliance: f32,
+ pub joint_angle_compliance: f32,
+ pub joint_limit_compliance: f32,
+ pub joint_linear_damping: f32,
+ pub joint_angular_damping: f32,
}
#[derive(Deserialize, Asset, TypePath, Clone)]
M crates/unified/src/server/player.rs => crates/unified/src/server/player.rs +10 -5
@@ 5,6 5,7 @@ use crate::ecs::{DragRequestEvent, Part, Player, PlayerStorage};
use crate::server::system_sets::PlayerInputSet;
use crate::server::ConnectedNetworkEntity;
use crate::prelude::*;
+use crate::server::world_config::WorldConfigResource;
use bevy_replicon::prelude::{ClientId, FromClient};
use std::f32::consts::PI;
@@ 233,8 234,12 @@ fn dragging(
q_joints: Query<&Joints>,
clients: Query<&ConnectedNetworkEntity>,
q_ls_me: Query<Entity, With<crate::client::Me>>,
+ world_config: Res<WorldConfigResource>,
mut commands: Commands,
) {
+ let Some(world_config) = &world_config.config else {
+ return;
+ };
for FromClient {
client_id,
message: event,
@@ 350,12 355,12 @@ fn dragging(
.with_local_basis1(target_joint.0.transform.rotation.to_euler(EulerRot::ZYX).0 + PI
- source_joint.0.transform.rotation.to_euler(EulerRot::ZYX).0)
.with_limits(0.0, 0.0)
- .with_align_compliance(0.0002)
- .with_angle_compliance(0.00000002)
- .with_limit_compliance(0.006);
+ .with_align_compliance(world_config.part.joint_align_compliance)
+ .with_angle_compliance(world_config.part.joint_angle_compliance)
+ .with_limit_compliance(world_config.part.joint_limit_compliance);
let joint_damping = JointDamping {
- linear: 4.0,
- angular: 0.1,
+ linear: world_config.part.joint_linear_damping,
+ angular: world_config.part.joint_angular_damping,
};
let joint_id = commands.spawn((joint, joint_damping)).id();