~starkingdoms/starkingdoms

37f85fab3c0fb8ff38f810a1054471cfcaeaaa29 — ghostly_zsh 25 days ago 5c742cc
feat: configify bouncy joints
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();