|
|
|
@ -1,12 +1,13 @@ |
|
|
|
#include "common.h" |
|
|
|
#include "input.h" |
|
|
|
#include "time.h" |
|
|
|
|
|
|
|
#include <psxpad.h> |
|
|
|
|
|
|
|
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; |
|
|
|
} |
|
|
|
} |