rill-patchbay 0.5.0-beta.1

The world where Automata live - control system for Rill
Documentation
//! # Стратегии управления автоматами
//!
//! Определяют как автомат воздействует на параметр узла и как
//! разрешаются конфликты между автоматическим и ручным управлением.

/// Как автомат воздействует на целевой параметр
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum ControlStrategy {
    /// Автомат задаёт значение параметра напрямую.
    ///
    /// Выход автомата ожидается в диапазоне [0, 1] и маппится
    /// на [min, max] целевого параметра.
    Absolute,

    /// Автомат модулирует вокруг базового значения.
    ///
    /// Выход автомата ожидается в диапазоне [-1, 1].
    /// Финальное значение: `base + mod_val * depth * (max - min)`,
    /// обрезанное до [min, max].
    Modulation {
        /// Глубина модуляции (0.0 — нет модуляции, 1.0 — полный диапазон)
        depth: f64,
    },
}

/// Стратегия разрешения конфликта между UI и автоматом
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum ConflictStrategy {
    /// Касание UI замораживает автомат для этого порта.
    ///
    /// При получении `SetBase` автомат прекращает влиять на параметр.
    /// При получении `Release` автомат возобновляет управление.
    TouchOverride,

    /// UI задаёт базовое значение, автомат модулирует вокруг него.
    ///
    /// Финальное значение вычисляется по формуле стратегии управления
    /// с учётом базового значения от UI и модуляции от автомата.
    BasePlusModulation,

    /// Последний записавший в очередь побеждает.
    ///
    /// UI и автомат пишут в очередь независимо. Порядок применения
    /// определяется порядком сообщений в `MpscQueue`.
    LastWriteWins,
}

/// Команда от UI в PortCombiner
#[derive(Debug, Clone)]
pub enum UiCommand {
    /// Установить базовое значение
    SetValue(f64),

    /// Отпустить контроль (только для TouchOverride)
    Release,
}