# Pxo
Utilities for loading [Pixelorama](https://github.com/Orama-Interactive/Pixelorama) files. Only supports recent
Pixelorama versions.
By default, a file will be read into a `Pxo` file, and each `Cel` (one exists for every frame and layer)
is stored as a separate image. This method of loading is recommended only when separate layers are needed,
such as if different, swappable items of clothing are stored on different layers.
The `sprite` feature, enabled by default, allows loading a file into a more useable `Sprite`. Layers are
merged so that there is a single image per frame. The rest of the `Sprite` describe how to animate it.
The `pack` feature allows packing loaded files. The images of a `Sprite` are packed into a single spritesheet
image and a `PackedSprite` is used to hold the sprite data, with each frame represented by a `PackedFrame`. The
image is returned separately from the `PackedSprite` because it is also possible to pack multiple files into the
same image.
# Basic Usage
```rust
# use std::fs::File;
let file = File::open("path/to/your/sprite.pxo")?;
// Load a .pxo and convert it into a sprite
let pxo = pxo::Pxo::load(file)?;
let sprite = pxo::Sprite::from(pxo, SpriteOptions::Default())?;
// Alternatively, a .pxo can be directly loaded as a sprite
let sprite = pxo::Sprite::load(file, SpriteOptions::Default())?;
// Packing a single sprite
// An error will be returned if the sprite cannot be packed into a 2048x2048 image
let (packed, image) = pxo::PackedSprite::pack_sprite(sprite, 2048, 2048)?;
// Packing two sprites, loaded from two different files, into the same image
sprite_a = pxo::Sprite::load(file_a, SpriteOptions::Default())?;
sprite_b = pxo::Sprite::load(file_b, SpriteOptions::Default())?;
let (packed, image) = pxo::PackedSprite::pack_sprites(&[sprite_a, sprite_b], 2048, 2048)?;
```