Compare commits

..

2 Commits

3 changed files with 36 additions and 15 deletions

View File

@@ -84,6 +84,23 @@ impl<'a> AnimatedTexture<'a> {
self.tick(); self.tick();
} }
// Functions like render, but only ticks the animation until the given frame is reached.
pub fn render_until(
&mut self,
canvas: &mut Canvas<Window>,
position: (i32, i32),
direction: Direction,
frame: u32,
) {
let current = self.current_frame();
self.render_static(canvas, position, direction, Some(current));
if frame != current {
self.tick();
}
}
// Renders a specific frame of the animation. Defaults to the current frame.
pub fn render_static( pub fn render_static(
&mut self, &mut self,
canvas: &mut Canvas<Window>, canvas: &mut Canvas<Window>,

View File

@@ -5,6 +5,8 @@ use sdl2::event::{Event};
use sdl2::keyboard::Keycode; use sdl2::keyboard::Keycode;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use spin_sleep::sleep; use spin_sleep::sleep;
use tracing_error::ErrorLayer;
use tracing_subscriber::layer::SubscriberExt;
#[cfg(target_os = "emscripten")] #[cfg(target_os = "emscripten")]
pub mod emscripten; pub mod emscripten;
@@ -16,6 +18,7 @@ mod entity;
mod game; mod game;
mod pacman; mod pacman;
mod modulation; mod modulation;
mod map;
#[cfg(target_os = "emscripten")] #[cfg(target_os = "emscripten")]
mod emscripten; mod emscripten;
@@ -25,18 +28,12 @@ pub fn main() {
let video_subsystem = sdl_context.video().unwrap(); let video_subsystem = sdl_context.video().unwrap();
// Setup tracing // Setup tracing
#[cfg(debug_assertions)]
{
use tracing_error::ErrorLayer;
use tracing_subscriber::layer::SubscriberExt;
let subscriber = tracing_subscriber::fmt() let subscriber = tracing_subscriber::fmt()
.with_max_level(tracing::Level::DEBUG) .with_max_level(tracing::Level::DEBUG)
.finish() .finish()
.with(ErrorLayer::default()); .with(ErrorLayer::default());
tracing::subscriber::set_global_default(subscriber).expect("Could not set global default"); tracing::subscriber::set_global_default(subscriber).expect("Could not set global default");
}
let window = video_subsystem let window = video_subsystem
.window("Pac-Man", WINDOW_WIDTH, WINDOW_HEIGHT) .window("Pac-Man", WINDOW_WIDTH, WINDOW_HEIGHT)
@@ -83,7 +80,10 @@ pub fn main() {
| Event::KeyDown { | Event::KeyDown {
keycode: Some(Keycode::Escape) | Some(Keycode::Q), keycode: Some(Keycode::Escape) | Some(Keycode::Q),
.. ..
} => return false, } => {
event!(tracing::Level::INFO, "Exit requested. Exiting...");
return false
},
Event::KeyDown { keycode, .. } => { Event::KeyDown { keycode, .. } => {
game.keyboard_event(keycode.unwrap()); game.keyboard_event(keycode.unwrap());
} }
@@ -108,8 +108,8 @@ pub fn main() {
tick_no += 1; tick_no += 1;
if tick_no % (60 * 5) == 0 { if tick_no % (60 * 60) == 0 || tick_no == (60 * 2) {
let average_fps = tick_no as f32 / last_averaging_time.elapsed().as_secs_f32(); let average_fps = (tick_no % (60 * 60)) as f32 / last_averaging_time.elapsed().as_secs_f32();
let average_sleep = sleep_time / tick_no; let average_sleep = sleep_time / tick_no;
let average_process = loop_time - average_sleep; let average_process = loop_time - average_sleep;
@@ -123,7 +123,6 @@ pub fn main() {
sleep_time = Duration::ZERO; sleep_time = Duration::ZERO;
last_averaging_time = Instant::now(); last_averaging_time = Instant::now();
tick_no = 0;
} }
true true

View File

@@ -34,6 +34,11 @@ impl Pacman<'_> {
} }
pub fn render(&mut self, canvas: &mut Canvas<Window>) { pub fn render(&mut self, canvas: &mut Canvas<Window>) {
// When stopped, render the last frame of the animation
if self.stopped {
self.sprite
.render_until(canvas, self.position, self.direction, 2);
} else {
self.sprite.render(canvas, self.position, self.direction); self.sprite.render(canvas, self.position, self.direction);
} }