From 506a5c6093028697d1cc96099020f95b262949d4 Mon Sep 17 00:00:00 2001 From: Joshua Barretto Date: Sun, 21 Apr 2019 19:26:08 +0100 Subject: [PATCH 1/2] Made NPC movement smoother Former-commit-id: 105908cf0118113408acd5ad7dce191fe405f88f --- common/src/sys/agent.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/sys/agent.rs b/common/src/sys/agent.rs index 2ae4b5ff2b..cf44c121fb 100644 --- a/common/src/sys/agent.rs +++ b/common/src/sys/agent.rs @@ -22,7 +22,7 @@ impl<'a> System<'a> for Sys { *bearing += Vec2::new( rand::random::().fract() - 0.5, rand::random::().fract() - 0.5, - ) - *bearing * 0.05 - pos.0 * 0.001; + ) * 0.1 - *bearing * 0.01 - pos.0 * 0.0002; if bearing.magnitude_squared() != 0.0 { control.move_dir = bearing.normalized(); From 3e80876b19ff58745a74350ff875efa5cc9210c1 Mon Sep 17 00:00:00 2001 From: Joshua Barretto Date: Mon, 22 Apr 2019 17:50:15 +0100 Subject: [PATCH 2/2] Fixed clock Former-commit-id: 585000319073e06f6511b3ef2c3db1135167d9d4 --- common/src/clock.rs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/common/src/clock.rs b/common/src/clock.rs index 57e71756e8..239dbbdeed 100644 --- a/common/src/clock.rs +++ b/common/src/clock.rs @@ -13,6 +13,7 @@ pub struct Clock { } impl Clock { + #[allow(dead_code)] pub fn new() -> Self { Self { last_sys_time: SystemTime::now(), @@ -21,12 +22,16 @@ impl Clock { } } - pub fn get_tps(&self) -> f64 { self.running_tps_average } + #[allow(dead_code)] + pub fn get_tps(&self) -> f64 { 1.0 / self.running_tps_average } + #[allow(dead_code)] pub fn get_last_delta(&self) -> Duration { self.last_delta.unwrap_or(Duration::new(0, 0)) } + #[allow(dead_code)] pub fn get_avg_delta(&self) -> Duration { Duration::from_secs_f64(self.running_tps_average) } + #[allow(dead_code)] pub fn tick(&mut self, tgt: Duration) { let delta = SystemTime::now() .duration_since(self.last_sys_time) @@ -34,7 +39,12 @@ impl Clock { // Attempt to sleep to fill the gap if let Some(sleep_dur) = tgt.checked_sub(delta) { - thread::sleep(sleep_dur); + let adjustment = if self.running_tps_average == 0.0 { + 1.0 + } else { + tgt.as_secs_f64() / self.running_tps_average + }; + thread::sleep(Duration::from_secs_f64(sleep_dur.as_secs_f64() * adjustment)); } let delta = SystemTime::now() @@ -43,8 +53,11 @@ impl Clock { self.last_sys_time = SystemTime::now(); self.last_delta = Some(delta); - self.running_tps_average = + self.running_tps_average = if self.running_tps_average == 0.0 { + delta.as_secs_f64() + } else { CLOCK_SMOOTHING * self.running_tps_average + - (1.0 - CLOCK_SMOOTHING) * delta.as_secs_f64(); + (1.0 - CLOCK_SMOOTHING) * delta.as_secs_f64() + }; } }