use crate::asset::Asset;
use crate::asset_id::AssetId;
use crate::collection::{Collection, Collections};
use crate::patching::definition::{ColorOrder, FixtureDefinition, Mode, Pixel};
pub fn rgb_pixel(index: usize, x_m: f32) -> Pixel {
Pixel::new(format!("pixel-{index}"), [x_m, 0.0, 0.0], ColorOrder::Rgb)
}
pub fn rgb_bar(count: usize, length_m: f32) -> FixtureDefinition {
FixtureDefinition {
size_m: [length_m, 0.05, 0.05],
pixels: (0..count)
.map(|i| {
rgb_pixel(
i,
(i as f32 + 0.5) / count as f32 * length_m - length_m / 2.0,
)
})
.collect(),
modes: vec![Mode::individual(count)],
..Default::default()
}
}
pub fn collections_with(
definitions: Vec<FixtureDefinition>,
) -> (Collections, Vec<AssetId<FixtureDefinition>>) {
let mut collection = Collection::<FixtureDefinition>::default();
let ids = definitions
.into_iter()
.enumerate()
.map(|(index, data)| {
let asset = Asset {
id: AssetId::new(),
path: vec![format!("Definition {index}")],
data,
};
let id = asset.id;
collection.set_asset(asset);
id
})
.collect();
let mut collections = Collections::default();
collections.insert(collection);
(collections, ids)
}