From 0494c19c47fcf26382f055c658e7c2c9d737b55a Mon Sep 17 00:00:00 2001 From: ghostly_zsh Date: Thu, 11 Jun 2026 17:54:21 -0500 Subject: [PATCH] netcode fix: dumb stupid interpolation works when there's no inconsistent delay or loss or reordering of packets --- crates/unified/src/client/interpolation.rs | 64 +++++++++++++++---- crates/unified/src/client/mod.rs | 2 +- crates/unified/src/client/parts.rs | 15 +++-- .../src/client/planet/incoming_planets.rs | 17 ++++- crates/unified/src/shared/net.rs | 4 +- 5 files changed, 81 insertions(+), 21 deletions(-) diff --git a/crates/unified/src/client/interpolation.rs b/crates/unified/src/client/interpolation.rs index 065101db071c640ca6aa461d74641990f68921cb..4809501c94fc15d008e636346aabaf1077d3a7aa 100644 --- a/crates/unified/src/client/interpolation.rs +++ b/crates/unified/src/client/interpolation.rs @@ -1,3 +1,4 @@ +use std::f32::consts::PI; use std::time::{Duration}; use avian2d::parry::transformation::utils::transform; use crate::prelude::*; @@ -5,34 +6,71 @@ use crate::prelude::*; pub fn interpolation_plugin(app: &mut App) { app .add_systems(Update, update_interpolation_info) + .add_systems(Update, sync_non_interpolated_transforms) .add_systems(Update, do_interpolation); } #[derive(Component, Debug)] -pub struct TransformInterpolationInfo { +pub struct TranslationInterpolationInfo { pub last_dt: Duration, pub this_tick_start: bevy::platform::time::Instant, - pub latest_transform: Transform, - pub last_transform: Transform, + pub latest_position: Vec2, + pub last_position: Vec2, +} +#[derive(Component, Debug)] +pub struct RotationInterpolationInfo { + pub last_dt: Duration, + pub this_tick_start: bevy::platform::time::Instant, + pub last_angular_velocity: f32, + pub latest_rotation: f32, + pub last_rotation: f32, } fn update_interpolation_info( - mut interpolation_query: Query<(&Transform, &mut TransformInterpolationInfo), Changed>, - time: Res