use std::collections::HashMap;
use crate::ecs::SkinnedMeshHandle;
use crate::ecs::asset_id::AssetId;
#[derive(Debug, Default, Clone)]
pub(crate) struct SkinnedMeshNameIndex(pub HashMap<AssetId, SkinnedMeshHandle>);
#[derive(Debug, Default, Clone)]
pub(crate) struct SkinnedMeshSkinIndex(pub Vec<u32>);
impl SkinnedMeshSkinIndex {
pub(crate) fn get(&self, handle: SkinnedMeshHandle) -> u32 {
self.0.get(handle.index()).copied().unwrap_or(0)
}
}
impl SkinnedMeshNameIndex {
pub(crate) fn get(&self, name_id: AssetId) -> SkinnedMeshHandle {
self.0
.get(&name_id)
.copied()
.unwrap_or(SkinnedMeshHandle(name_id.0))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn known_name_returns_its_handle() {
let mut map = HashMap::new();
map.insert(AssetId(10), SkinnedMeshHandle(0));
map.insert(AssetId(20), SkinnedMeshHandle(1));
let index = SkinnedMeshNameIndex(map);
assert_eq!(index.get(AssetId(20)), SkinnedMeshHandle(1));
}
#[test]
fn unknown_name_falls_back_to_the_id_value() {
let index = SkinnedMeshNameIndex::default();
assert_eq!(index.get(AssetId(42)), SkinnedMeshHandle(42));
}
}