From 49bd9f127faebbc4d22415f262eb7672e854a720 Mon Sep 17 00:00:00 2001 From: Niko Marmeladkov Date: Sat, 24 Oct 2026 21:46:01 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=B7=D0=B3=D0=B0=D0=BD:=20=D0=B4?= =?UTF-8?q?=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE=D1=81=D1=82=D0=B8=D0=BA=D0=B0=20?= =?UTF-8?q?SOURCE=5FRS=5FPHYSGUN=5FDEBUG=20(=D0=BE=D1=88=D0=B8=D0=B1=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B8=20=D1=81=D0=BA=D0=BE=D1=80=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=20=D1=80=D0=B0=D0=B7=20=D0=B2=2030=20=D0=BA=D0=B0=D0=B4?= =?UTF-8?q?=D1=80=D0=BE=D0=B2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/client/src/sandbox.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/crates/client/src/sandbox.rs b/crates/client/src/sandbox.rs index 267d6d4..176dda3 100644 --- a/crates/client/src/sandbox.rs +++ b/crates/client/src/sandbox.rs @@ -428,6 +428,26 @@ pub fn hold(world: &mut World, grab: &mut Grab, origin: Vec3, direction: Vec3, d // Компенсация вращения: без неё угловая скорость уводила бы точку захвата // с луча, и P-регулятор догонял бы её рывками. let velocity = clamp_speed(point_velocity - omega.cross(arm), PHYSGUN_MAX_SPEED); + // Диагностика по требованию: `SOURCE_RS_PHYSGUN_DEBUG=1` печатает раз в + // 30 кадров рассогласование и скорости — по числам видно, где теряется + // скорость (цель, пружина или тело). + if std::sync::OnceLock::::new() + .get_or_init(|| std::env::var_os("SOURCE_RS_PHYSGUN_DEBUG").is_some()) + == &true + { + use std::sync::atomic::{AtomicU32, Ordering}; + static COUNTER: AtomicU32 = AtomicU32::new(0); + if COUNTER.fetch_add(1, Ordering::Relaxed) % 30 == 0 { + eprintln!( + "PHYSGUN: error={:.1} target_v={:.0} point_v={:.0} body_v={:.0} dist={:.0}", + (target - point).length(), + target_velocity.length(), + point_velocity.length(), + velocity.length(), + grab.distance + ); + } + } world.physics.set_velocity(grab.body, velocity); world.physics.set_angular_velocity(grab.body, omega); }