/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 - 2 0 1 9 . Ġdata 2 viz Ġs Ãł rl . Ċ Ġ* Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġio . data 2 viz . viz Ċ Ċ import Ġio . data 2 viz . timer . Timer Ċ import Ġio . data 2 viz . timer . timer Ċ import Ġjavafx . scene . canvas .* Ċ import Ġkotlin . math . PI ĊĊ Ċ /** Ċ Ġ* ĠJ Fx ĠCanvas Ġversion . ĠSee Ġhttps :// docs . oracle . com / java fx / 2 / canvas / j fx pub - canvas . htm Ċ Ġ*/ Ċ public Ġclass ĠJ Fx Viz Renderer ( ĊĠĠĠ Ġpublic Ġval Ġcanvas : ĠCanvas , ĊĠĠĠ Ġoverride Ġval Ġviz : ĠV iz ) Ġ: ĠV iz Renderer Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġanimation Timers Ġ= Ġmutable ListOf < Timer >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġviz . renderer Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgc Ġ= Ġcanvas . graphics Context 2 D ĊĠĠĠĠĠĠĠ Ġgc . clear Rect (. 0 , Ġ. 0 , Ġcanvas . width , Ġcanvas . height ) ĊĠĠĠĠĠĠĠ Ġviz . layers . forEach Ġ{ Ġlayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layer . visible ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer . render ( gc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Animations () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viz . animation Timers . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviz . animation Timers . forEach Ġ{ Ġanim Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Timers Ġ+= Ġtimer Ġ{ Ġtime Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ( time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Timers Ġ+= Ġtimer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop Animations () Ġ{ ĊĠĠĠĠĠĠĠ Ġanimation Timers . forEach Ġ{ Ġit . stop () Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ Ċ internal Ġfun ĠGraphics Context . add Transform ( transform : ĠTransform ) Ġ{ ĊĠĠĠ Ġtransform . transform ations . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTranslation Ġ-> Ġtranslate ( it . x , Ġit . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRotation Ġ-> Ġrotate (+ it . delta Ġ* Ġ 1 8 0 Ġ/ ĠPI ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠGraphics Context . remove Transform ( transform : ĠTransform ) Ġ{ ĊĠĠĠ Ġtransform . transform ations . reversed (). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTranslation Ġ-> Ġtranslate (- it . x , Ġ- it . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRotation Ġ-> Ġrotate (- it . delta Ġ* Ġ 1 8 0 Ġ/ ĠPI ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ