package Ġcom . wil lout west . kal ah ari . math . noise . sources Ċ Ċ import Ġcom . wil lout west . kal ah ari . math . Compute Utils Ċ import Ġcom . wil lout west . kal ah ari . math . Math Utils Ċ import Ġcom . wil lout west . kal ah ari . math . Random Utils Ċ import Ġcom . wil lout west . kal ah ari . math . noise . Noise Source Ċ Ċ /** Ċ Ġ* ĠRepresents Ġan Ġimplementation Ġof Ġ[ Noise Source ] Ġthat Ġuses Ġcubic Ċ Ġ* Ġinterpolation Ġto Ġmap Ġrandom Ġnoise Ġto Ġan Ġinteger Ġlattice . Ċ Ġ* Ċ Ġ* Ġ@ property Ġmask Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠ ĠThe Ġhashing Ġmask . Ċ Ġ*/ Ċ class ĠC ubic Source () Ġ: ĊĠĠĠ ĠAbstract L attice Source ( Table Size , ĠTable Size ), ĠClone able , ĠNo ise Source Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġdefault Ġpermutation Ġtable . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġis Ġtaken Ġfrom Ġthe Ġfollowing Ġsource Ġwritten Ġby ĠDar w yn ĠP each y : ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ĠE bert , ĠD . S ., ĠM us grave , ĠK ., Ġand ĠP each y , ĠD . Ġ( 2 0 0 3 ). ĠText uring Ġand ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ĠModel ing , ĠThird ĠEdition : ĠA ĠPro ced ural ĠAppro ach . Ġpp . Ġ 7 0 . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ĠIS BN : Ġ 9 7 8 - 1 5 5 8 6 0 8 4 8 1 ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠInd ices ĠĠĠĠĠĠĠĠ Ġ= Ġshort ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 2 5 , 1 5 5 , 2 1 0 , 1 0 8 , 1 7 5 , 1 9 9 , 2 2 1 , 1 4 4 , 2 0 3 , 1 1 6 , Ġ 7 0 , 2 1 3 , Ġ 6 9 , 1 5 8 , Ġ 3 3 , 2 5 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 , Ġ 8 2 , 1 7 3 , 1 3 3 , 2 2 2 , 1 3 9 , 1 7 4 , Ġ 2 7 , ĠĠ 9 , Ġ 7 1 , Ġ 9 0 , 2 4 6 , Ġ 7 5 , 1 3 0 , Ġ 9 1 , 1 9 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 9 , 1 3 8 , ĠĠ 2 , 1 5 1 , 1 9 4 , 2 3 5 , Ġ 8 1 , ĠĠ 7 , Ġ 2 5 , 1 1 3 , 2 2 8 , 1 5 9 , 2 0 5 , 2 5 3 , 1 3 4 , 1 4 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 4 8 , Ġ 6 5 , 2 2 4 , 2 1 7 , Ġ 2 2 , 1 2 1 , 2 2 9 , Ġ 6 3 , Ġ 8 9 , 1 0 3 , Ġ 9 6 , 1 0 4 , 1 5 6 , Ġ 1 7 , 2 0 1 , 1 2 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 6 , ĠĠ 8 , 1 6 5 , 1 1 0 , 2 3 7 , 1 1 7 , 2 3 1 , Ġ 5 6 , 1 3 2 , 2 1 1 , 1 5 2 , Ġ 2 0 , 1 8 1 , 1 1 1 , 2 3 9 , 2 1 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 7 0 , 1 6 3 , Ġ 5 1 , 1 7 2 , 1 5 7 , Ġ 4 7 , Ġ 8 0 , 2 1 2 , 1 7 6 , 2 5 0 , Ġ 8 7 , Ġ 4 9 , Ġ 9 9 , 2 4 2 , 1 3 6 , 1 8 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 2 , 1 1 5 , Ġ 4 4 , Ġ 4 3 , 1 2 4 , Ġ 9 4 , 1 5 0 , Ġ 1 6 , 1 4 1 , 2 4 7 , Ġ 3 2 , Ġ 1 0 , 1 9 8 , 2 2 3 , 2 5 5 , Ġ 7 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 3 , 1 3 1 , Ġ 8 4 , Ġ 5 7 , 2 2 0 , 1 9 7 , Ġ 5 8 , Ġ 5 0 , 2 0 8 , Ġ 1 1 , 2 4 1 , Ġ 2 8 , ĠĠ 3 , 1 9 2 , Ġ 6 2 , 2 0 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 8 , 2 1 5 , 1 5 3 , Ġ 2 4 , Ġ 7 6 , Ġ 4 1 , Ġ 1 5 , 1 7 9 , Ġ 3 9 , Ġ 4 6 , Ġ 5 5 , ĠĠ 6 , 1 2 8 , 1 6 7 , Ġ 2 3 , 1 8 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 6 , Ġ 3 4 , 1 8 7 , 1 4 0 , 1 6 4 , Ġ 7 3 , 1 1 2 , 1 8 2 , 2 4 4 , 1 9 5 , 2 2 7 , Ġ 1 3 , Ġ 3 5 , Ġ 7 7 , 1 9 6 , 1 8 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 6 , 2 0 0 , 2 2 6 , 1 1 9 , Ġ 3 1 , 1 2 3 , 1 6 8 , 1 2 5 , 2 4 9 , Ġ 6 8 , 1 8 3 , 2 3 0 , 1 7 7 , 1 3 5 , 1 6 0 , 1 8 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 , ĠĠ 1 , 2 4 3 , 1 4 8 , 1 0 2 , 1 6 6 , Ġ 3 8 , 2 3 8 , 2 5 1 , Ġ 3 7 , 2 4 0 , 1 2 6 , Ġ 6 4 , Ġ 7 4 , 1 6 1 , Ġ 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 8 4 , 1 4 9 , 1 7 1 , 1 7 8 , 1 0 1 , Ġ 6 6 , Ġ 2 9 , Ġ 5 9 , 1 4 6 , Ġ 6 1 , 2 5 4 , 1 0 7 , Ġ 4 2 , Ġ 8 6 , 1 5 4 , ĠĠ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 3 6 , 2 3 2 , 1 2 0 , Ġ 2 1 , 2 3 3 , 2 0 9 , Ġ 4 5 , Ġ 9 8 , 1 9 3 , 1 1 4 , Ġ 7 8 , Ġ 1 9 , 2 0 6 , Ġ 1 4 , 1 1 8 , 1 2 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 8 , Ġ 7 9 , 1 4 7 , Ġ 8 5 , Ġ 3 0 , 2 0 7 , 2 1 9 , Ġ 5 4 , Ġ 8 8 , 2 3 4 , 1 9 0 , 1 2 2 , Ġ 9 5 , Ġ 6 7 , 1 4 3 , 1 0 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 3 7 , 2 1 4 , 1 4 5 , Ġ 9 3 , Ġ 9 2 , 1 0 0 , 2 4 5 , ĠĠ 0 , 2 1 6 , 1 8 6 , Ġ 6 0 , Ġ 8 3 , 1 0 5 , Ġ 9 7 , 2 0 4 , Ġ 5 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġdefault Ġnumber Ġof Ġelements Ġin Ġa Ġtable . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTable Size Ġ= Ġ 2 5 6 ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġval Ġmask Ġ= ĠTable Size Ġ- Ġ 1 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructor . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsource ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ ĠThe Ġnoise Ġsource Ġto Ġcopy Ġfrom . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( source : ĠC ubic Source ?) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġsource !!. indices . copy Into ( this . indices ) ĊĠĠĠĠĠĠĠ Ġsource . values . copy Into ( this . values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠInd ices . copy Into ( this . indices ) ĊĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġthis . values . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . values [ i ] Ġ= Ġ 1 f Ġ- Ġ 2 f Ġ* ĠRandom Utils . next Float () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclone (): ĠC ubic Source Ġ= ĠC ubic Source ( this ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠComputes Ġthe Ġindex Ġon Ġthe Ġlattice Ġof Ġthis Ġsource Ġfrom Ġwhich Ġto ĊĠĠĠĠ Ġ* Ġprovide Ġnoise . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġx ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ ĠThe Ġx - axis Ġcomponent Ġto Ġuse . ĊĠĠĠĠ Ġ* Ġ@ param Ġy ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ ĠThe Ġy - axis Ġcomponent Ġto Ġuse . ĊĠĠĠĠ Ġ* Ġ@ param Ġz ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ ĠThe Ġz - axis Ġcomponent Ġto Ġuse . ĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġper muted Ġindex . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠindexOf ( x : ĠInt , Ġy : ĠInt , Ġz : ĠInt ): ĠShort Ġ= ĊĠĠĠĠĠĠĠ Ġthis . perm ute ( x Ġ+ Ġthis . perm ute ( y Ġ+ Ġthis . perm ute ( z ))) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHas hes Ġthe Ġspecified Ġindex Ġwith Ġthe Ġmask Ġof Ġthis Ġlattice Ġsource , ĊĠĠĠĠ Ġ* Ġforcing Ġit Ġto Ġbe Ġwithin Ġthe Ġbounds Ġof ĊĠĠĠĠ Ġ* Ġ< code >[ [ 0 , Ġtable Ġsize Ġ- Ġ 1 ]] </ code >. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠ ĠThe Ġindex Ġto Ġperm ute . ĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġper muted Ġindex . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġperm ute ( index : ĠInt ): ĠShort Ġ= Ġthis . indices [ index Ġand Ġthis . mask ] ĊĊĠĠĠ Ġoverride Ġfun Ġoutput ( x : ĠFloat , Ġy : ĠFloat , Ġz : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcache Ġ Ġ= ĠCompute Utils . local Cache ĊĊĠĠĠĠĠĠĠ Ġval Ġx K not s Ġ= Ġcache . arrays . borrow () ĊĠĠĠĠĠĠĠ Ġval Ġy K not s Ġ= Ġcache . arrays . borrow () ĊĠĠĠĠĠĠĠ Ġval Ġz K not s Ġ= Ġcache . arrays . borrow () ĊĊĠĠĠĠĠĠĠ Ġval Ġi X Ġ= ĠMath Utils . floor i ( x ) ĊĠĠĠĠĠĠĠ Ġval Ġi Y Ġ= ĠMath Utils . floor i ( y ) ĊĠĠĠĠĠĠĠ Ġval Ġi Z Ġ= ĠMath Utils . floor i ( z ) ĊĊĠĠĠĠĠĠĠ Ġval Ġf X Ġ= Ġx Ġ- Ġi X ĊĠĠĠĠĠĠĠ Ġval Ġf Y Ġ= Ġy Ġ- Ġi Y ĊĠĠĠĠĠĠĠ Ġval Ġf Z Ġ= Ġz Ġ- Ġi Z ĊĊĠĠĠĠĠĠĠ Ġfor ( k Ġin Ġ- 1 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( j Ġin Ġ- 1 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ- 1 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġthis . indexOf ( i X Ġ+ Ġi , Ġi Y Ġ+ Ġj , Ġi Z Ġ+ Ġk ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx K not s [ i Ġ+ Ġ 1 ] Ġ= Ġthis . values [ index . toInt ()] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy K not s [ j Ġ+ Ġ 1 ] Ġ= ĠMath Utils . four K not Spline ( f X , Ġx K not s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġz K not s [ k Ġ+ Ġ 1 ] Ġ= ĠMath Utils . four K not Spline ( f Y , Ġy K not s ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcache . arrays . reuse ( x K not s , Ġy K not s , Ġz K not s ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠMath Utils . clamp ( Math Utils . four K not Spline ( f Z , Ġz K not s ), Ġ- 1 f , Ġ 1 f ) ĊĠĠĠ Ġ} Ċ }