summaryrefslogtreecommitdiff
path: root/src/timer.rs
diff options
context:
space:
mode:
authorJakob L. Kreuze <jakob@memeware.net>2018-05-30 16:30:03 -0400
committerJakob L. Kreuze <jakob@memeware.net>2018-05-30 16:30:03 -0400
commit20c791ebe6526eec175cf83ec1f60d9c4eaa2e67 (patch)
treeef650039ffdd42039b1e125701cd636171ce1982 /src/timer.rs
parentef870e5b8c9809592dfc57e956c5ec60e56e4ae5 (diff)
Began to implement a timer systen and a parser for PALETTE.DAT
Diffstat (limited to 'src/timer.rs')
-rw-r--r--src/timer.rs33
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;
+ }
+ }
+}