near-plane far-plane frustum-matrix4 ;
:: wasd-pixel-ray ( world loc -- direction )
- loc world dim>> [ /f 0.5 - 2.0 * ] 2map
+ loc world dim>> [ /f 0.5 - 2.0 * ] 2map
world wasd-fov-vector v*
first2 neg -1.0 0.0 4array
world wasd-mv-inv-matrix swap m.v ;
:: wasd-keyboard-input ( world -- )
read-keyboard keys>> :> keys
- key-w keys nth [ world walk-forward ] when
- key-s keys nth [ world walk-backward ] when
- key-a keys nth [ world walk-leftward ] when
- key-d keys nth [ world walk-rightward ] when
- key-space keys nth [ world walk-upward ] when
- key-c keys nth [ world walk-downward ] when
+ key-w keys nth [ world walk-forward ] when
+ key-s keys nth [ world walk-backward ] when
+ key-a keys nth [ world walk-leftward ] when
+ key-d keys nth [ world walk-rightward ] when
+ key-space keys nth [ world walk-upward ] when
+ key-c keys nth [ world walk-downward ] when
key-escape keys nth [ world close-window ] when ;
: wasd-mouse-input ( world -- )
M: wasd-world resize-world
[ <viewport-state> set-gpu-state* ]
[ dup generate-p-matrix >>p-matrix drop ] bi ;
-