package Ġcom . in ari . fire fly . physics . movement Ċ Ċ import Ġcom . in ari . fire fly . Movement Aspect .* Ċ import Ġcom . in ari . fire fly . core . system . System Component Ċ import Ġcom . in ari . fire fly . core . system . System ComponentType Ċ import Ġcom . in ari . fire fly . graphics . E Transform Ċ import Ġcom . in ari . util . geom . Vector 2 f Ċ import Ġkotlin . jvm . Jvm Field Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ abstract Ġclass ĠIntegr ator Ġprotected Ġconstructor () Ġ: ĠSystem Component ( Integr ator :: class . simple Name !! ) Ġ{ ĊĊĠĠĠ Ġ@ Jvm Field Ġvar Ġgravity Vec Ġ= ĠVector 2 f ( 0 f , Ġ 9 . 8 f ) ĊĊĠĠĠ Ġ@ Jvm Field Ġvar Ġadjust Max Ġ= Ġtrue ĊĠĠĠ Ġ@ Jvm Field Ġvar Ġadjust Ground Ġ= Ġtrue ĊĠĠĠ Ġ@ Jvm Field Ġvar Ġadjust Block Ġ= Ġfalse ĊĊĠĠĠ Ġabstract Ġfun Ġintegrate ( ĊĠĠĠĠĠĠĠ Ġmovement : ĠE Movement , ĊĠĠĠĠĠĠĠ Ġtransform : ĠE Transform , ĊĠĠĠĠĠĠĠ Ġdelta Time InSeconds : ĠFloat ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġabstract Ġfun Ġstep ( ĊĠĠĠĠĠĠĠ Ġmovement : ĠE Movement , ĊĠĠĠĠĠĠĠ Ġtransform : ĠE Transform , ĊĠĠĠĠĠĠĠ Ġdelta Time InSeconds : ĠFloat ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprotected Ġfun Ġadjust Velocity ( movement : ĠE Movement ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( adjust Block ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( BLOCK _ NORTH Ġin Ġmovement . aspect s Ġ&& Ġmovement . velocity . v 1 Ġ< Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . velocity . v 1 Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( BLOCK _ EAST Ġin Ġmovement . aspect s Ġ&& Ġmovement . velocity . v 0 Ġ> Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . velocity . v 0 Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( BLOCK _ SO UTH Ġin Ġmovement . aspect s Ġ&& Ġmovement . velocity . v 1 Ġ> Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . velocity . v 1 Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( BLOCK _ WEST Ġin Ġmovement . aspect s Ġ&& Ġmovement . velocity . v 0 Ġ< Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . velocity . v 0 Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( adjust Ground Ġ&& Ġmovement . on Ground ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . velocity . v 1 Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġif Ġ( adjust Max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . velocity . v 1 Ġ= Ġmin ( movement . velocity . v 1 , Ġmovement . max Velocity South ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . velocity . v 0 Ġ= Ġmin ( movement . velocity . v 0 , Ġmovement . max Velocity East ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . velocity . v 1 Ġ= Ġmax ( movement . velocity . v 1 , Ġ- movement . max Velocity North ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovement . velocity . v 0 Ġ= Ġmax ( movement . velocity . v 0 , Ġ- movement . max Velocity West ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠSystem ComponentType < Integr ator >( Integr ator :: class ) Ċ }