#define MOUSE_SENSITIVITY 10.0 // set mouse sensitivity
#define CAMERA_SPEED 10.0 // set camera speed
ENTITY* soldier;
void FPS_camera(ENTITY* soldier)
{
VECTOR vMove = {_VAR(0), _VAR(0), _VAR(0)};
VECTOR vForce = {_VAR(0), _VAR(0), _VAR(0)}; // temp variables for moving and rotating the camera
// update camera rotation variables based on mouse input, and multiply by mouse sensitivity
vForce.x = _VAR(-1 * MOUSE_SENSITIVITY * _FLOAT(v(mouse_force).x) * FLOATV(time_frame)); // set pan angle variable
vForce.y = _VAR(MOUSE_SENSITIVITY * _FLOAT(v(mouse_force).y) * FLOATV(time_frame)); // set tilt angle variable
// update camera position variables based on keyboard input W, A, S, D, home, end keys
vMove.x = _VAR(CAMERA_SPEED * (FLOATV(key_w) - FLOATV(key_s)) * FLOATV(time_frame)); // set forward variable
vMove.y = _VAR(CAMERA_SPEED * (FLOATV(key_a) - FLOATV(key_d)) * FLOATV(time_frame)); // set sideways variable
vMove.z = _VAR(CAMERA_SPEED * (FLOATV(key_home) - FLOATV(key_end)) * FLOATV(time_frame)); // set upward variable
// update the camera's rotation and position
vec_add((VECTOR*)&v(camera).pan, &vForce); // rotate camera based on vForce variable
vec_rotate(&vMove, (ANGLE*)&v(camera).pan); // rotate vMove variable in direction of camera
c_move(soldier, (VECTOR*)&vMove, NULL, GLIDE); // entity, relative dist, global dist, mode
v(camera).x = soldier->x;
v(camera).y = soldier->y;
v(camera).z = _VAR(70);
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
engine_init();
v(camera).pan = _VAR(90);
vec_set((VECTOR*)&v(camera).x, _vec(0, 0, 70));
v(camera).arc = _VAR(NORMAL_FOV);
soldier = ent_create("soldier.mdl", _vec(0, 0, 70), NULL);
phent_settype(soldier,_VAR(PH_RIGID),_VAR(PH_BOX));
phent_setmass(soldier,_VAR(1.0),_VAR(PH_BOX));
phent_setfriction(soldier,_VAR(90.0));
phent_setelasticity(soldier,_VAR(0.0),_VAR(100.0));
phent_setdamping(soldier,_VAR(30.0),_VAR(30.0));
... BLAH BLAH BLAH ...
while(engine_frame())
{
FPS_camera(soldier);
}
engine_close();
return 0;
}