package Ġcom . sup . dev . android . views . views Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Path Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġcom . sup . dev . android . R Ċ import Ġcom . sup . dev . android . tools . Tools Resources Ċ import Ġcom . sup . dev . android . tools . Tools View Ċ import Ġcom . sup . dev . java . tools . Tools Color Ċ import Ġcom . sup . dev . java . tools . Tools Math Ċ import Ġjava . util . ArrayList Ċ Ċ class ĠView Particles Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull ) Ġ: ĠView ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// Ġ ĠBuilding ĊĠĠĠ Ġ// ĊĊĠĠĠ Ġvar Ġsquare Mode Ġ= Ġtrue ĊĠĠĠ Ġvar Ġcolors Ġ= Ġint ArrayOf ( Tools Resources . getColor ( R . color . red _ 7 0 0 ), ĠTools Resources . getColor ( R . color . green _ 7 0 0 ), ĠTools Resources . getColor ( R . color . blue _ 7 0 0 )) ĊĠĠĠ Ġvar Ġpatch : ĠPath ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġmin Size Ġ= ĠTools View . dp To Px ( 2 ) ĊĠĠĠ Ġvar ĠmaxSize Ġ= ĠTools View . dp To Px ( 8 ) ĊĠĠĠ Ġvar Ġcreate X Min Ġ= Ġ- 1 f ĊĠĠĠ Ġvar Ġcreate X Max Ġ= Ġ- 1 f ĊĠĠĠ Ġvar Ġcreate Y Min Ġ= Ġ- 1 f ĊĠĠĠ Ġvar Ġcreate Y Max Ġ= Ġ- 1 f ĊĠĠĠ Ġvar Ġtime To Create Min Ġ= Ġ 1 0 L ĊĠĠĠ Ġvar Ġtime To Create Max Ġ= Ġ 6 0 L ĊĠĠĠ Ġvar Ġtime To Life Min Ġ= Ġ 2 0 0 0 L ĊĠĠĠ Ġvar Ġtime To Life Max Ġ= Ġ 8 0 0 0 L ĊĠĠĠ Ġvar Ġspeed X Min Ġ= Ġ(- Tools View . dp To Px ( 1 2 )) ĊĠĠĠ Ġvar Ġspeed X Max Ġ= ĠTools View . dp To Px ( 1 2 ) ĊĠĠĠ Ġvar Ġspeed Y Min Ġ= Ġ(- Tools View . dp To Px ( 1 2 )) ĊĠĠĠ Ġvar Ġspeed Y Max Ġ= ĠTools View . dp To Px ( 1 2 ) ĊĠĠĠ Ġvar Ġspeed Change X Min Ġ= Ġ(- Tools View . dp To Px ( 1 )) ĊĠĠĠ Ġvar Ġspeed Change X Max Ġ= ĠTools View . dp To Px ( 1 ) ĊĠĠĠ Ġvar Ġspeed Change Y Min Ġ= Ġ(- Tools View . dp To Px ( 1 )) ĊĠĠĠ Ġvar Ġspeed Change Y Max Ġ= ĠTools View . dp To Px ( 1 ) ĊĠĠĠ Ġvar Ġrotation Min Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġrotation Max Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġrotation Change Min Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġrotation Change Max Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġalpha Min Ġ= Ġ 1 f ĊĠĠĠ Ġvar Ġalpha Max Ġ= Ġ 1 f ĊĠĠĠ Ġvar Ġalpha Change Min Ġ= Ġ- 0 . 0 5 f ĊĠĠĠ Ġvar Ġalpha Change Max Ġ= Ġ- 0 . 2 f ĊĠĠĠ Ġvar Ġmax Count Ġ= Ġ 1 0 0 ĊĠĠĠ Ġvar Ġstep Time Ġ= Ġ 1 0 0 0 Ġ/ Ġ 6 0 f ĊĠĠĠ Ġvar Ġdestroy If Alpha Is Down Zero Ġ= Ġtrue ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// Ġ ĠLogic ĊĠĠĠ Ġ// ĊĊĠĠĠ Ġprivate Ġval Ġparticles Ġ= ĠArrayList < Particle >() ĊĠĠĠ Ġprivate Ġvar Ġlast Create : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġlast Create Arg : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġtime : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġif (! isEnabled ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġtime Ġ+= Ġstep Time . to Long () ĊĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġparticles . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparticles [ i ]. on Draw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( particles [ i ]. is Dead ) Ġparticles . remove At ( i --) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( last Create Ġ< Ġtime Ġ- Ġlast Create Arg ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Create Ġ+= Ġlast Create Arg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Create Arg Ġ= ĠTools Math . random Long ( time To Create Min , Ġtime To Create Max ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( particles . size Ġ< Ġmax Count ) Ġparticles . add ( 0 , ĠParticle ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// Ġ ĠClass ĊĠĠĠ Ġ// ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠParticle Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġis Dead : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġx : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġy : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġspeed X Ġ= ĠTools Math . random Float ( speed X Min , Ġspeed X Max ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġspeed Y Ġ= ĠTools Math . random Float ( speed Y Min , Ġspeed Y Max ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġspeed Change X Ġ= ĠTools Math . random Float ( speed Change X Min , Ġspeed Change X Max ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġspeed Change Y Ġ= ĠTools Math . random Float ( speed Change Y Min , Ġspeed Change Y Max ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsize : ĠFloat Ġ= ĠTools Math . random Float ( min Size , ĠmaxSize ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġrotation Ġ= ĠTools Math . random Float ( rotation Min , Ġrotation Max ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrotation Change Ġ= ĠTools Math . random Float ( rotation Change Min , Ġrotation Change Max ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġalpha Ġ= ĠTools Math . random Float ( alpha Min , Ġalpha Max ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġalpha Change Ġ= ĠTools Math . random Float ( alpha Change Min , Ġalpha Change Max ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcolor : ĠInt Ġ= Ġcolors [ Tools Math . random Int ( 0 , Ġcolors . size Ġ- Ġ 1 )] ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġtime To Life Ġ= ĠTools Math . random Long ( time To Life Min , Ġtime To Life Max ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpath Ġ= Ġpatch ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġif Ġ( create X Min Ġ> Ġ- 1 ) ĠTools Math . random Float ( create X Min , Ġcreate X Max ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠTools Math . random Float ( 0 f , Ġwidth . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġif Ġ( create X Min Ġ> Ġ- 1 ) ĠTools Math . random Float ( create Y Min , Ġcreate Y Max ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠTools Math . random Float ( 0 f , Ġheight . toFloat ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime To Life Ġ-= Ġstep Time . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġspeed X Ġ/ Ġstep Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġspeed Y Ġ/ Ġstep Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeed X Ġ+= Ġspeed Change X Ġ/ Ġstep Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Y Ġ+= Ġspeed Change Y Ġ/ Ġstep Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Ġ+= Ġrotation Change Ġ/ Ġstep Time ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Ġ+= Ġalpha Change Ġ/ Ġstep Time ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠTools Color . set Alpha ( Math . min ( 2 5 5 , ĠMath . max ( 0 , Ġ( 2 5 5 Ġ* Ġalpha ). toInt ())), Ġcolor ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( square Mode Ġ&& Ġrotation Ġ!= Ġ 0 f ) Ġcanvas . rotate ( rotation , Ġx , Ġy ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . scale ( size , Ġsize , Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . translate ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . translate (- x , Ġ- y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . scale ( 1 Ġ/ Ġsize , Ġ 1 Ġ/ Ġsize , Ġx , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( square Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( x Ġ- Ġsize Ġ/ Ġ 2 , Ġy Ġ- Ġsize Ġ/ Ġ 2 , Ġx Ġ+ Ġsize Ġ/ Ġ 2 , Ġy Ġ+ Ġsize Ġ/ Ġ 2 , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( x , Ġy , Ġsize Ġ/ Ġ 2 , Ġpaint ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( square Mode Ġ&& Ġrotation Ġ!= Ġ 0 f ) Ġcanvas . rotate (- rotation , Ġx , Ġy ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time To Life Ġ<= Ġ 0 Ġ|| Ġ( alpha Ġ< Ġ 0 Ġ&& Ġdestroy If Alpha Is Down Zero )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dead Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠP ATCH _ HE ART : ĠPath Ġ= ĠPath () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpaint Ġ= ĠPaint () ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . is Anti Alias Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ATCH _ HE ART . moveTo ( 0 f , Ġ 4 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ATCH _ HE ART . lineTo ( 0 f , Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ATCH _ HE ART . lineTo ( 2 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ATCH _ HE ART . lineTo ( 4 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ATCH _ HE ART . lineTo ( 6 f , Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ATCH _ HE ART . lineTo ( 8 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ATCH _ HE ART . lineTo ( 1 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ATCH _ HE ART . lineTo ( 1 2 f , Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ATCH _ HE ART . lineTo ( 1 2 f , Ġ 4 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ATCH _ HE ART . lineTo ( 6 f , Ġ 9 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ