From 37f85fab3c0fb8ff38f810a1054471cfcaeaaa29 Mon Sep 17 00:00:00 2001 From: ghostly_zsh Date: Thu, 20 Nov 2025 20:10:48 -0600 Subject: [PATCH] feat: configify bouncy joints --- crates/unified/assets/config/world.wc.toml | 5 +++++ crates/unified/src/config/world.rs | 5 +++++ crates/unified/src/server/player.rs | 15 ++++++++++----- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/crates/unified/assets/config/world.wc.toml b/crates/unified/assets/config/world.wc.toml index f3cb64053f7a95db94859cc440058d746801f814..cdd6334c8d21abade962d94d0efb9c6a8eb87eaf 100644 --- a/crates/unified/assets/config/world.wc.toml +++ b/crates/unified/assets/config/world.wc.toml @@ -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 diff --git a/crates/unified/src/config/world.rs b/crates/unified/src/config/world.rs index 498f6794f9858b60eb94a02b0c6e3ce06fe6d8ff..49e0cd9a00965485f3e11720f944fa154621205d 100644 --- a/crates/unified/src/config/world.rs +++ b/crates/unified/src/config/world.rs @@ -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)] diff --git a/crates/unified/src/server/player.rs b/crates/unified/src/server/player.rs index d13315e223ad025c031895fc2e537758f6872321..9d2c755a11be602fe7ac6082fb183f32a250f840 100644 --- a/crates/unified/src/server/player.rs +++ b/crates/unified/src/server/player.rs @@ -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>, + world_config: Res, 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();