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) {
|
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());
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user