package Ġme . anno . objects . ge ometric Ċ Ċ import Ġme . anno . cache . Cache Section Ċ import Ġme . anno . gpu . GFX Ċ import Ġme . anno . gpu . drawing . GFX x 3 D Ċ import Ġme . anno . gpu . Shader Lib Ċ import Ġme . anno . gpu . Shader Lib . y 3 D Ċ import Ġme . anno . gpu . shader . Shader Ċ import Ġme . anno . io . IS ave able Ċ import Ġme . anno . io . base . Base Writer Ċ import Ġme . anno . objects . GFX Transform Ċ import Ġme . anno . objects . Transform Ċ import Ġme . anno . animation . Animated Property Ċ import Ġme . anno . gpu . shader . builder . Variable Ċ import Ġme . anno . objects . at tract ors . Effect Color ing Ċ import Ġme . anno . objects . at tract ors . Effect Morph ing Ċ import Ġme . anno . objects . modes . UV Projection Ċ import Ġme . anno . studio . re ms . Scene . noise Func Ċ import Ġme . anno . ui . base . groups . Panel List Y Ċ import Ġme . anno . ui . editor . Setting Category Ċ import Ġme . anno . ui . style . Style Ċ import Ġme . anno . utils . math s . Math s Ċ import Ġme . anno . utils . math s . Math s . fract Ċ import Ġme . anno . utils . types . Vectors . minus Ċ import Ġme . anno . utils . types . Vectors . mul Alpha Ċ import Ġme . anno . utils . types . Vectors . times Ċ import Ġorg . j om l .* Ċ import Ġkotlin . math . floor Ċ Ċ /** Ċ Ġ* Ġchildren Ġshould Ġbe Ġcircles Ġor Ġpoly gons , Ċ Ġ* Ġcreates Ġa Ġoutline Ġshape , Ġwhich Ġcan Ġbe Ġanimated Ċ Ġ* Ġlike Ġhttps :// youtu . be / To TW a Zt GO j 8 ? t = 8 7 Ġ( 1 : 2 7 , ĠLin us ĠTech ĠT ips , ĠUpload Ġdate ĠApr Ġ 2 8 , Ġ 2 0 2 1 ) Ċ Ġ* Ġ*/ Ċ class ĠLine Polygon ( parent : ĠTransform ? Ġ= Ġnull ) Ġ: ĠG FX Transform ( parent ) Ġ{ ĊĊĠĠĠ Ġ// Ġtodo Ġif Ġclosed , Ġmodulo Ġpositions Ġmake Ġsense , Ġso Ġa Ġline Ġcould Ġsw irl Ġaround Ġmultiple Ġtimes ĊĊĠĠĠ Ġoverride Ġval ĠclassName Ġget () Ġ= Ġ" Line Polygon " ĊĠĠĠ Ġoverride Ġval Ġdefault DisplayName : ĠString Ġ= Ġ" Line " ĊĊĠĠĠ Ġval Ġstart Offset Ġ= ĠAnimated Property . float ( 0 f ) ĊĠĠĠ Ġval Ġend Offset Ġ= ĠAnimated Property . float ( 0 f ) ĊĠĠĠ Ġval Ġline Strength Ġ= ĠAnimated Property . float 0 1 ( 1 f ) ĊĠĠĠ Ġvar Ġf ading On End Ġ= ĠAnimated Property . float Plus ( 0 . 1 f ) ĊĊĠĠĠ Ġvar Ġis Closed Ġ= ĠAnimated Property . float 0 1 () ĊĊĠĠĠ Ġoverride Ġfun Ġsave ( writer : ĠBase Writer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . save ( writer ) ĊĠĠĠĠĠĠĠ Ġwriter . write Object ( this , Ġ" start Offset ", Ġstart Offset ) ĊĠĠĠĠĠĠĠ Ġwriter . write Object ( this , Ġ" end Offset ", Ġend Offset ) ĊĠĠĠĠĠĠĠ Ġwriter . write Object ( this , Ġ" line Strength ", Ġline Strength ) ĊĠĠĠĠĠĠĠ Ġwriter . write Object ( this , Ġ" f ading On End ", Ġf ading On End ) ĊĠĠĠĠĠĠĠ Ġwriter . write Object ( this , Ġ" is Closed ", Ġis Closed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Object ( name : ĠString , Ġvalue : ĠIS ave able ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" start Offset " Ġ-> Ġstart Offset . copyFrom ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" end Offset " Ġ-> Ġend Offset . copyFrom ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" line Strength " Ġ-> Ġline Strength . copyFrom ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" f ading On End " Ġ-> Ġf ading On End . copyFrom ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" is Closed " Ġ-> Ġis Closed . copyFrom ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . read Object ( name , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Inspector ( ĊĠĠĠĠĠĠĠ Ġlist : ĠPanel List Y , ĊĠĠĠĠĠĠĠ Ġstyle : ĠStyle , ĊĠĠĠĠĠĠĠ Ġget Group : Ġ( title : ĠString , Ġdescription : ĠString , Ġdict Sub Path : ĠString ) Ġ-> ĠSetting Category ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . create Inspector ( list , Ġstyle , Ġget Group ) ĊĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= Ġget Group (" Line ", Ġ" Properties Ġof Ġthe Ġline ", Ġ" line ") ĊĠĠĠĠĠĠĠ Ġgroup Ġ+= Ġvi (" Start ĠOffset ", Ġ"", Ġstart Offset , Ġstyle ) ĊĠĠĠĠĠĠĠ Ġgroup Ġ+= Ġvi (" End ĠOffset ", Ġ"", Ġend Offset , Ġstyle ) ĊĠĠĠĠĠĠĠ Ġgroup Ġ+= Ġvi (" Line ĠSt rength ", Ġ"", Ġline Strength , Ġstyle ) ĊĠĠĠĠĠĠĠ Ġgroup Ġ+= Ġvi (" Is ĠClosed ", Ġ"", Ġis Closed , Ġstyle ) ĊĠĠĠĠĠĠĠ Ġgroup Ġ+= Ġvi (" F ading ", Ġ" How Ġmuch Ġthe Ġlast Ġpoints Ġfade , Ġif Ġthe Ġoffsets Ġexclude Ġeverything ", Ġf ading On End , Ġstyle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( stack : ĠMatrix 4 f ArrayList , Ġtime : ĠDouble , Ġcolor : ĠVector 4 fc ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġtodo Ġcolor ing Ġand Ġmorph ing Ġneeds Ġto Ġbe Ġapplied Ġto Ġthe Ġchildren ĊĊĠĠĠĠĠĠĠ Ġval Ġpoints Ġ= Ġchildren . filter Ġ{ Ġit Ġ! is ĠEffect Morph ing Ġ&& Ġit Ġ! is ĠEffect Color ing Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( points . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Draw ( stack , Ġtime , Ġcolor ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( points . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Child ( stack , Ġtime , Ġcolor , Ġchildren [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransforms Ġ= Ġpoints . map Ġ{ Ġit . getLocal Transform ( time , Ġthis ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpositions Ġ= Ġtransforms . map Ġ{ Ġget Position ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimes Ġ= Ġpoints . map Ġ{ Ġit . getLocal Time ( time ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolors Ġ= Ġpoints . map Indexed Ġ{ Ġindex , Ġit Ġ-> Ġit . getLocal Color ( color , Ġtimes [ index ]) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Strength Ġ= Ġline Strength [ time ] Ġ* Ġ 0 . 5 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscales Ġ= Ġpoints . map Indexed Ġ{ Ġindex , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġit . scale [ times [ index ]] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( s . x () Ġ+ Ġs . y ()) Ġ* Ġline Strength ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġpoints . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Index Ġ= Ġsize Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġget Position ( i 0 : ĠInt ) Ġ= Ġpositions [ i 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġget Position ( f 0 : ĠFloat ): ĠVector 3 f Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi 0 Ġ= Ġfloor ( f 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i 0 Ġ>= Ġlast Index ) Ġreturn Ġpositions [ last Index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector 3 f ( getPosition ( i 0 )). lerp ( getPosition ( i 0 Ġ+ Ġ 1 ), Ġfr act ( f 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġget Scale ( i 0 : ĠInt ) Ġ= Ġscales [ i 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġget Scale ( f 0 : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi 0 Ġ= Ġfloor ( f 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i 0 Ġ>= Ġlast Index ) Ġreturn Ġscales [ last Index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMath s . mix ( get Scale ( i 0 ), Ġget Scale ( i 0 Ġ+ Ġ 1 ), Ġfr act ( f 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġget Color ( i 0 : ĠInt ) Ġ= Ġcolors [ i 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġget Color ( f 0 : ĠFloat ): ĠVector 4 f Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi 0 Ġ= Ġfloor ( f 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i 0 Ġ>= Ġlast Index ) Ġreturn Ġcolors [ last Index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector 4 f ( getColor ( i 0 )). lerp ( getColor ( i 0 Ġ+ Ġ 1 ), Ġfr act ( f 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdraw Child ( index : ĠInt , Ġfraction : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġchild Ġat Ġfraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Transform Ġ= Ġmix ( transforms [ index ], Ġtransforms [ index Ġ+ Ġ 1 ], Ġfraction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc 0 Ġ= Ġchildren [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġinterpolated Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . next Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . mul ( local Transform ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc 0 . draw Direct ly ( stack , Ġtime , Ġcolor , Ġget Color ( index Ġ+ Ġfraction )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdraw Child ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Child ( stack , Ġtime , Ġcolor , Ġchildren [ index ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlengths Ġ= ĠFloat Array ( transforms . size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlength Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġpoints . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlength Ġ+= Ġpositions [ i Ġ- Ġ 1 ]. distance ( positions [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlengths [ i ] Ġ= Ġlength ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlengths [ points . size ] Ġ= ĠFloat . POSITIVE _ INFINITY Ġ// Ġuse Ġst h Ġreal istic Ġinstead ? ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo Ġif Ġstart Ġis Ġnegative Ġor Ġend Ġis Ġnegative , Ġex trap olate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġstart Offset [ time ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġlength Ġ- Ġend Offset [ time ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġend Ġpoint Ġf ading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Ġ> Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ading Ġ= Ġ 1 f Ġ- Ġ( start Ġ- Ġlength ) Ġ/ Ġf ading On End [ time ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f ading Ġ> Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Child ( stack , Ġtime , Ġcolor . mul Alpha ( f ading ), Ġchildren . last ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġstart Ġpoint Ġf ading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Ġ< Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ading Ġ= Ġ 1 f Ġ+ Ġend Ġ/ Ġf ading On End [ time ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f ading Ġ> Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Child ( stack , Ġtime , Ġcolor . mul Alpha ( f ading ), Ġchildren . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapped Indices Ġ= ĠArrayList < Float >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġpoints . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġlengths [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( l Ġin Ġstart .. end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mapped Indices . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġprevious Ġfr act Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlx Ġ= Ġlengths [ i Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfraction Ġ= Ġ( l Ġ- Ġstart ) Ġ/ Ġ( l Ġ- Ġlx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fraction Ġ< Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Indices . add ( i Ġ- Ġfraction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Indices . add ( i . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ+ Ġ 1 Ġ< Ġpoints . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlx Ġ= Ġlengths [ i Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lx Ġ> Ġend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġnext Ġfr act Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfraction Ġ= Ġ( end Ġ- Ġl ) Ġ/ Ġ( lx Ġ- Ġl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fraction Ġ> Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapped Indices . add ( i Ġ+ Ġfraction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo Ġif Ġangle Ġ< Ġ 9 0 Â° , Ġuse Ġthe Ġprojected , Ġcorrect Ġpositions ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo Ġuse Ġcorrect Ġforward Ġdirection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġforward Ġ= ĠVector 3 f ( 0 f , Ġ 0 f , Ġ 1 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshader Ġ= Ġshader . value . value ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdraw Segment ( i 0 : ĠFloat , Ġi 1 : ĠFloat , Ġalpha : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 0 Ġ= Ġget Position ( i 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= Ġget Position ( i 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġp 1 Ġ- Ġp 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Norm Ġ= ĠVector 3 f ( delta ). normalize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġdelta Norm . cross ( forward ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd 0 Ġ= Ġdx Ġ* Ġ( get Scale ( i 0 ) Ġ* Ġalpha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd 1 Ġ= Ġdx Ġ* Ġ( get Scale ( i 1 ) Ġ* Ġalpha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Segment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshader , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVector 3 f ( p 0 ). add ( d 0 ), ĠVector 3 f ( p 0 ). sub ( d 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVector 3 f ( p 1 ). add ( d 1 ), ĠVector 3 f ( p 1 ). sub ( d 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( i 0 ). mul Alpha ( alpha ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Color ( i 1 ). mul Alpha ( alpha ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader . use () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupload At tract ors ( shader , Ġtime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġmapped Indices . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi 0 Ġ= Ġmapped Indices [ i Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi 1 Ġ= Ġmapped Indices [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Segment ( i 0 , Ġi 1 , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Closed Ġ= Ġis Closed [ time ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Closed Ġ> Ġ 0 f Ġ&& Ġmapped Indices . size Ġ> Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Segment ( mapped Indices . first (), Ġmapped Indices . last (), Ġis Closed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmapped Indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġii Ġ= Ġi . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ii . toFloat () Ġ== Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Child ( ii ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Child ( ii , Ġfr act ( i )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmix ( m 0 : ĠMatrix 4 f , Ġm 1 : ĠMatrix 4 f , Ġf : ĠFloat ): ĠMatrix 4 f Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm 0 . lerp ( m 1 , Ġf , ĠMatrix 4 f ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Segment ( ĊĠĠĠĠĠĠĠ Ġshader : ĠShader , ĊĠĠĠĠĠĠĠ Ġa 0 : ĠVector 3 f , Ġa 1 : ĠVector 3 f , ĊĠĠĠĠĠĠĠ Ġb 0 : ĠVector 3 f , Ġb 1 : ĠVector 3 f , ĊĠĠĠĠĠĠĠ Ġc 0 : ĠVector 4 f , Ġc 1 : ĠVector 4 f , ĊĠĠĠĠĠĠĠ Ġstack : ĠMatrix 4 f ArrayList ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠG FX . check () ĊĠĠĠĠĠĠĠ Ġshader . use () ĊĠĠĠĠĠĠĠ ĠG FX x 3 D . shader 3 D Uniform s ( shader , Ġstack , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġshader . v 3 (" pos 0 ", Ġa 0 ) ĊĠĠĠĠĠĠĠ Ġshader . v 3 (" pos 1 ", Ġa 1 ) ĊĠĠĠĠĠĠĠ Ġshader . v 3 (" pos 2 ", Ġb 0 ) ĊĠĠĠĠĠĠĠ Ġshader . v 3 (" pos 3 ", Ġb 1 ) ĊĠĠĠĠĠĠĠ Ġshader . v 4 (" col 0 ", Ġc 0 ) ĊĠĠĠĠĠĠĠ Ġshader . v 4 (" col 1 ", Ġc 1 ) ĊĠĠĠĠĠĠĠ ĠUV Projection . Plan ar . get Buffer (). draw ( shader ) ĊĠĠĠĠĠĠĠ ĠG FX . check () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Position ( m 0 : ĠMatrix 4 f ) Ġ= Ġm 0 . get Translation ( Vector 3 f ()) ĊĊĠĠĠ Ġoverride Ġfun Ġdraw Children Autom atically (): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcache Ġ= ĠCache Section (" Line Cache ") ĊĠĠĠĠĠĠĠ Ġval Ġshader Ġ= Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠShader Lib . create Shader Plus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" line Polygon ", ĠShader Lib . v 3 D Base Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a 3 Ġattr 0 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a 2 Ġattr 1 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" u 4 Ġt iling ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" u 3 Ġpos 0 , Ġpos 1 , Ġpos 2 , Ġpos 3 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" u 4 Ġcol 0 , Ġcol 1 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain (){ \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġvec 2 Ġatt Ġ= Ġattr 0 . xy * 0 . 5 + 0 . 5 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġlocal Position Ġ= Ġmix ( mix ( pos 0 , Ġpos 1 , Ġatt . x ), Ġmix ( pos 2 , Ġpos 3 , Ġatt . x ), Ġatt . y );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġgl _ Position Ġ= Ġtransform Ġ* Ġvec 4 ( local Position , Ġ 1 . 0 );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader Lib . flat Normal Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader Lib . position Post Processing Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġuv Ġ= Ġattr 1 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġu vw Ġ= Ġattr 0 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġcol X Ġ= Ġmix ( col 0 , Ġcol 1 , Ġatt . y );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }", Ġy 3 D Ġ+ ĠVariable (" vec 4 "," col X "), Ġ"" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader Lib . get Texture Lib Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader Lib . getColor Force Field Lib Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnoise Func Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain (){ \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġvec 4 Ġcolor Ġ= Ġcol X ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġif (${ Shader Lib . has Force Field Color }) Ġcolor Ġ*= Ġget Force Field Color (); \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdoes Ġwork , Ġjust Ġthe Ġerror Ġshould Ġbe Ġcleaner ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ" ĠĠ Ġgl _ Frag Depth Ġ+= Ġ 0 . 0 1 Ġ* Ġrandom ( uv );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġgl _ Frag Color Ġ= Ġcolor ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }", ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }