Files
PlaneBuilding/scratch/dct2/CellularModule
T

85 lines
2.0 KiB
Plaintext

local module = {}
local vector = Vector3.new
local floor = math.floor
local noise = math.noise
local ceil = math.ceil
local abs = math.abs
local max = math.max
local min = math.min
local xor = bit32.bxor
local rot = bit32.rrotate
local mod = math.fmod
local function cheman(vec)
return max(abs(vec.Y),abs(vec.X)+abs(vec.Z))
end
local function man(vec)
return abs(vec.X)+abs(vec.Y)+abs(vec.Z)
end
local function che(vec)
return max(abs(vec.X),abs(vec.Y),abs(vec.Z))
end
local function mag(vec)
return vec.Magnitude
end
local function squircle(vec)
return vec.X^4 + vec.Y^4 + vec.Z^4
end
local function off(x,y,z)
local rx = noise(x*123.456,y*345.612,z*561.234)
local ry = noise(x*345.612,z*123.456,y*561.234)
local rz = noise(z*123.456,x*561.234,y*345.612)
local res = vector(rx,ry,rz).Unit * 0.5
return res,res + vector(x,y,z)
end
local pa = vector(0,0,0)
local pb = vector(1,0,0)
local pc = vector(0,1,0)
local pd = vector(0,0,1)
local pe = vector(1,1,0)
local pf = vector(0,1,1)
local pg = vector(1,0,1)
local ph = vector(1,1,1)
local function vor(x,y,z,fun)
local fx = floor(x)
local fy = floor(y)
local fz = floor(z)
local cx = ceil(x)
local cy = ceil(y)
local cz = ceil(z)
local center = vector(x,y,z)-vector(fx,fy,fz)
local av,aa = off(fx,fy,fz)
local bv,ba = off(cx,fy,fz)
local cv,ca = off(fx,cy,fz)
local dv,da = off(fx,fy,cz)
local ev,ea = off(cx,cy,fz)
local fv,fa = off(fx,cy,cz)
local gv,ga = off(cx,fy,cz)
local hv,ha = off(cx,cy,cz)
local a = fun(av+pa-center)
local b = fun(bv+pb-center)
local c = fun(cv+pc-center)
local d = fun(dv+pd-center)
local e = fun(ev+pe-center)
local f = fun(fv+pf-center)
local g = fun(gv+pg-center)
local h = fun(hv+ph-center)
local v = a
local vv = aa
if b < v then v = b vv = ba end
if c < v then v = c vv = ca end
if d < v then v = d vv = da end
if e < v then v = e vv = ea end
if f < v then v = f vv = fa end
if g < v then v = g vv = ga end
if h < v then v = h vv = ha end
return 1-(v*2),vv
end
module.vor = vor
module.man = man
module.mag = mag
module.che = che
module.cheman = cheman
return module