package Ġb aa ah s . models Ċ Ċ import Ġb aa ah s . device . Pixel Array Device Ċ import Ġb aa ah s . dm x . Sh enz ar py Ċ import Ġb aa ah s . geom . Vector 3 F Ċ import Ġb aa ah s . getResource Ċ import Ġb aa ah s . model . Moving Head Ċ import Ġb aa ah s . model . Obj Model Ċ import Ġkotlin . math . PI Ċ Ċ class ĠShe ep Model Ġ: ĠObj Model (" baa ah s - model . obj ") Ġ{ ĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ġ= Ġ" B AA AH S " ĊĠĠĠ Ġprivate Ġval Ġpixels Per Panel Ġ= Ġhash Map Of < String , ĠInt >() ĊĊĠĠĠ Ġprivate Ġval Ġwall Ey ed ness Ġ= Ġ( 0 . 1 f Ġ* ĠPI Ġ/ Ġ 2 ). toFloat () ĊĊĠĠĠ Ġoverride Ġval Ġmoving Head s : ĠList < Moving Head > Ġ= Ġarray ListOf ( ĊĠĠĠĠĠĠĠ ĠMoving Head ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" left Eye ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Left ĠE ye ", ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSh enz ar py , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= ĠVector 3 F (- 1 1 f , Ġ 2 0 2 . 3 6 1 f , Ġ- 2 4 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheading Ġ= ĠVector 3 F ( 0 f , Ġwall Ey ed ness , Ġ( PI Ġ/ Ġ 2 ). toFloat ()) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠMoving Head ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" right Eye ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Right ĠE ye ", ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 7 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSh enz ar py , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= ĠVector 3 F (- 1 1 f , Ġ 2 0 2 . 3 6 1 f , Ġ 2 7 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheading Ġ= ĠVector 3 F ( 0 f , Ġ- wall Ey ed ness , Ġ( PI Ġ/ Ġ 2 ). toFloat ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġload () Ġ{ ĊĠĠĠĠĠĠĠ ĠgetResource (" baa ah s - panel - info . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. split ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . split ( Regex ("\\ s + ")) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġpixels Per Panel [ it [ 0 ]] Ġ= Ġit [ 1 ]. toInt () Ġ* Ġ 6 0 Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . load () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Surface ( name : ĠString , Ġfaces : ĠList < Face >, Ġlines : ĠList < Line >): ĠSurface Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Pixel Count Ġ= Ġpixels Per Panel [ name ] ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Pixel Count Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" No Ġpixel Ġcount Ġfound Ġfor Ġ$ name " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġwhen Ġ( name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Panel Ġ 2 " Ġ-> ĠVector 3 F (- 1 2 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Panel Ġ 3 " Ġ-> ĠVector 3 F (- 2 4 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠVector 3 F . origin ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠSurface ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname , Ġ" Panel Ġ$ name ", ĠPixel Array Device , Ġexpected Pixel Count , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfaces . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFace ( it . all Vertices . map Ġ{ Ġit Ġ+ Ġoffset Ġ}, Ġit . vertex A , Ġit . vertex B , Ġit . vertex C ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine ( it . vertices . map Ġ{ Ġit Ġ+ Ġoffset Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠPanel ( name : ĠString ) Ġ= ĠSurface ( name , Ġname , ĠPixel Array Device , Ġnull , Ġempty List (), Ġempty List ()) ĊĠĠĠ Ġ} Ċ }