summaryrefslogtreecommitdiff
path: root/engine/src/delta_time.rs
blob: 33a2fc863d65e1c5dd5668e4ff66686202a0da46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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);
}