Apply client-side sync info rarely

This commit is contained in:
Sofia 2026-07-25 00:45:39 +03:00
parent f2c28847b1
commit 606eed9255
4 changed files with 19 additions and 0 deletions

View File

@ -1061,6 +1061,16 @@ impl Player {
pub fn apply_self_sync(&mut self, data: SyncPackage) { pub fn apply_self_sync(&mut self, data: SyncPackage) {
if let Some(character) = &mut self.character { if let Some(character) = &mut self.character {
let server_pos = character.get_global_position();
let client_pos: Vector3 = data.transform.location.into();
let max_distance = self.data.ping as f32 * character.dyn_bind().get_move_speed()
+ character.dyn_bind().get_y_speed();
if client_pos.distance_to(server_pos) <= max_distance {
character.dyn_bind_mut().apply_position(client_pos);
}
character character
.dyn_bind_mut() .dyn_bind_mut()
.set_movement_dir(data.movement_direction.into()); .set_movement_dir(data.movement_direction.into());

View File

@ -120,6 +120,10 @@ impl IPlayer for LocalPlayer {
.set_global_rotation(transform.rotation.into()); .set_global_rotation(transform.rotation.into());
} }
fn apply_position(&mut self, pos: Vector3) {
self.base_mut().set_global_position(pos);
}
fn apply_rotation(&mut self, _rot: Vector3) {} fn apply_rotation(&mut self, _rot: Vector3) {}
fn get_transform(&self) -> NetTransform { fn get_transform(&self) -> NetTransform {

View File

@ -33,6 +33,7 @@ pub trait IPlayer {
fn set_movement_dir(&mut self, dir: Vector3); fn set_movement_dir(&mut self, dir: Vector3);
fn get_move_speed(&self) -> f32; fn get_move_speed(&self) -> f32;
fn apply_transform(&mut self, transform: NetTransform); fn apply_transform(&mut self, transform: NetTransform);
fn apply_position(&mut self, pos: Vector3);
fn apply_rotation(&mut self, rot: Vector3); fn apply_rotation(&mut self, rot: Vector3);
fn apply_look_up(&mut self, rot: f32); fn apply_look_up(&mut self, rot: f32);
fn get_look_up(&self) -> f32; fn get_look_up(&self) -> f32;

View File

@ -88,6 +88,10 @@ impl IPlayer for RemotePlayer {
.set_global_rotation(transform.rotation.into()); .set_global_rotation(transform.rotation.into());
} }
fn apply_position(&mut self, pos: Vector3) {
self.base_mut().set_global_position(pos);
}
fn apply_rotation(&mut self, rot: Vector3) { fn apply_rotation(&mut self, rot: Vector3) {
self.base_mut().set_global_rotation(rot); self.base_mut().set_global_rotation(rot);
} }