Skip to content

Commit

Permalink
fix: potential empty rows in single sheets (#23)
Browse files Browse the repository at this point in the history
  • Loading branch information
fgardt authored Mar 27, 2024
1 parent 758a5d1 commit 51400e9
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/logger.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use env_logger::{
use log::Level;

pub fn init(level: &str) {
let env = Env::default().filter_or("LOG_LEVEL", level);
let env = Env::default().filter_or("RUST_LOG", level);

Builder::from_env(env)
.format(|buf, record| {
Expand Down
17 changes: 16 additions & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ enum SpriteSheetError {
ImagesNotSameSize,
}

#[allow(clippy::too_many_lines)]
#[allow(clippy::too_many_lines, clippy::cognitive_complexity)]
fn generate_spritesheet(
args: &SpritesheetArgs,
path: impl AsRef<Path>,
Expand Down Expand Up @@ -481,6 +481,8 @@ fn generate_spritesheet(
// unnecessarily overengineered PoS to calculate special sheet sizes if only 1 sheet is needed
let (sheet_width, sheet_height, cols_per_sheet, _rows_per_sheet, max_per_sheet) =
if max_per_sheet <= sprite_count {
debug!("multiple sheets needed: {max_cols_per_sheet}x{max_rows_per_sheet}");

(
sprite_width * max_cols_per_sheet,
sprite_height * max_rows_per_sheet,
Expand All @@ -492,6 +494,8 @@ fn generate_spritesheet(
// everything can fit 1 sheet -> custom arrange in as square as possible
if sprite_width == sprite_height {
let sheet_size = (sprite_count as f64).sqrt().ceil() as u32;
debug!("singular square sheet: {sheet_size}x{sheet_size}");

(
sprite_width * sheet_size,
sprite_height * sheet_size,
Expand All @@ -503,14 +507,25 @@ fn generate_spritesheet(
let mut cols = 1;
let mut rows = 1;

trace!("calculating custom sheet size");
while cols * rows < sprite_count {
if cols * sprite_width <= rows * sprite_height {
cols += 1;
trace!("cols++ | {cols}x{rows}");
} else {
rows += 1;
trace!("rows++ | {cols}x{rows}");
}
}

let empty = cols * rows - sprite_count;
if empty / cols > 0 {
rows -= empty / cols;
trace!("rows-- | {cols}x{rows}");
}

debug!("singular custom sheet: {cols}x{rows}");

(
sprite_width * cols,
sprite_height * rows,
Expand Down

0 comments on commit 51400e9

Please sign in to comment.