| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- function camera_update() {
- let camera: camera_object_t = scene_camera;
- let move_forward: bool = keyboard_down("w");
- let move_backward: bool = keyboard_down("s");
- let strafe_left: bool = keyboard_down("a");
- let strafe_right: bool = keyboard_down("d");
- let strafe_up: bool = keyboard_down("e");
- let strafe_down: bool = keyboard_down("q");
- let fast: f32 = keyboard_down("shift") ? 2.0 : 1.0;
- let speed: f32 = 5.0;
- let dir: vec4_t = vec4_create();
- if (move_forward || move_backward || strafe_right || strafe_left || strafe_up || strafe_down) {
- let clook: vec4_t = camera_object_look(camera);
- let cright: vec4_t = camera_object_right(camera);
- if (move_forward) {
- dir = vec4_fadd(dir, clook.x, clook.y, clook.z);
- }
- if (move_backward) {
- dir = vec4_fadd(dir, -clook.x, -clook.y, -clook.z);
- }
- if (strafe_right) {
- dir = vec4_fadd(dir, cright.x, cright.y, cright.z);
- }
- if (strafe_left) {
- dir = vec4_fadd(dir, -cright.x, -cright.y, -cright.z);
- }
- if (strafe_up) {
- dir = vec4_fadd(dir, 0, 0, 1);
- }
- if (strafe_down) {
- dir = vec4_fadd(dir, 0, 0, -1);
- }
- }
- let d: f32 = sys_delta() * speed * fast;
- if (d > 0.0) {
- transform_move(camera.base.transform, dir, d);
- }
- if (mouse_down()) {
- transform_rotate(camera.base.transform, vec4_z_axis(), -mouse_movement_x / 200);
- transform_rotate(camera.base.transform, camera_object_right(camera), -mouse_movement_y / 200);
- }
- }
|