mirror of
https://github.com/Xevion/Pac-Man.git
synced 2025-12-07 07:15:45 -06:00
refactor: use U16Vec2 for sprites, remove unnecessary Deserialize trait
This commit is contained in:
16
build.rs
16
build.rs
@@ -19,6 +19,15 @@ struct MapperFrame {
|
|||||||
height: u16,
|
height: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl MapperFrame {
|
||||||
|
fn to_u16vec2_format(self) -> String {
|
||||||
|
format!(
|
||||||
|
"MapperFrame {{ pos: glam::U16Vec2::new({}, {}), size: glam::U16Vec2::new({}, {}) }}",
|
||||||
|
self.x, self.y, self.width, self.height
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let path = Path::new(&env::var("OUT_DIR").unwrap()).join("atlas_data.rs");
|
let path = Path::new(&env::var("OUT_DIR").unwrap()).join("atlas_data.rs");
|
||||||
let mut file = BufWriter::new(File::create(&path).unwrap());
|
let mut file = BufWriter::new(File::create(&path).unwrap());
|
||||||
@@ -37,12 +46,7 @@ fn main() {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
for (name, frame) in atlas_mapper.frames {
|
for (name, frame) in atlas_mapper.frames {
|
||||||
writeln!(
|
writeln!(&mut file, " \"{}\" => {},", name, frame.to_u16vec2_format()).unwrap();
|
||||||
&mut file,
|
|
||||||
" \"{}\" => MapperFrame {{ x: {}, y: {}, width: {}, height: {} }},",
|
|
||||||
name, frame.x, frame.y, frame.width, frame.height
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
writeln!(&mut file, "}};").unwrap();
|
writeln!(&mut file, "}};").unwrap();
|
||||||
|
|||||||
@@ -3,24 +3,21 @@ use glam::U16Vec2;
|
|||||||
use sdl2::pixels::Color;
|
use sdl2::pixels::Color;
|
||||||
use sdl2::rect::Rect;
|
use sdl2::rect::Rect;
|
||||||
use sdl2::render::{Canvas, RenderTarget, Texture};
|
use sdl2::render::{Canvas, RenderTarget, Texture};
|
||||||
use serde::Deserialize;
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use crate::error::TextureError;
|
use crate::error::TextureError;
|
||||||
|
|
||||||
/// Atlas frame mapping data loaded from JSON metadata files.
|
/// Atlas frame mapping data loaded from JSON metadata files.
|
||||||
#[derive(Clone, Debug, Deserialize)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct AtlasMapper {
|
pub struct AtlasMapper {
|
||||||
/// Mapping from sprite name to frame bounds within the atlas texture
|
/// Mapping from sprite name to frame bounds within the atlas texture
|
||||||
pub frames: HashMap<String, MapperFrame>,
|
pub frames: HashMap<String, MapperFrame>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, Deserialize)]
|
#[derive(Copy, Clone, Debug)]
|
||||||
pub struct MapperFrame {
|
pub struct MapperFrame {
|
||||||
pub x: u16,
|
pub pos: U16Vec2,
|
||||||
pub y: u16,
|
pub size: U16Vec2,
|
||||||
pub width: u16,
|
|
||||||
pub height: u16,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq)]
|
#[derive(Copy, Clone, Debug, PartialEq)]
|
||||||
@@ -108,8 +105,8 @@ impl SpriteAtlas {
|
|||||||
/// for repeated use in animations and entity sprites.
|
/// for repeated use in animations and entity sprites.
|
||||||
pub fn get_tile(&self, name: &str) -> Option<AtlasTile> {
|
pub fn get_tile(&self, name: &str) -> Option<AtlasTile> {
|
||||||
self.tiles.get(name).map(|frame| AtlasTile {
|
self.tiles.get(name).map(|frame| AtlasTile {
|
||||||
pos: U16Vec2::new(frame.x, frame.y),
|
pos: frame.pos,
|
||||||
size: U16Vec2::new(frame.width, frame.height),
|
size: frame.size,
|
||||||
color: None,
|
color: None,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,10 +13,8 @@ fn test_sprite_atlas_basic() {
|
|||||||
frames.insert(
|
frames.insert(
|
||||||
"test".to_string(),
|
"test".to_string(),
|
||||||
MapperFrame {
|
MapperFrame {
|
||||||
x: 10,
|
pos: U16Vec2::new(10, 20),
|
||||||
y: 20,
|
size: U16Vec2::new(32, 64),
|
||||||
width: 32,
|
|
||||||
height: 64,
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -38,19 +36,15 @@ fn test_sprite_atlas_multiple_tiles() {
|
|||||||
frames.insert(
|
frames.insert(
|
||||||
"tile1".to_string(),
|
"tile1".to_string(),
|
||||||
MapperFrame {
|
MapperFrame {
|
||||||
x: 0,
|
pos: U16Vec2::new(0, 0),
|
||||||
y: 0,
|
size: U16Vec2::new(32, 32),
|
||||||
width: 32,
|
|
||||||
height: 32,
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
frames.insert(
|
frames.insert(
|
||||||
"tile2".to_string(),
|
"tile2".to_string(),
|
||||||
MapperFrame {
|
MapperFrame {
|
||||||
x: 32,
|
pos: U16Vec2::new(32, 0),
|
||||||
y: 0,
|
size: U16Vec2::new(64, 64),
|
||||||
width: 64,
|
|
||||||
height: 64,
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user