Apply client-side sync info rarely
This commit is contained in:
parent
f2c28847b1
commit
606eed9255
@ -1061,6 +1061,16 @@ impl Player {
|
||||
|
||||
pub fn apply_self_sync(&mut self, data: SyncPackage) {
|
||||
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
|
||||
.dyn_bind_mut()
|
||||
.set_movement_dir(data.movement_direction.into());
|
||||
|
||||
@ -120,6 +120,10 @@ impl IPlayer for LocalPlayer {
|
||||
.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 get_transform(&self) -> NetTransform {
|
||||
|
||||
@ -33,6 +33,7 @@ pub trait IPlayer {
|
||||
fn set_movement_dir(&mut self, dir: Vector3);
|
||||
fn get_move_speed(&self) -> f32;
|
||||
fn apply_transform(&mut self, transform: NetTransform);
|
||||
fn apply_position(&mut self, pos: Vector3);
|
||||
fn apply_rotation(&mut self, rot: Vector3);
|
||||
fn apply_look_up(&mut self, rot: f32);
|
||||
fn get_look_up(&self) -> f32;
|
||||
|
||||
@ -88,6 +88,10 @@ impl IPlayer for RemotePlayer {
|
||||
.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) {
|
||||
self.base_mut().set_global_rotation(rot);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user