Browse Source

Implemented framerate-independent movement speed

tess_experiment
Nico de Poel 3 years ago
parent
commit
8b865cdb8a
  1. 69
      input.c

69
input.c

@ -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;
}
}
Loading…
Cancel
Save