package Ġm og ot Ċ Ċ import Ġm og ot . math .* Ċ import Ġkotlin . test . Test Ċ Ċ class ĠCamera Test Ġ{ ĊĊĠĠĠ Ġval Ġengine Ġ= Ġmock Engine () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscreen Point To Ray No Parent () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcam Ġ= ĠCamera ( engine ) ĊĠĠĠĠĠĠĠ Ġcam . resize ( 2 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġcam . position . set ( 0 f , Ġ 0 f , Ġ- 1 f ) ĊĠĠĠĠĠĠĠ Ġcam . look To ( Vector 3 f ( 0 f , Ġ 0 f , Ġ 1 f )) ĊĠĠĠĠĠĠĠ Ġval Ġray Ġ= ĠMutable Ray () ĊĠĠĠĠĠĠĠ Ġcam . screen Point To Ray ( 1 0 0 , Ġ 5 0 , Ġray ) ĊĠĠĠĠĠĠĠ Ġray . direction . x . eq ( 0 f , Ġ 0 . 0 0 1 f ) ĊĠĠĠĠĠĠĠ Ġray . direction . y . eq ( 0 f ) ĊĠĠĠĠĠĠĠ Ġray . direction . z . eq ( 1 f , Ġ 0 . 0 1 f ) ĊĠĠĠĠĠĠĠ Ġray . position . x . eq ( 0 f ) ĊĠĠĠĠĠĠĠ Ġray . position . y . eq ( 0 f ) ĊĠĠĠĠĠĠĠ Ġray . position . z . eq (- 0 . 7 f , Ġ 0 . 1 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscreen Projection () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcam Ġ= ĠCamera ( engine ) ĊĠĠĠĠĠĠĠ Ġcam . resize ( 2 0 0 , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġcam . position . set ( 3 f , Ġ 3 f , Ġ 3 f ) ĊĠĠĠĠĠĠĠ Ġcam . look To ( Vector 3 f ( 0 f , Ġ 0 f , Ġ 0 f )) ĊĠĠĠĠĠĠĠ Ġval Ġpos Ġ= ĠVector 2 i () ĊĠĠĠĠĠĠĠ Ġcam . world To Screen Point ( Vector 3 f (), Ġpos ). eq ( true ) ĊĠĠĠĠĠĠĠ Ġpos . x . eq ( 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġpos . y . eq ( 9 9 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscreen Point To Ray With Parent () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠSpatial () ĊĠĠĠĠĠĠĠ Ġval Ġcam Ġ= ĠCamera ( engine ) ĊĠĠĠĠĠĠĠ Ġroot . position . set ( 0 f , Ġ 0 f , Ġ- 1 f ) ĊĠĠĠĠĠĠĠ Ġcam . position . set ( 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġcam . parent Ġ= Ġroot ĊĠĠĠĠĠĠĠ Ġcam . look To ( Vector 3 f ( 0 f , Ġ 0 f , Ġ 1 f )) ĊĠĠĠĠĠĠĠ Ġcam . resize ( 2 0 0 , Ġ 1 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġray Ġ= ĠMutable Ray () ĊĠĠĠĠĠĠĠ Ġcam . screen Point To Ray ( 1 0 0 , Ġ 5 0 , Ġray ) ĊĠĠĠĠĠĠĠ Ġprintln (" ray =$ ray ") ĊĠĠĠĠĠĠĠ Ġray . direction . x . eq ( 0 f , Ġ 0 . 0 0 1 f ) ĊĠĠĠĠĠĠĠ Ġray . direction . y . eq ( 0 f ) ĊĠĠĠĠĠĠĠ Ġray . direction . z . eq ( 1 f , Ġ 0 . 0 1 f ) ĊĠĠĠĠĠĠĠ Ġray . position . x . eq ( 0 f ) ĊĠĠĠĠĠĠĠ Ġray . position . y . eq ( 0 f ) ĊĠĠĠĠĠĠĠ Ġray . position . z . eq (- 0 . 7 f , Ġ 0 . 1 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcam Ġ= ĠCamera ( engine ) ĊĠĠĠĠĠĠĠ Ġcam . resize ( 2 0 0 , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġcam . position . set ( 1 0 f , Ġ 1 0 f , Ġ 1 0 f ) ĊĠĠĠĠĠĠĠ Ġcam . look To ( Vector 3 f ( 0 f , Ġ 0 f , Ġ 0 f )) ĊĠĠĠĠĠĠĠ Ġval Ġray Ġ= ĠMutable Ray () ĊĠĠĠĠĠĠĠ Ġcam . screen Point To Ray ( cam . width Ġ/ Ġ 2 , Ġcam . height Ġ/ Ġ 2 , Ġray ) ĊĊĠĠĠĠĠĠĠ Ġprintln (" ray =$ ray ") ĊĠĠĠĠĠĠĠ Ġray . direction . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . x . eq (- 0 . 5 7 f , Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . y . eq (- 0 . 5 7 f , Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . z . eq (- 0 . 5 7 f , Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġray . position . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . x . eq ( 9 . 8 f , Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . y . eq ( 9 . 8 f , Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . z . eq ( 9 . 8 f , Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 3 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcam Ġ= ĠCamera ( engine ) ĊĠĠĠĠĠĠĠ Ġcam . resize ( 1 1 1 3 , Ġ 5 6 1 ) ĊĠĠĠĠĠĠĠ Ġcam . position . set ( 1 f , Ġ 1 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġcam . look To ( Vector 3 f ( 0 f , Ġ 0 f , Ġ 0 f )) ĊĠĠĠĠĠĠĠ Ġval Ġray Ġ= ĠMutable Ray () ĊĠĠĠĠĠĠĠ Ġcam . screen Point To Ray ( cam . width Ġ/ Ġ 2 , Ġcam . height Ġ/ Ġ 2 , Ġray ) ĊĊĠĠĠĠĠĠĠ Ġprintln (" ray =$ ray ") ĊĠĠĠĠĠĠĠ Ġray . direction . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . x . eq (- 0 . 1 f , Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . y . eq (- 0 . 9 9 f , Ġ 0 . 0 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . z . eq ( 0 f , Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġray . position . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . x . eq ( 1 f , Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . y . eq ( 9 . 7 f , Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . z . eq ( 0 f , Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 4 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcam Ġ= ĠCamera ( engine ) ĊĠĠĠĠĠĠĠ Ġcam . resize ( 2 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġcam . position . set ( 0 f , Ġ 0 f , Ġ 2 f ) ĊĠĠĠĠĠĠĠ Ġcam . look To ( Vector 3 f ( 0 f , Ġ 0 f , Ġ- 2 f )) ĊĠĠĠĠĠĠĠ Ġval Ġray Ġ= ĠMutable Ray () ĊĠĠĠĠĠĠĠ Ġcam . screen Point To Ray ( 1 0 0 , Ġ 5 0 , Ġray ) ĊĠĠĠĠĠĠĠ Ġray . direction . x . eq ( 0 f , Ġ 0 . 0 0 1 f ) ĊĠĠĠĠĠĠĠ Ġray . direction . y . eq ( 0 f ) ĊĠĠĠĠĠĠĠ Ġray . direction . z . eq (- 1 f , Ġ 0 . 0 1 f ) ĊĠĠĠĠĠĠĠ Ġray . position . x . eq ( 0 f ) ĊĠĠĠĠĠĠĠ Ġray . position . y . eq ( 0 f ) ĊĠĠĠĠĠĠĠ Ġray . position . z . eq ( 1 . 7 f , Ġ 0 . 1 f ) ĊĠĠĠ Ġ} Ċ }