Merge pull request #269 from corwinkuiper/non-square-sprites

Non square sprites
This commit is contained in:
Corwin 2022-08-01 17:52:53 +01:00 committed by GitHub
commit 6f154b2600
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 34 additions and 12 deletions

View file

@ -115,15 +115,17 @@ pub fn include_aseprite_inner(input: TokenStream) -> TokenStream {
for frame in frames {
let width = frame.width();
assert!(width == frame.height() && width.is_power_of_two() && width <= 64);
let height = frame.height();
assert!(
valid_sprite_size(width, height),
"File {} contains sprites with unrepresentable size {}x{}",
filename.display(),
width,
height
);
let image = Image::load_from_dyn_image(frame);
add_to_optimiser(
&mut optimiser,
&image,
width as usize,
Some(transparent_colour),
);
add_to_optimiser(&mut optimiser, &image, 8, Some(transparent_colour));
images.push(image);
}
}
@ -293,7 +295,7 @@ fn palete_tile_data(
let mut tile_data = Vec::new();
for image in images {
let tile_size = image.height;
let tile_size = 8;
let tiles_x = image.width / tile_size;
let tiles_y = image.height / tile_size;
@ -401,3 +403,21 @@ mod tests {
assert_eq!(AnimationDirection::PingPong as usize, 2);
}
}
fn valid_sprite_size(width: u32, height: u32) -> bool {
match (width, height) {
(8, 8) => true,
(16, 16) => true,
(32, 32) => true,
(64, 64) => true,
(16, 8) => true,
(32, 8) => true,
(32, 16) => true,
(64, 32) => true,
(8, 16) => true,
(8, 32) => true,
(16, 32) => true,
(32, 64) => true,
(_, _) => false,
}
}

Binary file not shown.

Binary file not shown.

View file

@ -8,7 +8,9 @@ use alloc::vec::Vec;
const GRAPHICS: &Graphics = agb::include_aseprite!(
"examples/gfx/objects.aseprite",
"examples/gfx/boss.aseprite"
"examples/gfx/boss.aseprite",
"examples/gfx/wide.aseprite",
"examples/gfx/tall.aseprite"
);
const SPRITES: &[Sprite] = GRAPHICS.sprites();
const TAG_MAP: &TagMap = GRAPHICS.tags();
@ -102,6 +104,8 @@ fn main(mut gba: agb::Gba) -> ! {
loop {
all_tags(&gfx);
gfx.commit();
all_sprites(&gfx);
gfx.commit();
}
}

View file

@ -163,9 +163,7 @@ macro_rules! align_bytes {
/// Includes sprites found in the referenced aseprite files. Can include
/// multiple at once and optimises palettes of all included in the single call
/// together. Currently limited to square sprites that match a supported
/// dimension of the GBA, see [Size] for supported sizes. Returns a reference to
/// [Graphics].
/// together. See [Size] for supported sizes. Returns a reference to [Graphics].
///
/// ```rust,no_run
/// # #![no_std]