diff options
| author | Jakob L. Kreuze <jakob@memeware.net> | 2018-05-30 16:30:03 -0400 |
|---|---|---|
| committer | Jakob L. Kreuze <jakob@memeware.net> | 2018-05-30 16:30:03 -0400 |
| commit | 20c791ebe6526eec175cf83ec1f60d9c4eaa2e67 (patch) | |
| tree | ef650039ffdd42039b1e125701cd636171ce1982 /src/timer.rs | |
| parent | ef870e5b8c9809592dfc57e956c5ec60e56e4ae5 (diff) | |
Began to implement a timer systen and a parser for PALETTE.DAT
Diffstat (limited to 'src/timer.rs')
| -rw-r--r-- | src/timer.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/timer.rs b/src/timer.rs new file mode 100644 index 0000000..f34df8d --- /dev/null +++ b/src/timer.rs @@ -0,0 +1,33 @@ +extern crate sdl2; + +use sdl2::TimerSubsystem; + +static const FREQUENCY = 1000; + +/// Implementation of a timer for managing game ticks. +pub struct Timer { + last_sample: u32, + ticks_per_second: u32, + ms_per_u64_tick: f64, + + sdl_timer: TimerSubsystem, +} + +impl Timer { + /// Create a new timer with the given frequency. + pub fn new(ticks_per_second: u32, sdl_timer: TimerSubsystem) -> Timer { + let last_sample = sdl_timer.ticks() * tics_per_second / FREQUENCY; + let ms_per_u64_tick = 1000.0 / sdl_timer.performance_frequency(); + Timer { last_sample, ticks_per_second, ms_per_u64_tick, sdl_timer } + } + + // TODO: Document this. + pub fn update(&mut self) { + let ms = self.sdl_timer.ticks(); + let ticks = ms * self.ticks_per_second / FREQUENCY - self.last_sample; + + if ticks > 0 { + self.last_sample += ticks; + } + } +} |