D crates/unified/src/client/interpolation.rs => crates/unified/src/client/interpolation.rs +0 -69
@@ 1,69 0,0 @@
-use std::time::Duration;
-use bevy_replicon::client::confirm_history::ConfirmHistory;
-use bevy_replicon::prelude::RepliconTick;
-use web_time::Instant;
-use crate::prelude::*;
-use crate::shared::plugins::TICK_RATE;
-
-const MAX_INTERPOLATION_DURATION: Duration = Duration::from_millis(500);
-
-#[derive(Component)]
-pub struct TransformInterpolation {
- start: Transform,
- end: Transform,
- end_tick: RepliconTick,
- duration: Duration,
- end_received_at: Instant,
-}
-
-impl TransformInterpolation {
- pub fn new(transform: Transform, tick: RepliconTick) -> Self {
- Self {
- start: transform,
- end: transform,
- end_tick: tick,
- duration: Duration::ZERO,
- end_received_at: Instant::now(),
- }
- }
-}
-
-pub fn transform_interpolation_plugin(app: &mut App) {
- app.add_systems(Update, (record_transform_changes, apply_transform_interpolation).chain());
-}
-
-// must run before `apply_transform_interpolation`
-fn record_transform_changes(
- mut entities: Query<(&Transform, &ConfirmHistory, &mut TransformInterpolation), Changed<Transform>>,
-) {
- let now = Instant::now();
- for (transform, confirm_history, mut interpolation) in &mut entities {
- let tick = confirm_history.last_tick();
- let tick_delta = tick - interpolation.end_tick;
- let duration = Duration::from_secs_f64(tick_delta as f64 / TICK_RATE).min(MAX_INTERPOLATION_DURATION);
-
- interpolation.start = interpolation.end;
- interpolation.end = *transform;
- interpolation.end_tick = tick;
- interpolation.duration = duration;
- interpolation.end_received_at = now;
- }
-}
-
-fn apply_transform_interpolation(mut entities: Query<(&mut Transform, &TransformInterpolation)>) {
- let now = Instant::now();
- for (mut transform, interpolation) in &mut entities {
- let t = if interpolation.duration > Duration::ZERO {
- (now.duration_since(interpolation.end_received_at).as_secs_f64() / interpolation.duration.as_secs_f64())
- .clamp(0.0, 1.0) as f32
- } else {
- 1.0
- };
-
- *transform.bypass_change_detection() = Transform {
- translation: interpolation.start.translation.lerp(interpolation.end.translation, t),
- rotation: interpolation.start.rotation.slerp(interpolation.end.rotation, t),
- scale: interpolation.start.scale.lerp(interpolation.end.scale, t),
- };
- }
-}
M crates/unified/src/client/mod.rs => crates/unified/src/client/mod.rs +0 -2
@@ 45,7 45,6 @@ use wasm_bindgen_futures::JsFuture;
use crate::shared::config::planet::Planet;
pub mod colors;
-pub mod interpolation;
pub mod key_input;
pub mod parts;
pub mod planet;
@@ 73,7 72,6 @@ impl Plugin for ClientPlugin {
.add_plugins(ship::thrusters::client_thrusters_plugin)
.add_plugins((incoming_planets_plugin, indicators_plugin))
.add_plugins(parts_plugin)
- .add_plugins(interpolation::transform_interpolation_plugin)
.add_plugins(key_input_plugin)
.add_plugins(starfield_plugin)
.add_plugins(ui_plugin)
M crates/unified/src/client/parts.rs => crates/unified/src/client/parts.rs +0 -2
@@ 8,7 8,6 @@ use crate::shared::ecs::{DragAction, DragRequestEvent, Part, MAIN_LAYER};
use crate::client::input::CursorWorldCoordinates;
use bevy::color::palettes::css::{ORANGE, PURPLE, RED, YELLOW};
use crate::client::components::Me;
-use crate::client::interpolation::TransformInterpolation;
use crate::client::ship::attachment::AttachmentDebugRes;
use crate::prelude::*;
use bevy_replicon::client::confirm_history::ConfirmHistory;
@@ 60,7 59,6 @@ fn handle_incoming_parts(
.insert(MAIN_LAYER)
.insert(sprite)
.insert(Pickable::default())
- .insert(TransformInterpolation::new(*transform, confirm_history.last_tick()))
.observe(on_part_click)
.observe(open_crafting_ui);
}
M crates/unified/src/client/planet/incoming_planets.rs => crates/unified/src/client/planet/incoming_planets.rs +1 -3
@@ 1,4 1,3 @@
-use crate::client::interpolation::TransformInterpolation;
use crate::shared::config::planet::{Planet, SpecialSpriteProperties};
use crate::prelude::*;
use crate::shared::ecs::{MAIN_STAR_LAYERS};
@@ 25,8 24,7 @@ fn handle_incoming_planets(
for (new_entity, new_planet, transform, confirm_history) in new_planets.iter() {
commands.entity(new_entity)
.insert(MAIN_STAR_LAYERS.clone())
- .insert(build_planet_sprite(new_planet, &asset_server))
- .insert(TransformInterpolation::new(*transform, confirm_history.last_tick()));
+ .insert(build_planet_sprite(new_planet, &asset_server));
trace!(?new_planet, "prepared new planet");
}
}
M crates/unified/src/server/priority.rs => crates/unified/src/server/priority.rs +1 -1
@@ 4,7 4,7 @@ use crate::server::ConnectedNetworkEntity;
use crate::shared::attachment::Parts;
use crate::shared::ecs::{Part, Player};
-const OTHER_SHIP_PART_PRIORITY: f32 = 0.25;
+const OTHER_SHIP_PART_PRIORITY: f32 = 1.0;
pub fn replication_priority_plugin(app: &mut App) {
app.add_systems(Update, prioritize_own_ship_parts);