#include #include #include #include #include "game.h" #define SPEED 0.00006 #define ROTATE 0.00004 Player g_player[MAX_PLAYERS]; static void moveplayer(int id, float speed) { g_player[id].vx += speed * cos(g_player[id].r * 2 * M_PI); g_player[id].vy += speed * sin(g_player[id].r * 2 * M_PI); } static void checkspacebound(float * a) { float x = *a; if(x < -1) x = abs(x); else if(x > 1) x = -x; *a = x; } void g_player_set(unsigned int id, bool live, float x, float y, float r, float vx, float vy, float vr) { assert(id < MAX_PLAYERS); g_player[id] = (Player) { .updated = true, .live = live, .x = x, .y = y, .r = r, .vx = vx, .vy = vy, .vr = vr, }; } void g_player_does(unsigned int id, DoesCode code) { assert(id < MAX_PLAYERS); g_player[id].updated = true; switch(code) { case DOES_UP: moveplayer(id, SPEED); break; case DOES_DOWN: moveplayer(id, -SPEED); break; case DOES_LEFT: g_player[id].vr -= ROTATE; break; case DOES_RIGHT: g_player[id].vr += ROTATE; break; case DOES_FIRE: break; } } void g_update() { for(int i = 0; i < MAX_PLAYERS; i++) { if(g_player[i].live) { g_player[i].updated = true; g_player[i].x += g_player[i].vx; g_player[i].y += g_player[i].vy; g_player[i].r += g_player[i].vr; checkspacebound(&g_player[i].x); checkspacebound(&g_player[i].y); } } }