package Ġc ga . exercise . components . light Ċ Ċ import Ġc ga . exercise . components . shader . Shader Program Ċ import Ġorg . j om l . Math Ċ import Ġorg . j om l . Matrix 3 f Ċ import Ġorg . j om l . Matrix 4 f Ċ import Ġorg . j om l . Vector 3 f Ċ Ċ class ĠSpot Light Holder ( private Ġval ĠSpot Light List : ĠMutable List < Spot Light >) Ġ: ĠI Spot Light Ġ{ ĊĊĠĠĠ Ġval ĠK c Ġ= Ġ 0 . 5 f ĊĠĠĠ Ġval ĠK l Ġ= Ġ 0 . 0 5 f ĊĠĠĠ Ġval ĠK q Ġ= Ġ 0 . 0 1 f ĊĊĠĠĠ Ġprivate Ġvar Ġspot Light Positions Ġ: ĠFloat Array Ġ= ĠFloat Array ( Spot Light List . size Ġ* Ġ 3 ) ĊĠĠĠ Ġprivate Ġvar Ġspot Light Colors Ġ: ĠFloat Array Ġ= ĠFloat Array ( Spot Light List . size Ġ* Ġ 3 ) ĊĊĠĠĠ Ġprivate Ġvar Ġspot Light Directions Ġ: ĠFloat Array Ġ= ĠFloat Array ( Spot Light List . size Ġ* Ġ 3 ) ĊĠĠĠ Ġprivate Ġvar Ġspot Light Inner Angles Ġ: ĠFloat Array Ġ= ĠFloat Array ( Spot Light List . size ) ĊĠĠĠ Ġprivate Ġvar Ġspot Light Outer Angles Ġ: ĠFloat Array Ġ= ĠFloat Array ( Spot Light List . size ) ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind ( shader Program : ĠShader Program , Ġname : ĠString , Ġview Matrix : ĠMatrix 4 f ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġshader Program . use () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠSpot Light List . size Ġ* Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspot Light Positions [ i ] Ġ= ĠSpot Light List [ i / 3 ]. get World Position ()[ i Ġ% Ġ 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspot Light Colors [ i ] Ġ= ĠSpot Light List [ i / 3 ]. light Color [ i Ġ% Ġ 3 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġspot Light Directions [ i ] Ġ= ĠSpot Light List [ i / 3 ]. get World Z Axis (). neg ate (). mul ( ĠMatrix 3 f ( view Matrix ))[ i Ġ% Ġ 3 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( i Ġ% Ġ 3 Ġ== Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspot Light Inner Angles [ i / 3 ] Ġ= ĠMath . to Radians ( Spot Light List [ i / 3 ]. inner Angle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspot Light Outer Angles [ i / 3 ] Ġ= ĠMath . to Radians ( Spot Light List [ i / 3 ]. outer Angle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshader Program . set Uniform ( name Ġ+ Ġ" Size ", Ġspot Light Positions . size Ġ/ Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġshader Program . set Uniform ( name Ġ+ Ġ" Positions ", Ġspot Light Positions ) ĊĠĠĠĠĠĠĠ Ġshader Program . set Uniform ( name Ġ+ Ġ" Colors ", Ġspot Light Colors ) ĊĊĠĠĠĠĠĠĠ Ġshader Program . set Uniform ( name Ġ+ Ġ" Att enuation ", ĠVector 3 f ( Kc , Kl , Kq )) ĊĊĠĠĠĠĠĠĠ Ġshader Program . set Uniform ( name Ġ+ Ġ" Directions ", Ġspot Light Directions ) ĊĠĠĠĠĠĠĠ Ġshader Program . set Uniform Float Array ( name Ġ+ Ġ" Inner Angles ", Ġspot Light Inner Angles ) ĊĠĠĠĠĠĠĠ Ġshader Program . set Uniform Float Array ( name Ġ+ Ġ" Outer Angles ", Ġspot Light Outer Angles ) ĊĊĊĠĠĠ Ġ} ĊĊ Ċ }