camera.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. function camera_update() {
  2. let camera: camera_object_t = scene_camera;
  3. let move_forward: bool = keyboard_down("w");
  4. let move_backward: bool = keyboard_down("s");
  5. let strafe_left: bool = keyboard_down("a");
  6. let strafe_right: bool = keyboard_down("d");
  7. let strafe_up: bool = keyboard_down("e");
  8. let strafe_down: bool = keyboard_down("q");
  9. let fast: f32 = keyboard_down("shift") ? 2.0 : 1.0;
  10. let speed: f32 = 5.0;
  11. let dir: vec4_t = vec4_create();
  12. if (move_forward || move_backward || strafe_right || strafe_left || strafe_up || strafe_down) {
  13. let clook: vec4_t = camera_object_look(camera);
  14. let cright: vec4_t = camera_object_right(camera);
  15. if (move_forward) {
  16. dir = vec4_fadd(dir, clook.x, clook.y, clook.z);
  17. }
  18. if (move_backward) {
  19. dir = vec4_fadd(dir, -clook.x, -clook.y, -clook.z);
  20. }
  21. if (strafe_right) {
  22. dir = vec4_fadd(dir, cright.x, cright.y, cright.z);
  23. }
  24. if (strafe_left) {
  25. dir = vec4_fadd(dir, -cright.x, -cright.y, -cright.z);
  26. }
  27. if (strafe_up) {
  28. dir = vec4_fadd(dir, 0, 0, 1);
  29. }
  30. if (strafe_down) {
  31. dir = vec4_fadd(dir, 0, 0, -1);
  32. }
  33. }
  34. let d: f32 = sys_delta() * speed * fast;
  35. if (d > 0.0) {
  36. transform_move(camera.base.transform, dir, d);
  37. }
  38. if (mouse_down()) {
  39. transform_rotate(camera.base.transform, vec4_z_axis(), -mouse_movement_x / 200);
  40. transform_rotate(camera.base.transform, camera_object_right(camera), -mouse_movement_y / 200);
  41. }
  42. }