mirror of
https://github.com/JanNeuendorf/SVC16.git
synced 2025-06-06 03:25:28 +00:00
Added shortcuts for pausing and restarting
This commit is contained in:
parent
a229e6d378
commit
b6b13a85a5
16
src/main.rs
16
src/main.rs
@ -7,11 +7,12 @@ use clap::Parser;
|
|||||||
use cli::Cli;
|
use cli::Cli;
|
||||||
use engine::Engine;
|
use engine::Engine;
|
||||||
use pixels::{Pixels, SurfaceTexture};
|
use pixels::{Pixels, SurfaceTexture};
|
||||||
|
use std::ops::BitAnd;
|
||||||
use std::time::{Duration, Instant};
|
use std::time::{Duration, Instant};
|
||||||
use utils::*;
|
use utils::*;
|
||||||
use winit::dpi::LogicalSize;
|
use winit::dpi::LogicalSize;
|
||||||
use winit::event_loop::EventLoop;
|
use winit::event_loop::EventLoop;
|
||||||
use winit::keyboard::KeyCode;
|
use winit::keyboard::{Key, KeyCode};
|
||||||
use winit::window::WindowBuilder;
|
use winit::window::WindowBuilder;
|
||||||
use winit_input_helper::WinitInputHelper;
|
use winit_input_helper::WinitInputHelper;
|
||||||
const RES: usize = 256;
|
const RES: usize = 256;
|
||||||
@ -20,7 +21,8 @@ const FRAMETIME: Duration = Duration::from_nanos((1000000000. / 30.) as u64);
|
|||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
let cli = Cli::parse();
|
let cli = Cli::parse();
|
||||||
let initial_state = read_u16s_from_file(&cli.program)?;
|
let initial_state = read_u16s_from_file(&cli.program)?;
|
||||||
let mut engine = Engine::new(initial_state);
|
// The initial state is cloned, so we keep it around for a restart.
|
||||||
|
let mut engine = Engine::new(initial_state.clone());
|
||||||
|
|
||||||
let event_loop = EventLoop::new()?;
|
let event_loop = EventLoop::new()?;
|
||||||
let mut input = WinitInputHelper::new();
|
let mut input = WinitInputHelper::new();
|
||||||
@ -50,6 +52,7 @@ fn main() -> Result<()> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let mut raw_buffer = [0 as u16; engine::MEMSIZE];
|
let mut raw_buffer = [0 as u16; engine::MEMSIZE];
|
||||||
|
let mut paused = false;
|
||||||
|
|
||||||
event_loop.run(|event, elwt| {
|
event_loop.run(|event, elwt| {
|
||||||
let start_time = Instant::now();
|
let start_time = Instant::now();
|
||||||
@ -58,6 +61,13 @@ fn main() -> Result<()> {
|
|||||||
elwt.exit();
|
elwt.exit();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if input.key_pressed_logical(Key::Character("p")) {
|
||||||
|
paused = !paused;
|
||||||
|
}
|
||||||
|
if input.key_pressed_logical(Key::Character("r")) {
|
||||||
|
engine = Engine::new(initial_state.clone());
|
||||||
|
paused = false;
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(size) = input.window_resized() {
|
if let Some(size) = input.window_resized() {
|
||||||
if let Err(_) = pixels.resize_surface(size.width, size.height) {
|
if let Err(_) = pixels.resize_surface(size.width, size.height) {
|
||||||
@ -68,7 +78,7 @@ fn main() -> Result<()> {
|
|||||||
|
|
||||||
let mut ipf = 0;
|
let mut ipf = 0;
|
||||||
let engine_start = Instant::now();
|
let engine_start = Instant::now();
|
||||||
while !engine.wants_to_sync() && ipf <= cli.max_ipf {
|
while !engine.wants_to_sync() && ipf <= cli.max_ipf && !paused {
|
||||||
match engine.step() {
|
match engine.step() {
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
handle_event_loop_error(&elwt, "Invalid operation");
|
handle_event_loop_error(&elwt, "Invalid operation");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user