summaryrefslogtreecommitdiff
path: root/engine/src/delta_time.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/delta_time.rs')
-rw-r--r--engine/src/delta_time.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/engine/src/delta_time.rs b/engine/src/delta_time.rs
new file mode 100644
index 0000000..33a2fc8
--- /dev/null
+++ b/engine/src/delta_time.rs
@@ -0,0 +1,32 @@
+use std::time::{Duration, Instant};
+
+use ecs::component::local::Local;
+use ecs::sole::Single;
+use ecs::{Component, Sole};
+
+#[derive(Debug, Clone, Default, Sole)]
+pub struct DeltaTime
+{
+ pub duration: Duration,
+}
+
+#[derive(Debug, Clone, Default, Component)]
+pub struct LastUpdate
+{
+ pub time: Option<Instant>,
+}
+
+/// Updates the current delta time.
+///
+/// # Panics
+/// Will panic if no delta time component exists.
+pub fn update(mut delta_time: Single<DeltaTime>, mut last_update: Local<LastUpdate>)
+{
+ let current_time = Instant::now();
+
+ if let Some(last_update_time) = last_update.time {
+ delta_time.duration = current_time.duration_since(last_update_time);
+ }
+
+ last_update.time = Some(current_time);
+}