Pixel-Composer/scripts/random_function/random_function.gml
2023-07-11 20:36:44 +02:00

100 lines
No EOL
2.6 KiB
Text

function irandom_seed(val, seed) {
random_set_seed(floor(seed));
return irandom(val);
}
function irandom_range_seed(from, to, seed) {
random_set_seed(floor(seed));
return irandom_range(from, to);
}
function random_seed(val, seed) {
random_set_seed(floor(seed));
var _s0 = random(val);
random_set_seed(floor(seed) + 1);
var _s1 = random(val);
return lerp(_s0, _s1, frac(seed));
}
function random_range_seed(from, to, seed) {
random_set_seed(floor(seed));
var _s0 = random_range(from, to);
random_set_seed(floor(seed) + 1);
var _s1 = random_range(from, to);
return lerp(_s0, _s1, frac(seed));
}
function random1D(seed, startRange = 0, endRange = 1) {
if(startRange == endRange) return startRange;
var _f = frac(seed);
if(_f == 0) {
random_set_seed(PROJECT.seed + seed);
return random_range(startRange, endRange);
}
random_set_seed(PROJECT.seed + floor(seed));
var f1 = random_range(startRange, endRange);
random_set_seed(PROJECT.seed + floor(seed) + 1);
var f2 = random_range(startRange, endRange);
return lerp(f1, f2, _f);
}
function perlin1D(seed, scale = 1, octave = 1, startRange = 0, endRange = 1) {
var amp = power(2., octave - 1.) / (power(2., octave) - 1.);
var val = 0;
repeat(octave) {
val = random1D(seed * scale) * amp;
scale *= 2;
amp /= 2;
}
return lerp(startRange, endRange, val);
}
function wiggle(_min = 0, _max = 1, _freq = 1, _time = 0, _seed = 0, _octave = 1) {
_freq = max(1, _freq);
var sdMin = floor(_time / _freq) * _freq;
var sdMax = sdMin + _freq;
var _x0 = perlin1D(PROJECT.seed + _seed + sdMin, 1, _octave);
var _x1 = perlin1D(PROJECT.seed + _seed + sdMax, 1, _octave);
var t = (_time - sdMin) / (sdMax - sdMin);
t = -(cos(pi * t) - 1) / 2;
var _lrp = lerp(_x0, _x1, t);
return lerp(_min, _max, _lrp);
}
function getWiggle(_min = 0, _max = 1, _freq = 1, _time = 0, _seed = 0, startTime = noone, endTime = noone) {
_freq = max(1, _freq);
var sdMin = floor(_time / _freq) * _freq;
var sdMax = sdMin + _freq;
if(endTime) //Clip at ending
sdMax = min(endTime, sdMax);
var _x0 = (startTime != noone && sdMin <= startTime)? 0.5 : random1D(PROJECT.seed + _seed + sdMin);
var _x1 = (endTime != noone && sdMax >= endTime)? 0.5 : random1D(PROJECT.seed + _seed + sdMax);
var t = (_time - sdMin) / (sdMax - sdMin);
t = -(cos(pi * t) - 1) / 2;
var _lrp = lerp(_x0, _x1, t);
return lerp(_min, _max, _lrp);
}
function UUID_generate(length = 16) {
static str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var _id = "";
repeat(length) _id += string_char_at(str, irandom_range(1, string_length(str)));
return _id;
}