|
- #![allow(dead_code)]
-
- use std::mem::take;
- use std::time::Instant;
-
- use specs::{System, Write};
-
- use crate::resources::Global;
-
- pub struct Process {
- last_frame: Instant,
- time: f32,
- count: usize,
- }
-
- impl Default for Process {
- fn default() -> Self {
- Self {
- last_frame: Instant::now(),
- time: 0.0,
- count: 0,
- }
- }
- }
-
- impl<'a> System<'a> for Process {
- type SystemData = Write<'a, Global>;
-
- fn run(&mut self, mut global: Self::SystemData) {
- let now = Instant::now();
-
- global.delta = (now - self.last_frame).as_secs_f32();
- self.last_frame = now;
- self.time += global.delta;
- self.count += 1;
-
- if self.time >= 2.0 {
- self.time = 0.0;
- self.count = 0;
-
- global.fps = 0;
- } else if self.time >= 1.0 {
- self.time -= 1.0;
-
- global.fps = take(&mut self.count);
- }
- }
- }
|