diff options
| author | LLLL Colonq <llll@colonq> | 2025-04-15 01:25:47 -0400 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2025-04-15 01:25:47 -0400 |
| commit | 9e586a12b0db0292d9fb41e4ec99a3e1fd912d85 (patch) | |
| tree | 4a80659b5510546124493599b3c20152e3da4638 /crates/renderer/src/toggle.rs | |
| parent | 1b5b2e1956ca001befef601a00a1710dd04d7952 (diff) | |
Multi
Diffstat (limited to 'crates/renderer/src/toggle.rs')
| -rw-r--r-- | crates/renderer/src/toggle.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/crates/renderer/src/toggle.rs b/crates/renderer/src/toggle.rs new file mode 100644 index 0000000..7bba735 --- /dev/null +++ b/crates/renderer/src/toggle.rs @@ -0,0 +1,41 @@ +use teleia::*; +use std::collections::HashMap; + +use crate::fig; + +#[derive(Debug, Clone)] +pub struct Toggle { + pub val: bool, + pub set_time: u64, +} + +pub struct Toggles { + toggles: HashMap<String, Toggle>, +} +impl Toggles { + pub fn new() -> Self { + Self { + toggles: HashMap::new(), + } + } + pub fn set(&mut self, ctx: &context::Context, st: &state::State, nm: &str, val: bool) { + self.toggles.insert(nm.to_string(), Toggle { val, set_time: st.tick }); + } + pub fn get(&self, ctx: &context::Context, st: &state::State, nm: &str) -> Option<Toggle> { + self.toggles.get(nm).cloned() + } + pub fn reset(&mut self) { + self.toggles.clear(); + } + pub fn handle(&mut self, ctx: &context::Context, st: &state::State, msg: fig::Message) -> Option<()> { + let nm = msg.data.get(0)?.as_str()?; + let prev = self.get(ctx, st, nm).map(|t| t.val).unwrap_or(false); + self.set(ctx, st, nm, !prev); + Some(()) + } + pub fn handle_set(&mut self, ctx: &context::Context, st: &state::State, msg: fig::Message, val: bool) -> Option<()> { + let nm = msg.data.get(0)?.as_str()?; + self.set(ctx, st, nm, val); + Some(()) + } +} |
