package Ġme . anno . re ms studio . animation . drivers Ċ Ċ import Ġme . anno . animation . Type Ċ import Ġme . anno . io . IS ave able Ċ import Ġme . anno . io . base . Base Writer Ċ import Ġme . anno . math s . Math s . clamp Ċ import Ġme . anno . math s . noise . Full Noise Ċ import Ġme . anno . re ms studio . animation . Animated Property Ċ import Ġme . anno . re ms studio . objects . Transform Ċ import Ġme . anno . ui . Panel Ċ import Ġme . anno . ui . editor . Setting Category Ċ import Ġme . anno . ui . style . Style Ċ import Ġkotlin . math . min Ċ Ċ class ĠPer lin Noise Driver Ġ: ĠAnimation Driver () Ġ{ ĊĊĠĠĠ Ġvar Ġfal loff Ġ= ĠAnimated Property . float 0 1 ( 0 . 5 f ) ĊĠĠĠ Ġvar Ġoct aves Ġ= Ġ 5 ĊĊĠĠĠ Ġvar Ġseed Ġ= Ġ 0 L ĊĊĠĠĠ Ġprivate Ġvar Ġnoise Instance Ġ= ĠFull Noise ( seed ) ĊĠĠĠ Ġfun Ġget Noise (): ĠFull Noise Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( noise Instance . seed Ġ!= Ġseed ) Ġnoise Instance Ġ= ĠFull Noise ( seed ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnoise Instance ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue 0 ( time : ĠDouble , Ġkey frame Value : ĠDouble , Ġindex : ĠInt ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfal loff Ġ= Ġfal loff [ time ] ĊĠĠĠĠĠĠĠ Ġval Ġoct aves Ġ= Ġclamp ( oct aves , Ġ 0 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠgetValue ( time , Ġget Noise (), Ġfal loff . toDouble (), Ġoct aves ) Ġ/ Ġget MaxValue ( fal loff , Ġmin ( oct aves , Ġ 1 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġrecursion Ġisn 't Ġthe Ġbest ... Ġbut Ġwhatever ... ĊĠĠĠ Ġfun Ġget MaxValue ( fal loff : ĠFloat , Ġoct aves : ĠInt ): ĠFloat Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( oct aves Ġ>= Ġ 0 ) Ġ 1 f Ġelse Ġ 1 f Ġ+ Ġfal loff Ġ* Ġget MaxValue ( fal loff , Ġoct aves Ġ- Ġ 1 ) ĊĊĠĠĠ Ġfun ĠgetValue ( time : ĠDouble , Ġnoise : ĠFull Noise , Ġfal loff : ĠDouble , Ġstep : ĠInt ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġvalue 0 Ġ= Ġnoise . getValue ( time . toFloat (), Ġstep . toFloat ()). toDouble () ĊĠĠĠĠĠĠĠ Ġif Ġ( step Ġ> Ġ 0 ) Ġvalue 0 Ġ+= Ġfal loff Ġ* ĠgetValue ( 2 . 0 Ġ* Ġtime , Ġnoise , Ġfal loff , Ġstep Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Inspector ( ĊĠĠĠĠĠĠĠ Ġlist : ĠMutable List < Panel >, ĊĠĠĠĠĠĠĠ Ġtransform : ĠTransform , ĊĠĠĠĠĠĠĠ Ġstyle : ĠStyle , ĊĠĠĠĠĠĠĠ Ġget Group : Ġ( title : ĠString , Ġdescription : ĠString , Ġdict Sub Path : ĠString ) Ġ-> ĠSetting Category ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . create Inspector ( list , Ġtransform , Ġstyle , Ġget Group ) ĊĠĠĠĠĠĠĠ Ġlist Ġ+= Ġtransform . vi (" Oct aves ", Ġ" Levels Ġof ĠDetail ", ĠType . INT _ PLUS , Ġoct aves , Ġstyle ) Ġ{ Ġoct aves Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġlist Ġ+= Ġtransform . vi (" Seed ", Ġ"", ĠType . LONG , Ġseed , Ġstyle ) Ġ{ Ġseed Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġlist Ġ+= Ġtransform . vi (" F al loff ", Ġ" Changes Ġhigh - frequency Ġweight ", Ġfal loff , Ġstyle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave ( writer : ĠBase Writer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . save ( writer ) ĊĠĠĠĠĠĠĠ Ġwriter . write Long (" seed ", Ġseed , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġwriter . writeInt (" oct aves ", Ġoct aves , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġwriter . write Object ( this , Ġ" fal loff ", Ġfal loff ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Int ( name : ĠString , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" oct aves " Ġ-> Ġoct aves Ġ= Ġclamp ( value , Ġ 0 , ĠMAX _ OCT AV ES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . readInt ( name , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Long ( name : ĠString , Ġvalue : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" seed " Ġ-> Ġseed Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . read Long ( name , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Object ( name : ĠString , Ġvalue : ĠIS ave able ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" fal loff " Ġ-> Ġfal loff . copyFrom ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . read Object ( name , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval ĠclassName Ġget () Ġ= Ġ" Per lin Noise Driver " ĊĠĠĠ Ġoverride Ġfun Ġget DisplayName () Ġ= Ġ" Noise " ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ OCT AV ES Ġ= Ġ 3 2 ĊĠĠĠ Ġ} Ċ Ċ }