vastly improved selection system
This commit is contained in:
@@ -89,4 +89,5 @@ pub enum Op {
|
||||
StackStart,
|
||||
EmitN,
|
||||
ClearCmd,
|
||||
SetSpeed,
|
||||
}
|
||||
|
||||
@@ -625,6 +625,16 @@ impl Forth {
|
||||
.insert("__tempo__".to_string(), Value::Float(clamped, None));
|
||||
}
|
||||
|
||||
Op::SetSpeed => {
|
||||
let speed = stack.pop().ok_or("stack underflow")?.as_float()?;
|
||||
let clamped = speed.clamp(0.125, 8.0);
|
||||
let key = format!("__speed_{}_{}__", ctx.bank, ctx.pattern);
|
||||
self.vars
|
||||
.lock()
|
||||
.unwrap()
|
||||
.insert(key, Value::Float(clamped, None));
|
||||
}
|
||||
|
||||
Op::Chain => {
|
||||
let pattern = stack.pop().ok_or("stack underflow")?.as_int()? - 1;
|
||||
let bank = stack.pop().ok_or("stack underflow")?.as_int()? - 1;
|
||||
|
||||
@@ -755,6 +755,14 @@ pub const WORDS: &[Word] = &[
|
||||
example: "140 tempo!",
|
||||
compile: Simple,
|
||||
},
|
||||
Word {
|
||||
name: "speed!",
|
||||
category: "Time",
|
||||
stack: "(multiplier --)",
|
||||
desc: "Set pattern speed multiplier",
|
||||
example: "2.0 speed!",
|
||||
compile: Simple,
|
||||
},
|
||||
Word {
|
||||
name: "chain",
|
||||
category: "Time",
|
||||
@@ -1909,6 +1917,7 @@ pub(super) fn simple_op(name: &str) -> Option<Op> {
|
||||
"_" => Op::Silence,
|
||||
"scale!" => Op::Scale,
|
||||
"tempo!" => Op::SetTempo,
|
||||
"speed!" => Op::SetSpeed,
|
||||
"[" => Op::ListStart,
|
||||
"]" => Op::ListEnd,
|
||||
">" => Op::ListEndCycle,
|
||||
|
||||
Reference in New Issue
Block a user