summaryrefslogtreecommitdiff
path: root/src/time.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/time.rs')
-rw-r--r--src/time.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/time.rs b/src/time.rs
new file mode 100644
index 0000000..5978b57
--- /dev/null
+++ b/src/time.rs
@@ -0,0 +1,45 @@
+use std::time::{Duration, Instant, SystemTime};
+
+pub struct TimeContext {
+ start_time: Instant,
+ last_frame: Instant,
+ current_frame: Instant,
+ system_time: SystemTime,
+}
+
+impl TimeContext {
+ pub fn new() -> Self {
+ let now = Instant::now();
+ Self {
+ start_time: now,
+ last_frame: now,
+ current_frame: now,
+ system_time: SystemTime::now(),
+ }
+ }
+
+ pub fn next_frame(&mut self) {
+ puffin::profile_scope!("update time");
+ self.last_frame = self.current_frame;
+ self.current_frame = Instant::now();
+ self.system_time = SystemTime::now()
+ }
+
+ pub fn delta_time(&self) -> Duration {
+ self.current_frame - self.last_frame
+ }
+
+ pub fn monotonic_now(&self) -> Duration {
+ self.current_frame - self.start_time
+ }
+
+ pub fn system_now(&self) -> SystemTime {
+ self.system_time
+ }
+}
+
+impl Default for TimeContext {
+ fn default() -> Self {
+ Self::new()
+ }
+}