summaryrefslogtreecommitdiff
path: root/crates/renderer/src/toggle.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/renderer/src/toggle.rs')
-rw-r--r--crates/renderer/src/toggle.rs41
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(())
+ }
+}