diff options
| author | s-ol <s+removethis@s-ol.nu> | 2025-03-16 22:12:17 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2025-03-18 11:05:10 +0000 |
| commit | 1d2b44565411f041cddeffa1cfa753a1c887b0aa (patch) | |
| tree | b9f9f1dd6ca93d3cc1f97b06f1e21265fe01c47e | |
| parent | update Dockerfile ref (diff) | |
| download | alive-1d2b44565411f041cddeffa1cfa753a1c887b0aa.tar.gz alive-1d2b44565411f041cddeffa1cfa753a1c887b0aa.zip | |
lib: add random/int
| -rw-r--r-- | alv-lib/random.moon | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/alv-lib/random.moon b/alv-lib/random.moon index aad2b25..3edc98b 100644 --- a/alv-lib/random.moon +++ b/alv-lib/random.moon @@ -79,6 +79,41 @@ vec = (n) -> @gen! if @inputs.trig and @inputs.trig\dirty! @out\set [apply_range @inputs.range, v for v in *@state] +int = Constant.meta + meta: + name: 'int' + summary: 'Generate a random integer.' + examples: { '(random/num [trigger] [min] max))' } + description: "Generate a random value in `range` when created and on `trig`. +#{range_doc}" + + value: class extends Op + new: (...) => + super ... + @setup_out '~', T.num + @state or @gen! + + gen: => @state = math.random! + + int_pattern = -evt.bang + sig.num + -sig.num + setup: (inputs) => + { trig, min, max } = int_pattern\match inputs + if not max + min, max = nil, min + + super + trig: trig and Input.hot trig + min: Input.hot min or Constant.num 0 + max: Input.hot max + + tick: => + { :trig, :max, :min } = @unwrap_all! + if trig + last = math.floor min + (max - min) * @state + while last == math.floor min + (max - min) * @state + @gen! + @out\set math.floor min + (max - min) * @state + Constant.meta meta: name: 'random' @@ -86,6 +121,7 @@ Constant.meta value: :num + :int vec2: vec 2 vec3: vec 3 vec4: vec 4 |
