package Ġc ga . exercise . components . geometry Ċ Ċ import Ġorg . j om l . Matrix 4 f Ċ import Ġorg . j om l . Vector 3 f Ċ Ċ open Ġclass ĠTransform able ( var Ġparent : ĠTransform able ? Ġ= Ġnull ): ĠI Transform able Ġ{ ĊĠĠĠ Ġvar Ġmatrix Ġ= ĠMatrix 4 f () ĊĊĠĠĠ Ġoverride Ġfun Ġrotate Local ( pitch : ĠFloat , Ġyaw : ĠFloat , Ġroll : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmatrix . rotate XYZ ( pitch , yaw , roll ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrotate Around Point ( pitch : ĠFloat , Ġyaw : ĠFloat , Ġroll : ĠFloat , Ġalt Mid point : ĠVector 3 f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġeig ene ĠMatrix Ġerstellen Ġund Ġmultip liz ieren ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . Translate Ġmid point Ġto Ġorigin Ġ 2 . Rotate Ġby ĠÎ± Ġ 3 . Translate Ġback ĊĠĠĠĠĠĠĠ Ġval Ġtemp Mat Ġ= ĠMatrix 4 f () ĊĊĠĠĠĠĠĠĠ Ġtemp Mat . translate ( alt Mid point ) ĊĠĠĠĠĠĠĠ Ġtemp Mat . rotate XYZ ( pitch , yaw , roll ) ĊĠĠĠĠĠĠĠ Ġtemp Mat . translate ( Vector 3 f ( alt Mid point ). neg ate ()) ĊĊĠĠĠĠĠĠĠ Ġmatrix Ġ= Ġtemp Mat . mul ( matrix ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtranslate Local ( delta Pos : ĠVector 3 f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmatrix . translate ( delta Pos ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtranslate Global ( delta Pos : ĠVector 3 f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtranslation Matrix Ġ= ĠMatrix 4 f (). translate ( delta Pos ) ĊĠĠĠĠĠĠĠ Ġtranslation Matrix . mul ( matrix , matrix ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġscale Local ( scale : ĠVector 3 f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmatrix . scale ( scale ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Position (): ĠVector 3 f Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVector 3 f ( matrix . m 3 0 (), matrix . m 3 1 (), matrix . m 3 2 ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget World Position (): ĠVector 3 f Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Mat Ġ= Ġget World Model Matrix (); ĊĠĠĠĠĠĠĠ Ġreturn ĠVector 3 f ( temp Mat . m 3 0 (), temp Mat . m 3 1 (), temp Mat . m 3 2 ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget X Axis (): ĠVector 3 f Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVector 3 f ( matrix . m 0 0 (), matrix . m 0 1 (), matrix . m 0 2 ()). normalize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Y Axis (): ĠVector 3 f Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVector 3 f ( matrix . m 1 0 (), matrix . m 1 1 (), matrix . m 1 2 ()). normalize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Z Axis (): ĠVector 3 f Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVector 3 f ( matrix . m 2 0 (), matrix . m 2 1 (), matrix . m 2 2 ()). normalize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget World X Axis (): ĠVector 3 f Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Mat Ġ= Ġget World Model Matrix () ĊĠĠĠĠĠĠĠ Ġreturn ĠVector 3 f ( temp Mat . m 0 0 (), temp Mat . m 0 1 (), temp Mat . m 0 2 ()). normalize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget World Y Axis (): ĠVector 3 f Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Mat Ġ= Ġget World Model Matrix () ĊĠĠĠĠĠĠĠ Ġreturn ĠVector 3 f ( temp Mat . m 1 0 (), temp Mat . m 1 1 (), temp Mat . m 1 2 ()). normalize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget World Z Axis (): ĠVector 3 f Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Mat Ġ= Ġget World Model Matrix () ĊĠĠĠĠĠĠĠ Ġreturn ĠVector 3 f ( temp Mat . m 2 0 (), temp Mat . m 2 1 (), temp Mat . m 2 2 ()). normalize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget World Model Matrix (): ĠMatrix 4 f Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmul _ matrix Ġ= Ġget Local Model Matrix () ĊĠĠĠĠĠĠĠ Ġparent ?. get World Model Matrix ()?. mul ( matrix , Ġmul _ matrix ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmul _ matrix ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Local Model Matrix (): ĠMatrix 4 f Ġ= ĠMatrix 4 f ( matrix ) Ċ }