use std::path::PathBuf;
use std::process::ExitCode;
use clap::Parser;
use atlaspack::{pack_and_write, PackConfig};
#[derive(Debug, Parser)]
#[command(name = "atlaspack", version, about)]
struct Cli {
input: PathBuf,
#[arg(short, long, default_value = "atlas.png")]
output: PathBuf,
#[arg(short = 'j', long)]
json: Option<PathBuf>,
#[arg(short, long, default_value_t = 2)]
padding: u32,
#[arg(long, default_value_t = 4096)]
max_size: u32,
#[arg(long)]
no_pot: bool,
}
fn main() -> ExitCode {
if let Err(e) = run() {
eprintln!("error: {e}");
return ExitCode::FAILURE;
}
ExitCode::SUCCESS
}
fn run() -> atlaspack::Result<()> {
let cli = Cli::parse();
let json_path = cli.json.unwrap_or_else(|| {
let mut p = cli.output.clone();
p.set_extension("json");
p
});
let config = PackConfig {
padding: cli.padding,
max_size: cli.max_size,
power_of_two: !cli.no_pot,
image_name: cli
.output
.file_name()
.and_then(|s| s.to_str())
.unwrap_or("atlas.png")
.to_string(),
};
let packed = pack_and_write(&cli.input, &cli.output, &json_path, config)?;
eprintln!(
"packed {} sprites → {} ({}x{}), {}",
packed.json.frames.len(),
cli.output.display(),
packed.json.atlas.width,
packed.json.atlas.height,
json_path.display()
);
Ok(())
}