From eab24f7896ff76782788852c8ed70fa2adb518f3 Mon Sep 17 00:00:00 2001 From: gnembon Date: Fri, 12 Mar 2021 06:11:55 -0400 Subject: [PATCH] added reset_seed --- docs/scarpet/language/SystemFunctions.md | 5 +++++ docs/scarpet/resources/editors/idea/1.txt | 1 + docs/scarpet/resources/editors/npp/scarpet.xml | 4 ++-- src/main/java/carpet/script/Expression.java | 5 +++++ src/main/java/carpet/script/ScriptHost.java | 4 ++++ src/main/java/carpet/script/language/Sys.java | 4 ++++ 6 files changed, 21 insertions(+), 2 deletions(-) diff --git a/docs/scarpet/language/SystemFunctions.md b/docs/scarpet/language/SystemFunctions.md index bdc17d72..eb453bcd 100644 --- a/docs/scarpet/language/SystemFunctions.md +++ b/docs/scarpet/language/SystemFunctions.md @@ -239,6 +239,11 @@ map(range(10), bool(rand(2))) => [false, false, true, false, false, false, true, map(range(10), str('%.1f',rand(_))) => [0.0, 0.4, 0.6, 1.9, 2.8, 3.8, 5.3, 2.2, 1.6, 5.6] +## `reset_seed(seed)` + +Resets the sequence of the randomizer used by `rand` for this seed to its initial state. Returns a boolean value +indicating if the given seed has been used or not. + ### `perlin(x), perlin(x, y), perlin(x, y, z), perlin(x, y, z, seed)` returns a noise value from `0.0` to `1.0` (roughly) for 1, 2 or 3 dimensional coordinate. The default seed it samples diff --git a/docs/scarpet/resources/editors/idea/1.txt b/docs/scarpet/resources/editors/idea/1.txt index d69ced42..e83e03da 100644 --- a/docs/scarpet/resources/editors/idea/1.txt +++ b/docs/scarpet/resources/editors/idea/1.txt @@ -63,6 +63,7 @@ reduce relu replace replace_first +reset_seed return round sec diff --git a/docs/scarpet/resources/editors/npp/scarpet.xml b/docs/scarpet/resources/editors/npp/scarpet.xml index b44bb643..c274f9bd 100644 --- a/docs/scarpet/resources/editors/npp/scarpet.xml +++ b/docs/scarpet/resources/editors/npp/scarpet.xml @@ -25,7 +25,7 @@ - not fact rand + not fact rand reset_seed sin cos tan asin acos atan atan2 sinh cosh tanh sec csc sech csch cot acot coth asinh acosh atanh rad deg log log10 log1p @@ -46,7 +46,7 @@ var undef vars if loop map filter first all c_for for while reduce continue break - import call outer type hash_code bool number str length rand sleep time profile_expr lower upper title replace replace_first + import call outer type hash_code bool number str length sleep time profile_expr lower upper title replace replace_first block pos pos_offset solid air liquid flammable diff --git a/src/main/java/carpet/script/Expression.java b/src/main/java/carpet/script/Expression.java index cb95e860..7aa7ec0f 100644 --- a/src/main/java/carpet/script/Expression.java +++ b/src/main/java/carpet/script/Expression.java @@ -313,6 +313,11 @@ public class Expression addUnaryFunction(name, (v) -> new NumericValue(fun.apply(NumericValue.asNumber(v).getDouble()))); } + public void addMathematicalUnaryIntFunction(String name, Function fun) + { + addUnaryFunction(name, (v) -> new NumericValue(fun.apply(NumericValue.asNumber(v).getDouble()))); + } + public void addMathematicalBinaryFunction(String name, BiFunction fun) { addBinaryFunction(name, (w, v) -> diff --git a/src/main/java/carpet/script/ScriptHost.java b/src/main/java/carpet/script/ScriptHost.java index 1cae3c97..255f76d4 100644 --- a/src/main/java/carpet/script/ScriptHost.java +++ b/src/main/java/carpet/script/ScriptHost.java @@ -42,6 +42,10 @@ public abstract class ScriptHost return randomizers.computeIfAbsent(aLong, Random::new); } + public boolean resetRandom(long aLong) { + return randomizers.remove(aLong) != null; + } + public static class ModuleData { Module parent; diff --git a/src/main/java/carpet/script/language/Sys.java b/src/main/java/carpet/script/language/Sys.java index 4655f9d6..dc2a75df 100644 --- a/src/main/java/carpet/script/language/Sys.java +++ b/src/main/java/carpet/script/language/Sys.java @@ -210,6 +210,10 @@ public class Sys { Value retval = new NumericValue(NumericValue.asNumber(argument).getDouble()*randomizer.nextDouble()); return (cc, tt) -> retval; }); + expression.addLazyFunction("reset_seed", 1, (c, t, lv) -> { + boolean gotIt = c.host.resetRandom(NumericValue.asNumber(lv.get(0).evalValue(c)).getLong()); + return gotIt?LazyValue.TRUE:LazyValue.FALSE; + }); expression.addLazyFunction("perlin", -1, (c, t, lv) -> {