aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2025-03-16 22:12:17 +0000
committers-ol <s+removethis@s-ol.nu>2025-03-18 11:05:10 +0000
commit1d2b44565411f041cddeffa1cfa753a1c887b0aa (patch)
treeb9f9f1dd6ca93d3cc1f97b06f1e21265fe01c47e
parentupdate Dockerfile ref (diff)
downloadalive-1d2b44565411f041cddeffa1cfa753a1c887b0aa.tar.gz
alive-1d2b44565411f041cddeffa1cfa753a1c887b0aa.zip
lib: add random/int
-rw-r--r--alv-lib/random.moon36
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