package Ġb aa ah s . models Ċ Ċ import Ġb aa ah s . controller . Controller Id Ċ import Ġb aa ah s . controller . S ac n Manager Ċ import Ġb aa ah s . device . Pixel Array Device Ċ import Ġb aa ah s . device . PixelFormat Ċ import Ġb aa ah s . dm x . D mx Transport Config Ċ import Ġb aa ah s . fixtures . Fixture Mapping Ċ import Ġb aa ah s . geom . Vector 3 F Ċ import Ġb aa ah s . glsl . Linear Surface Pixel Strategy Ċ import Ġb aa ah s . model . Light Ring Ċ import Ġb aa ah s . model . Light Ring Data Ċ import Ġb aa ah s . model . Model Data Ċ import Ġb aa ah s . model . Model Unit Ċ import Ġb aa ah s . scene . Fixture Mapping Data Ċ import Ġkotlin . math . PI Ċ Ċ private Ġval Ġlight R ings Ġ= ĠlistOf ( Ċ // ĠĠĠĠĠĠĠĠ 1 2 x Ġfour Ġmeter Ġcircum ference Ġ( 2 4 0 Ġpixels ) ĊĠĠĠ ĠLight Ring Config (" ring Ġ 4 . 0 1 ", Ġ 1 . m Ġ* Ġ 2 , Ġ 1 . m , Ġ 4 . m , Ġ 2 4 0 , Ġ 1 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 4 . 0 2 ", Ġ 2 . m Ġ* Ġ 2 , Ġ 1 . m , Ġ 4 . m , Ġ 2 4 0 , Ġ 3 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 4 . 0 3 ", Ġ 3 . m Ġ* Ġ 2 , Ġ 1 . m , Ġ 4 . m , Ġ 2 4 0 , Ġ 5 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 4 . 0 4 ", Ġ 4 . m Ġ* Ġ 2 , Ġ 1 . m , Ġ 4 . m , Ġ 2 4 0 , Ġ 7 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 4 . 0 5 ", Ġ 5 . m Ġ* Ġ 2 , Ġ 1 . m , Ġ 4 . m , Ġ 2 4 0 , Ġ 9 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 4 . 0 6 ", Ġ 6 . m Ġ* Ġ 2 , Ġ 1 . m , Ġ 4 . m , Ġ 2 4 0 , Ġ 1 1 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 4 . 0 7 ", Ġ 7 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 4 . m , Ġ 2 4 0 , Ġ 1 3 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 4 . 0 8 ", Ġ 8 . m Ġ* Ġ 2 , Ġ 1 . m , Ġ 4 . m , Ġ 2 4 0 , Ġ 1 5 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 4 . 0 9 ", Ġ 9 . m Ġ* Ġ 2 , Ġ 1 . m , Ġ 4 . m , Ġ 2 4 0 , Ġ 1 7 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 4 . 1 0 ", Ġ 1 0 . m Ġ* Ġ 2 , Ġ 1 . m , Ġ 4 . m , Ġ 2 4 0 , Ġ 1 9 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 4 . 1 1 ", Ġ 1 1 . m Ġ* Ġ 2 , Ġ 1 . m , Ġ 4 . m , Ġ 2 4 0 , Ġ 2 1 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 4 . 1 2 ", Ġ 1 2 . m Ġ* Ġ 2 , Ġ 1 . m , Ġ 4 . m , Ġ 2 4 0 , Ġ 2 3 ), Ċ Ċ // ĠĠĠĠĠĠĠĠ 1 2 x Ġfive Ġmeter Ġcircum ference Ġ( 3 0 0 Ġpixels ) ĊĠĠĠ ĠLight Ring Config (" ring Ġ 5 . 0 1 ", Ġ 1 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 5 . m , Ġ 3 0 0 , Ġ 2 5 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 5 . 0 2 ", Ġ 2 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 5 . m , Ġ 3 0 0 , Ġ 2 7 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 5 . 0 3 ", Ġ 3 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 5 . m , Ġ 3 0 0 , Ġ 2 9 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 5 . 0 4 ", Ġ 4 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 5 . m , Ġ 3 0 0 , Ġ 3 1 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 5 . 0 5 ", Ġ 5 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 5 . m , Ġ 3 0 0 , Ġ 3 3 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 5 . 0 6 ", Ġ 6 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 5 . m , Ġ 3 0 0 , Ġ 3 5 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 5 . 0 7 ", Ġ 7 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 5 . m , Ġ 3 0 0 , Ġ 3 7 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 5 . 0 8 ", Ġ 8 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 5 . m , Ġ 3 0 0 , Ġ 3 9 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 5 . 0 9 ", Ġ 9 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 5 . m , Ġ 3 0 0 , Ġ 4 1 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 5 . 1 0 ", Ġ 1 0 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 5 . m , Ġ 3 0 0 , Ġ 4 3 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 5 . 1 1 ", Ġ 1 1 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 5 . m , Ġ 3 0 0 , Ġ 4 5 ), ĊĠĠĠ ĠLight Ring Config (" ring Ġ 5 . 1 2 ", Ġ 1 2 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 5 . m , Ġ 3 0 0 , Ġ 4 7 ), Ċ Ċ // ĠĠĠĠĠĠĠĠ 1 x Ġeight Ġmeter Ġcircum ference Ġ( 4 8 0 Ġpixels ) ĊĠĠĠ ĠLight Ring Config (" ring Ġ 8 . 0 1 ", Ġ 7 . m Ġ* Ġ 2 , Ġ 3 . m , Ġ 8 . m , Ġ 4 8 0 , Ġ 4 9 ), Ċ ) Ċ val Ġfirst Pixel Radians Ġ= ĠPI Ġ/ Ġ 2 . 0 Ġ// Ġ 1 2 : 0 0 Ġno on . Ċ val Ġpixel Direction Ġ= ĠLight Ring . Pixel Direction . Clock wise Ċ Ċ val Ġhon cho Model Data Ġ= ĠModel Data ( ĊĠĠĠ Ġ" Hon cho ", ĊĠĠĠ Ġlight R ings . map Ġ{ Ġit . create Entity Data () Ġ}, ĊĠĠĠ Ġunits Ġ= ĠModel Unit . In ches Ċ ) Ċ Ċ private Ġval Ġcontroller Id Ġ= ĠController Id ( ĊĠĠĠ ĠS ac n Manager . controller TypeName , ĊĠĠĠ Ġ" s ac n - main " Ċ ) Ċ val Ġpixel Format Ġ= ĠPixel Format . GR B 8 Ġ// Ġ... Ġcould Ġbe ĠRGB 8 Ġor ĠG RB 8 . Ċ Ċ fun Ġgenerate Fixture Mapping Data (): ĠList < Fixture Mapping Data > Ġ{ ĊĠĠĠ Ġreturn Ġlight R ings . map Ġ{ Ġconfig Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġstart Channel Ġ= Ġ( config . starting Un iverse Ġ- Ġ 1 ) Ġ* Ġ 5 1 2 ĊĠĠĠĠĠĠĠ Ġval Ġend Channel Ġ= Ġstart Channel Ġ+ Ġconfig . pixel Count Ġ* Ġpixel Format . channels Per Pixel ĊĊĠĠĠĠĠĠĠ ĠFix ture Mapping Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġshort Name ? Ġor ĠID ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . name , Ġ// ĠTODO : Ġname ? Ġor ĠID ? ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPixel Array Device . Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . pixel Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Format , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Arrange ment Ġ= ĠLinear Surface Pixel Strategy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD mx Transport Config ( fixture Starts In Fresh Un iverse Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġgenerate Fixture Mappings (): ĠMap < Controller Id , ĠList < Fixture Mapping >> Ġ{ ĊĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġcontroller Id Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight R ings . map Ġ{ Ġconfig Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Channel Ġ= Ġ( config . starting Un iverse Ġ- Ġ 1 ) Ġ* Ġ 5 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Channel Ġ= Ġstart Channel Ġ+ Ġconfig . pixel Count Ġ* Ġpixel Format . channels Per Pixel ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFix ture Mapping ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . create Entity (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPixel Array Device . Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . pixel Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Format , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Arrange ment Ġ= ĠLinear Surface Pixel Strategy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD mx Transport Config ( fixture Starts In Fresh Un iverse Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġval ĠNumber . m : ĠFloat Ġget () Ġ= Ġto Float () Ġ* Ġ 1 0 0 f Ġ/ Ġ 2 . 5 4 f Ċ Ċ private Ġdata Ġclass ĠLight Ring Config ( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġcenter X : ĠFloat , ĊĠĠĠ Ġval Ġcenter Y : ĠFloat , ĊĠĠĠ Ġval Ġcircum ference : ĠFloat , ĊĠĠĠ Ġval Ġpixel Count : ĠInt , ĊĠĠĠ Ġval Ġstarting Un iverse : ĠInt , ĊĠĠĠ Ġval Ġorientation : ĠVector 3 F Ġ= ĠVector 3 F . facing Forward Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġcreate Entity () Ġ= Ġcreate Entity ( first Pixel Radians . toFloat (), Ġpixel Direction ) ĊĠĠĠ Ġfun Ġcreate Entity ( first Pixel Radians : ĠFloat , Ġpixel Direction : ĠLight Ring . Pixel Direction ) Ġ= ĊĠĠĠĠĠĠĠ ĠLight Ring ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname , Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= ĠVector 3 F ( center X Ġ- Ġ 7 . m , Ġcenter Y , Ġ 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradius Ġ= Ġ( circ um ference Ġ/ ĠPI ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Pixel Radians Ġ= Ġfirst Pixel Radians , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpixel Direction Ġ= Ġpixel Direction ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġcreate Entity Data () Ġ= ĠLight Ring Data ( ĊĠĠĠĠĠĠĠ Ġname , Ġnull , ĊĠĠĠĠĠĠĠ Ġposition Ġ= ĠVector 3 F ( center X Ġ- Ġ 7 . m , Ġcenter Y , Ġ 0 f ), ĊĠĠĠĠĠĠĠ Ġradius Ġ= Ġ( circ um ference Ġ/ ĠPI ). toFloat (), ĊĠĠĠĠĠĠĠ Ġfirst Pixel Radians Ġ= Ġfirst Pixel Radians . toFloat (), ĊĠĠĠĠĠĠĠ Ġpixel Direction Ġ= Ġpixel Direction ĊĠĠĠ Ġ) Ċ }