package Ġapp . the le ma . studio . shader Ċ Ċ import Ġapp . the le ma . g 2 d . Batch Ċ import Ġapp . the le ma . math . IV ec 2 Ċ import Ġapp . the le ma . math . Vec 2 Ċ import Ġapp . the le ma . shader . node . GLSL Type Ċ import Ġapp . the le ma . utils . Color Ċ Ċ class ĠShader Link View ( ĊĠĠĠ Ġsource : ĠShader Output View , ĊĠĠĠ Ġdestination : ĠShader Input View ? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġover Destination : ĠI Vec 2 ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġsource : ĠShader Output View Ġ= Ġsource ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . links . remove ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . links . add ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġdestination : ĠShader Input View ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield ?. link Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ?. link Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġx 1 Old : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġy 1 Old : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġx 2 Old : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġy 2 Old : ĠFloat Ġ= Ġ 0 f ĊĊĠĠĠ Ġprivate Ġvar Ġnormal Ġ= ĠVec 2 () ĊĊĠĠĠ Ġval Ġvert s Ġ= ĠFloat Array ( 2 0 ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠColor . int To Float Color ( Color . WHITE ) ĊĠĠĠĠĠĠĠ Ġthis [ Batch . C 1 ] Ġ= Ġc ĊĠĠĠĠĠĠĠ Ġthis [ Batch . C 2 ] Ġ= Ġc ĊĠĠĠĠĠĠĠ Ġthis [ Batch . C 3 ] Ġ= Ġc ĊĠĠĠĠĠĠĠ Ġthis [ Batch . C 4 ] Ġ= Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . source Ġ= Ġsource ĊĠĠĠĠĠĠĠ Ġthis . destination Ġ= Ġdestination ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Link () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp 1 : ĠI Vec 2 Ġ= Ġsource . global Position ĊĠĠĠĠĠĠĠ Ġval Ġp 2 : ĠI Vec 2 Ġ= Ġover Destination Ġ?: Ġdestination ?. global Position Ġ?: Ġzero 2 ĊĠĠĠĠĠĠĠ Ġval Ġx 1 Ġ= Ġp 1 . x Ġ+ Ġsource . width Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġval Ġy 1 Ġ= Ġp 1 . y Ġ+ Ġsource . height Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġval Ġc 1 Ġ= Ġsource . connection Color ĊĠĠĠĠĠĠĠ Ġval Ġx 2 Ġ= Ġp 2 . x ĊĠĠĠĠĠĠĠ Ġval Ġy 2 Ġ= Ġp 2 . y Ġ+ Ġ( if Ġ( over Destination Ġ== Ġnull ) Ġsource . height Ġ* Ġ 0 . 5 f Ġelse Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġc 2 Ġ= Ġdestination ?. connection Color Ġ?: Ġ- 1 f ĊĠĠĠĠĠĠĠ Ġval Ġhalf Width Ġ= Ġhalf Width ĊĊĠĠĠĠĠĠĠ Ġ// Ġupdate Ġnormal Ġonly Ġif Ġneeded ĊĠĠĠĠĠĠĠ Ġval Ġdestination Ġ= Ġdestination ĊĠĠĠĠĠĠĠ Ġif Ġ( destination Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbox 1 Ġ= Ġsource . box ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbox 2 Ġ= Ġdestination . box ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x 1 Old Ġ!= Ġbox 1 . x Ġ|| Ġy 1 Old Ġ!= Ġbox 1 . y Ġ|| Ġx 2 Old Ġ!= Ġbox 2 . x Ġ|| Ġy 2 Old Ġ!= Ġbox 2 . y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 1 Old Ġ= Ġbox 1 . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 1 Old Ġ= Ġbox 1 . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 2 Old Ġ= Ġbox 2 . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 2 Old Ġ= Ġbox 2 . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal . set ( x 2 , Ġy 2 ). sub ( x 1 , Ġy 1 ). nor (). rotate 9 0 ( 1 ). scl ( half Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x 1 Old Ġ!= Ġx 1 Ġ|| Ġy 1 Old Ġ!= Ġy 1 Ġ|| Ġx 2 Old Ġ!= Ġx 2 Ġ|| Ġy 2 Old Ġ!= Ġy 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 1 Old Ġ= Ġx 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 1 Old Ġ= Ġy 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 2 Old Ġ= Ġx 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 2 Old Ġ= Ġy 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal . set ( x 2 , Ġy 2 ). sub ( x 1 , Ġy 1 ). nor (). rotate 9 0 ( 1 ). scl ( half Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġvertices Ġ= Ġvert s ĊĠĠĠĠĠĠĠ Ġvertices [ Batch . X 1 ] Ġ= Ġx 1 Ġ- Ġnormal . x ĊĠĠĠĠĠĠĠ Ġvertices [ Batch . Y 1 ] Ġ= Ġy 1 Ġ- Ġnormal . y ĊĠĠĠĠĠĠĠ Ġvertices [ Batch . C 1 ] Ġ= Ġc 1 ĊĠĠĠĠĠĠĠ Ġvertices [ Batch . X 2 ] Ġ= Ġx 1 Ġ+ Ġnormal . x ĊĠĠĠĠĠĠĠ Ġvertices [ Batch . Y 2 ] Ġ= Ġy 1 Ġ+ Ġnormal . y ĊĠĠĠĠĠĠĠ Ġvertices [ Batch . C 2 ] Ġ= Ġc 1 ĊĠĠĠĠĠĠĠ Ġvertices [ Batch . X 3 ] Ġ= Ġx 2 Ġ+ Ġnormal . x ĊĠĠĠĠĠĠĠ Ġvertices [ Batch . Y 3 ] Ġ= Ġy 2 Ġ+ Ġnormal . y ĊĠĠĠĠĠĠĠ Ġvertices [ Batch . C 3 ] Ġ= Ġc 2 ĊĠĠĠĠĠĠĠ Ġvertices [ Batch . X 4 ] Ġ= Ġx 2 Ġ- Ġnormal . x ĊĠĠĠĠĠĠĠ Ġvertices [ Batch . Y 4 ] Ġ= Ġy 2 Ġ- Ġnormal . y ĊĠĠĠĠĠĠĠ Ġvertices [ Batch . C 4 ] Ġ= Ġc 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhalf Width Ġ= Ġ 1 f ĊĊĠĠĠĠĠĠĠ Ġval Ġzero 2 Ġ= ĠVec 2 ( 0 f , Ġ 0 f ) ĊĠĠĠ Ġ} Ċ } Ċ