package Ġorg . pro meth ist . client . standalone . ui Ċ Ċ import Ġjavafx . animation . Interpolator Ċ import Ġjavafx . animation . Transition Ċ import Ġjavafx . scene . image . Image Ċ import Ġjavafx . scene . image . ImageView Ċ import Ġjavafx . util . Duration Ċ import Ġkotlin . math . floor Ċ import Ġkotlin . math . min Ċ Ċ open Ġclass ĠAnimated Image ( private Ġval ĠimageView : ĠImageView , Ġprivate Ġval Ġpath : ĠString , Ġcount : ĠInt , Ġduration : ĠDouble , Ġprivate Ġval Ġcallback : ĠCallback ) Ġ: ĠTransition () Ġ{ ĊĊĠĠĠ Ġinterface ĠCallback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Last Frame () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsequence Ġ= ĠgetImage Sequence ( path , Ġcount ) ĊĠĠĠ Ġprivate Ġvar Ġlast Index Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġmax Index Ġ= Ġsequence . size Ġ- Ġ 1 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠimageView . image Ġ= Ġsequence [ 0 ] ĊĠĠĠĠĠĠĠ Ġcycle Count Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġcycle Duration Ġ= ĠDuration . millis ( duration ) ĊĠĠĠĠĠĠĠ Ġinterpol ator Ġ= ĠInterpol ator . LINEAR ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinterpolate ( k : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġmin ( floor ( k Ġ* Ġsequence . size ). toInt (), Ġmax Index ) ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġlast Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . image Ġ= Ġsequence [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Index Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġmax Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Last Frame () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ"${ this :: class . simple Name }( path Ġ= Ġ$ path )" ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetImage Sequence ( path : ĠString , Ġcount : ĠInt , Ġext : ĠString Ġ= Ġ" png "): ĠList < Image > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= Ġmutable ListOf < Image >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġpath Ġ+ Ġ"% 0 4 d ". format ( i ) Ġ+ Ġ"." Ġ+ Ġext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence . add ( Image ( java Class . getResource AsStream ( name ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsequence ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} Ċ }