#![allow(clippy::missing_errors_doc, clippy::must_use_candidate)]
use lunar_assets::Handle;
use lunar_assets::Texture;
use lunar_atlas::{AtlasManifest, AtlasRegion};
pub struct TextureAtlas {
pub texture: Handle<Texture>,
pub manifest: AtlasManifest,
regions: rustc_hash::FxHashMap<String, AtlasRegion>,
}
impl TextureAtlas {
#[must_use]
pub fn new(texture: Handle<Texture>, manifest: AtlasManifest) -> Self {
let regions = manifest.resolve_regions();
Self {
texture,
manifest,
regions,
}
}
#[must_use]
pub fn region(&self, name: &str) -> &AtlasRegion {
self.regions
.get(name)
.unwrap_or_else(|| panic!("atlas region '{name}' not found"))
}
#[must_use]
pub fn try_region(&self, name: &str) -> Option<&AtlasRegion> {
self.regions.get(name)
}
#[must_use]
pub const fn texture_handle(&self) -> &Handle<Texture> {
&self.texture
}
pub fn region_names(&self) -> impl Iterator<Item = &String> {
self.regions.keys()
}
}