48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
|
|
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);
|
|
}
|
|
}
|