juggle some properties

This commit is contained in:
kirjavascript 2022-06-29 00:03:48 +01:00
parent 94d7decd0c
commit 7b6b6fb27e
2 changed files with 18 additions and 25 deletions

View file

@ -6,8 +6,10 @@ use std::collections::VecDeque;
pub struct App {
emu: Megadrive,
debug: crate::debug::Debug,
game_state: GameState,
game_state: FrameCounter,
pub fullscreen: bool,
pub vsync: bool,
pub running: bool,
test_vec: VecDeque<u64>,
}
@ -19,25 +21,23 @@ impl Default for App {
debug: Default::default(),
game_state: Default::default(),
fullscreen: false,
vsync: false,
running: true,
test_vec: VecDeque::with_capacity(60),
}
}
}
// TODO: move to core
pub struct GameState {
pub running: bool,
pub vsync: bool,
pub struct FrameCounter {
frames: u64,
epoch: Instant,
frames_to_render: u64,
}
impl Default for GameState {
impl Default for FrameCounter {
fn default() -> Self {
Self {
running: true,
vsync: false,
frames: 0,
frames_to_render: 0,
epoch: Instant::now(),
@ -45,21 +45,17 @@ impl Default for GameState {
}
}
impl GameState {
pub fn tick(&mut self) {
impl FrameCounter {
pub fn tick(&mut self) -> u64 {
let diff = Instant::now().duration_since(self.epoch);
let frames = (diff.as_millis() as f64 * 0.05992274) as u64; // TODO: PAL
// self.emu.gfx.framerate()
self.frames_to_render = frames - self.frames;
self.frames = frames;
self.frames_to_render
}
pub fn frames_to_render(&self) -> u64 {
if self.vsync {
1
} else {
self.frames_to_render
}
self.frames_to_render
}
}
@ -96,14 +92,12 @@ impl eframe::App for App {
// game logic
if self.game_state.running {
if self.running {
ctx.request_repaint();
crate::input::dummy_input(ctx, &mut self.emu);
self.game_state.tick();
let frames_to_render = self.game_state.frames_to_render();
let frames_to_render = self.game_state.tick();
if frames_to_render > 3 {
self.emu.frame(true);
@ -157,11 +151,11 @@ impl eframe::App for App {
ui.label(&format!("MD frames this frame: {}", self.game_state.frames_to_render));
ui.label(&format!("avg frames {:.1}", self.test_vec.iter().sum::<u64>() as f32 / self.test_vec.len() as f32));
if ui.button(if self.game_state.running { "pause" } else { "play" }).clicked() {
self.game_state.running = !self.game_state.running;
if ui.button(if self.running { "pause" } else { "play" }).clicked() {
self.running = !self.running;
}
ui.radio_value(&mut self.game_state.vsync, true, "vsync");
ui.radio_value(&mut self.game_state.vsync, false, "not vsync");
ui.radio_value(&mut self.vsync, true, "vsync");
ui.radio_value(&mut self.vsync, false, "not vsync");
self.test_vec.push_back(self.game_state.frames_to_render().min(4));

View file

@ -1,7 +1,5 @@
pub mod palette;
// pub fn vram(ctx: &egui::Context, ui: &egui::Ui, emu: &mut emu::Megadrive) {
// }
pub struct Debug {
pub vram: VRAM,
}
@ -42,6 +40,7 @@ impl VRAM {
const height: usize = 128;
const pixel_qty: usize = (width * 8) * (height * 8);
// TODO use retained buffer
// TODO: only show onscreen ram"
let mut pixels: [egui::Color32; pixel_qty] = [ egui::Color32::from_rgb(0, 0, 0); pixel_qty];
let palette_offset = self.palette_line * 0x10;