orchestral-cli 0.2.0

Command line interface for running Orchestral workflows
#[derive(Debug, Clone)]
pub struct Shimmer {
    pub enabled: bool,
    phase: usize,
    table: [u8; 9],
}

impl Shimmer {
    pub fn new() -> Self {
        Self {
            enabled: false,
            phase: 0,
            table: [0, 1, 2, 3, 4, 3, 2, 1, 0],
        }
    }

    pub fn tick(&mut self) -> bool {
        if !self.enabled {
            return false;
        }
        let old = self.phase;
        self.phase = (self.phase + 1) % self.table.len();
        old != self.phase
    }

    pub fn intensity_at(&self, i: usize, len: usize) -> u8 {
        if len == 0 {
            return 0;
        }
        let center = (self.phase * len) / self.table.len();
        let dist = i.abs_diff(center);
        let band = 4;
        if dist >= band {
            return 0;
        }
        let idx = (dist * (self.table.len() - 1)) / band.max(1);
        self.table[idx]
    }
}