mirror of
https://github.com/Xevion/Pac-Man.git
synced 2025-12-14 02:12:26 -06:00
refactor: drop remaining Box::leak & statics where possible
This commit is contained in:
@@ -42,9 +42,9 @@ num-width = "0.1.0"
|
|||||||
pretty_assertions = "1.4.1"
|
pretty_assertions = "1.4.1"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
|
phf = { version = "0.13.1", features = ["macros"] }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0.143"
|
serde_json = "1.0.143"
|
||||||
phf = { version = "0.13.1", features = ["macros"] }
|
|
||||||
|
|
||||||
# phf generates runtime code which machete will not detect
|
# phf generates runtime code which machete will not detect
|
||||||
[package.metadata.cargo-machete]
|
[package.metadata.cargo-machete]
|
||||||
|
|||||||
33
src/app.rs
33
src/app.rs
@@ -1,10 +1,5 @@
|
|||||||
use std::time::{Duration, Instant};
|
use std::time::{Duration, Instant};
|
||||||
|
|
||||||
use sdl2::render::TextureCreator;
|
|
||||||
use sdl2::ttf::Sdl2TtfContext;
|
|
||||||
use sdl2::video::WindowContext;
|
|
||||||
use sdl2::{AudioSubsystem, EventPump, Sdl, VideoSubsystem};
|
|
||||||
|
|
||||||
use crate::error::{GameError, GameResult};
|
use crate::error::{GameError, GameResult};
|
||||||
|
|
||||||
use crate::constants::{CANVAS_SIZE, LOOP_TIME, SCALE};
|
use crate::constants::{CANVAS_SIZE, LOOP_TIME, SCALE};
|
||||||
@@ -34,15 +29,11 @@ impl App {
|
|||||||
/// Returns `GameError::Sdl` if any SDL initialization step fails, or propagates
|
/// Returns `GameError::Sdl` if any SDL initialization step fails, or propagates
|
||||||
/// errors from `Game::new()` during game state setup.
|
/// errors from `Game::new()` during game state setup.
|
||||||
pub fn new() -> GameResult<Self> {
|
pub fn new() -> GameResult<Self> {
|
||||||
let sdl_context: &'static Sdl = Box::leak(Box::new(sdl2::init().map_err(|e| GameError::Sdl(e.to_string()))?));
|
let sdl_context = sdl2::init().map_err(|e| GameError::Sdl(e.to_string()))?;
|
||||||
let video_subsystem: &'static VideoSubsystem =
|
let video_subsystem = sdl_context.video().map_err(|e| GameError::Sdl(e.to_string()))?;
|
||||||
Box::leak(Box::new(sdl_context.video().map_err(|e| GameError::Sdl(e.to_string()))?));
|
let _audio_subsystem = sdl_context.audio().map_err(|e| GameError::Sdl(e.to_string()))?;
|
||||||
let _audio_subsystem: &'static AudioSubsystem =
|
let _ttf_context = sdl2::ttf::init().map_err(|e| GameError::Sdl(e.to_string()))?;
|
||||||
Box::leak(Box::new(sdl_context.audio().map_err(|e| GameError::Sdl(e.to_string()))?));
|
let event_pump = sdl_context.event_pump().map_err(|e| GameError::Sdl(e.to_string()))?;
|
||||||
let _ttf_context: &'static Sdl2TtfContext =
|
|
||||||
Box::leak(Box::new(sdl2::ttf::init().map_err(|e| GameError::Sdl(e.to_string()))?));
|
|
||||||
let event_pump: &'static mut EventPump =
|
|
||||||
Box::leak(Box::new(sdl_context.event_pump().map_err(|e| GameError::Sdl(e.to_string()))?));
|
|
||||||
|
|
||||||
let window = video_subsystem
|
let window = video_subsystem
|
||||||
.window(
|
.window(
|
||||||
@@ -55,19 +46,17 @@ impl App {
|
|||||||
.build()
|
.build()
|
||||||
.map_err(|e| GameError::Sdl(e.to_string()))?;
|
.map_err(|e| GameError::Sdl(e.to_string()))?;
|
||||||
|
|
||||||
let canvas = Box::leak(Box::new(
|
let mut canvas = window
|
||||||
window
|
.into_canvas()
|
||||||
.into_canvas()
|
.accelerated()
|
||||||
.accelerated()
|
.build()
|
||||||
.build()
|
.map_err(|e| GameError::Sdl(e.to_string()))?;
|
||||||
.map_err(|e| GameError::Sdl(e.to_string()))?,
|
|
||||||
));
|
|
||||||
|
|
||||||
canvas
|
canvas
|
||||||
.set_logical_size(CANVAS_SIZE.x, CANVAS_SIZE.y)
|
.set_logical_size(CANVAS_SIZE.x, CANVAS_SIZE.y)
|
||||||
.map_err(|e| GameError::Sdl(e.to_string()))?;
|
.map_err(|e| GameError::Sdl(e.to_string()))?;
|
||||||
|
|
||||||
let texture_creator: &'static mut TextureCreator<WindowContext> = Box::leak(Box::new(canvas.texture_creator()));
|
let texture_creator = canvas.texture_creator();
|
||||||
|
|
||||||
let game = Game::new(canvas, texture_creator, event_pump)?;
|
let game = Game::new(canvas, texture_creator, event_pump)?;
|
||||||
// game.audio.set_mute(cfg!(debug_assertions));
|
// game.audio.set_mute(cfg!(debug_assertions));
|
||||||
|
|||||||
13
src/game.rs
13
src/game.rs
@@ -81,9 +81,9 @@ impl Game {
|
|||||||
/// Returns `GameError` for SDL2 failures, asset loading problems, atlas parsing
|
/// Returns `GameError` for SDL2 failures, asset loading problems, atlas parsing
|
||||||
/// errors, or entity initialization issues.
|
/// errors, or entity initialization issues.
|
||||||
pub fn new(
|
pub fn new(
|
||||||
canvas: &'static mut Canvas<Window>,
|
mut canvas: Canvas<Window>,
|
||||||
texture_creator: &'static mut TextureCreator<WindowContext>,
|
texture_creator: TextureCreator<WindowContext>,
|
||||||
event_pump: &'static mut EventPump,
|
event_pump: EventPump,
|
||||||
) -> GameResult<Game> {
|
) -> GameResult<Game> {
|
||||||
let ttf_context = Box::leak(Box::new(sdl2::ttf::init().map_err(|e| GameError::Sdl(e.to_string()))?));
|
let ttf_context = Box::leak(Box::new(sdl2::ttf::init().map_err(|e| GameError::Sdl(e.to_string()))?));
|
||||||
let mut backbuffer = texture_creator
|
let mut backbuffer = texture_creator
|
||||||
@@ -106,9 +106,8 @@ impl Game {
|
|||||||
debug_texture.set_blend_mode(BlendMode::Blend);
|
debug_texture.set_blend_mode(BlendMode::Blend);
|
||||||
debug_texture.set_scale_mode(ScaleMode::Nearest);
|
debug_texture.set_scale_mode(ScaleMode::Nearest);
|
||||||
|
|
||||||
let font_data = get_asset_bytes(Asset::Font)?;
|
let font_data: &'static [u8] = get_asset_bytes(Asset::Font)?.to_vec().leak();
|
||||||
let static_font_data: &'static [u8] = Box::leak(font_data.to_vec().into_boxed_slice());
|
let font_asset = RWops::from_bytes(font_data).map_err(|_| GameError::Sdl("Failed to load font".to_string()))?;
|
||||||
let font_asset = RWops::from_bytes(static_font_data).map_err(|_| GameError::Sdl("Failed to load font".to_string()))?;
|
|
||||||
let debug_font = ttf_context
|
let debug_font = ttf_context
|
||||||
.load_font_from_rwops(font_asset, constants::ui::DEBUG_FONT_SIZE)
|
.load_font_from_rwops(font_asset, constants::ui::DEBUG_FONT_SIZE)
|
||||||
.map_err(|e| GameError::Sdl(e.to_string()))?;
|
.map_err(|e| GameError::Sdl(e.to_string()))?;
|
||||||
@@ -256,7 +255,7 @@ impl Game {
|
|||||||
|
|
||||||
world.insert_non_send_resource(atlas);
|
world.insert_non_send_resource(atlas);
|
||||||
world.insert_non_send_resource(event_pump);
|
world.insert_non_send_resource(event_pump);
|
||||||
world.insert_non_send_resource(canvas);
|
world.insert_non_send_resource::<&mut Canvas<Window>>(Box::leak(Box::new(canvas)));
|
||||||
world.insert_non_send_resource(BackbufferResource(backbuffer));
|
world.insert_non_send_resource(BackbufferResource(backbuffer));
|
||||||
world.insert_non_send_resource(MapTextureResource(map_texture));
|
world.insert_non_send_resource(MapTextureResource(map_texture));
|
||||||
world.insert_non_send_resource(DebugTextureResource(debug_texture));
|
world.insert_non_send_resource(DebugTextureResource(debug_texture));
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ pub fn input_system(
|
|||||||
delta_time: Res<DeltaTime>,
|
delta_time: Res<DeltaTime>,
|
||||||
mut bindings: ResMut<Bindings>,
|
mut bindings: ResMut<Bindings>,
|
||||||
mut writer: EventWriter<GameEvent>,
|
mut writer: EventWriter<GameEvent>,
|
||||||
mut pump: NonSendMut<&'static mut EventPump>,
|
mut pump: NonSendMut<EventPump>,
|
||||||
mut cursor: ResMut<CursorPosition>,
|
mut cursor: ResMut<CursorPosition>,
|
||||||
) {
|
) {
|
||||||
let mut cursor_seen = false;
|
let mut cursor_seen = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user