diff --git a/input.c b/input.c index 903b01d..304e814 100644 --- a/input.c +++ b/input.c @@ -1,12 +1,13 @@ #include "common.h" #include "input.h" +#include "time.h" #include static u_char padBuffer[2][34]; -static const int moveSpeed = 32; -static const short rotSpeed = 32; +static const int moveSpeed = 1024; +static const short rotSpeed = 1024; static const char deadZone = 0x30; void input_init() @@ -28,68 +29,72 @@ void input_process() MATRIX cam_mtx; RotMatrixQ(&cam_rot, &cam_mtx); + int deltaTime = time_getDeltaTime(); + int moveInterval = (moveSpeed * deltaTime) >> 12; + int rotInterval = (moveSpeed * deltaTime) >> 12; + u_short buttons = *((u_short*)(padBuffer[0]+2)); if (!(buttons & PAD_UP)) { // Move forward (+Y) - cam_pos.vx += (cam_mtx.m[0][1] * moveSpeed) >> 12; - cam_pos.vy += (cam_mtx.m[1][1] * moveSpeed) >> 12; - cam_pos.vz += (cam_mtx.m[2][1] * moveSpeed) >> 12; + cam_pos.vx += (cam_mtx.m[0][1] * moveInterval) >> 12; + cam_pos.vy += (cam_mtx.m[1][1] * moveInterval) >> 12; + cam_pos.vz += (cam_mtx.m[2][1] * moveInterval) >> 12; } if (!(buttons & PAD_DOWN)) { // Move backward (-Y) - cam_pos.vx -= (cam_mtx.m[0][1] * moveSpeed) >> 12; - cam_pos.vy -= (cam_mtx.m[1][1] * moveSpeed) >> 12; - cam_pos.vz -= (cam_mtx.m[2][1] * moveSpeed) >> 12; + cam_pos.vx -= (cam_mtx.m[0][1] * moveInterval) >> 12; + cam_pos.vy -= (cam_mtx.m[1][1] * moveInterval) >> 12; + cam_pos.vz -= (cam_mtx.m[2][1] * moveInterval) >> 12; } if (!(buttons & PAD_LEFT)) { // Rotate left - cam_rot.vz += rotSpeed; + cam_rot.vz += rotInterval; } if (!(buttons & PAD_RIGHT)) { // Rotate right - cam_rot.vz -= rotSpeed; + cam_rot.vz -= rotInterval; } if (!(buttons & PAD_TRIANGLE)) { // Move up (+Z) - cam_pos.vx += (cam_mtx.m[0][2] * moveSpeed) >> 12; - cam_pos.vy += (cam_mtx.m[1][2] * moveSpeed) >> 12; - cam_pos.vz += (cam_mtx.m[2][2] * moveSpeed) >> 12; + cam_pos.vx += (cam_mtx.m[0][2] * moveInterval) >> 12; + cam_pos.vy += (cam_mtx.m[1][2] * moveInterval) >> 12; + cam_pos.vz += (cam_mtx.m[2][2] * moveInterval) >> 12; } if (!(buttons & PAD_CROSS)) { // Move down (-Z) - cam_pos.vx -= (cam_mtx.m[0][2] * moveSpeed) >> 12; - cam_pos.vy -= (cam_mtx.m[1][2] * moveSpeed) >> 12; - cam_pos.vz -= (cam_mtx.m[2][2] * moveSpeed) >> 12; + cam_pos.vx -= (cam_mtx.m[0][2] * moveInterval) >> 12; + cam_pos.vy -= (cam_mtx.m[1][2] * moveInterval) >> 12; + cam_pos.vz -= (cam_mtx.m[2][2] * moveInterval) >> 12; } if (!(buttons & PAD_L1)) { // Strafe left (-X) - cam_pos.vx -= (cam_mtx.m[0][0] * moveSpeed) >> 12; - cam_pos.vy -= (cam_mtx.m[1][0] * moveSpeed) >> 12; - cam_pos.vz -= (cam_mtx.m[2][0] * moveSpeed) >> 12; + cam_pos.vx -= (cam_mtx.m[0][0] * moveInterval) >> 12; + cam_pos.vy -= (cam_mtx.m[1][0] * moveInterval) >> 12; + cam_pos.vz -= (cam_mtx.m[2][0] * moveInterval) >> 12; } if (!(buttons & PAD_R1)) { // Strafe right (+X) - cam_pos.vx += (cam_mtx.m[0][0] * moveSpeed) >> 12; - cam_pos.vy += (cam_mtx.m[1][0] * moveSpeed) >> 12; - cam_pos.vz += (cam_mtx.m[2][0] * moveSpeed) >> 12; + cam_pos.vx += (cam_mtx.m[0][0] * moveInterval) >> 12; + cam_pos.vy += (cam_mtx.m[1][0] * moveInterval) >> 12; + cam_pos.vz += (cam_mtx.m[2][0] * moveInterval) >> 12; } if (!(buttons & PAD_L2)) { // Look down - cam_rot.vx -= rotSpeed; + cam_rot.vx -= rotInterval; } if (!(buttons & PAD_R2)) { // Look up - cam_rot.vx += rotSpeed; + cam_rot.vx += rotInterval; } // Check for analog controller @@ -106,19 +111,19 @@ void input_process() if (leftJoyY > -deadZone && leftJoyY < deadZone) leftJoyY = 0; // Move forward/backward - cam_pos.vx -= (cam_mtx.m[0][1] * leftJoyY * moveSpeed) >> 19; - cam_pos.vy -= (cam_mtx.m[1][1] * leftJoyY * moveSpeed) >> 19; - cam_pos.vz -= (cam_mtx.m[2][1] * leftJoyY * moveSpeed) >> 19; + cam_pos.vx -= (cam_mtx.m[0][1] * leftJoyY * moveInterval) >> 19; + cam_pos.vy -= (cam_mtx.m[1][1] * leftJoyY * moveInterval) >> 19; + cam_pos.vz -= (cam_mtx.m[2][1] * leftJoyY * moveInterval) >> 19; // Strafe left/right - cam_pos.vx += (cam_mtx.m[0][0] * leftJoyX * moveSpeed) >> 19; - cam_pos.vy += (cam_mtx.m[1][0] * leftJoyX * moveSpeed) >> 19; - cam_pos.vz += (cam_mtx.m[2][0] * leftJoyX * moveSpeed) >> 19; + cam_pos.vx += (cam_mtx.m[0][0] * leftJoyX * moveInterval) >> 19; + cam_pos.vy += (cam_mtx.m[1][0] * leftJoyX * moveInterval) >> 19; + cam_pos.vz += (cam_mtx.m[2][0] * leftJoyX * moveInterval) >> 19; // Rotate left/right - cam_rot.vz -= (rightJoyX * rotSpeed) >> 7; + cam_rot.vz -= (rightJoyX * rotInterval) >> 7; // Look up/down - cam_rot.vx -= (rightJoyY * rotSpeed) >> 7; + cam_rot.vx -= (rightJoyY * rotInterval) >> 7; } }