bones_bevy_renderer/
debug.rs1use bevy::{
4 diagnostic::{DiagnosticsStore, FrameTimeDiagnosticsPlugin},
5 prelude::*,
6};
7use bones_framework::debug::FrameDiagState;
8
9use crate::BonesGame;
10
11pub struct BevyDebugPlugin;
13
14impl Plugin for BevyDebugPlugin {
15 fn build(&self, app: &mut App) {
16 app.add_plugins(bevy::diagnostic::FrameTimeDiagnosticsPlugin);
17 app.add_systems(Last, sync_frame_time);
18 }
19}
20
21fn sync_frame_time(mut game: ResMut<BonesGame>, diagnostics: Res<DiagnosticsStore>) {
22 let mut state = game.init_shared_resource::<FrameDiagState>();
23
24 let fps = diagnostics.get(FrameTimeDiagnosticsPlugin::FPS).unwrap();
25 state.fps = fps.value().unwrap_or(0.0);
26 state.fps_avg = fps.average().unwrap_or(0.0);
27
28 if state.fps < state.min_fps {
29 state.min_fps = state.fps;
30 }
31 if state.fps > state.max_fps {
32 state.max_fps = state.fps;
33 }
34
35 let frame_time = diagnostics
36 .get(FrameTimeDiagnosticsPlugin::FRAME_TIME)
37 .unwrap();
38 state.frame_time = frame_time.value().unwrap_or(0.0);
39 state.frame_time_avg = frame_time.average().unwrap_or(0.0);
40
41 if state.frame_time < state.min_frame_time {
42 state.min_frame_time = state.frame_time;
43 }
44 if state.frame_time > state.max_frame_time {
45 state.max_frame_time = state.frame_time;
46 }
47}