X-Git-Url: http://deadsoftware.ru/gitweb?p=netwar.git;a=blobdiff_plain;f=game.c;h=2370692abdad4904825a910b65828b03821394a3;hp=3acaa36a82a9a558f5501e349e5bc29c7e31171b;hb=HEAD;hpb=f23bc975650813d88a819d403e1b9e1795086242 diff --git a/game.c b/game.c index 3acaa36..2370692 100644 --- a/game.c +++ b/game.c @@ -6,17 +6,17 @@ #include "game.h" -#define SPEED (0.03 / TICK) +#define SPEED (0.0005 / TICK) #define ROTATE (0.03 / TICK) #define BULL_SPEED (0.4 / TICK) -#define MAX_SPEED (0.3 / TICK) +#define MAX_SPEED (0.1 / TICK) #define MAX_ROTATE (0.3 / TICK) // Цифры взяты с потолка, но вроде неплохо подобраны -#define G 3.673e-4 -#define M_STAR 10.0 -#define M_SHIP 0.1 +#define G 6.6719199e-11 +#define M_STAR 3e8 +#define M_SHIP 0.001 Player g_player[MAX_PLAYERS]; Bullet g_bullet[MAX_BULLETS]; @@ -59,13 +59,10 @@ static int freebullet() { } 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); - - if(fabs(g_player[id].vx) > MAX_SPEED) - g_player[id].vx = copysignf(MAX_SPEED, g_player[id].vx); - if(fabs(g_player[id].vy) > MAX_SPEED) - g_player[id].vy = copysignf(MAX_SPEED, g_player[id].vy); + if(fabs(g_player[id].vx) < MAX_SPEED) + g_player[id].vx += speed * cos(g_player[id].r * 2 * M_PI); + if(fabs(g_player[id].vy) < MAX_SPEED) + g_player[id].vy += speed * sin(g_player[id].r * 2 * M_PI); } static void roteplayer(int id, float speed) { @@ -93,10 +90,8 @@ static void fireplayer(int id) { static void checkspacebound(float * a) { float x = *a; - if(x < -1) - x = fabs(x); - else if(x > 1) - x = -x; + if(x < -1 || x > 1) + x = copysign(fmodf(x, 1) + 1, -1 * x); *a = x; } @@ -160,6 +155,8 @@ void g_update() { checkspacebound(&g_bullet[i].x); checkspacebound(&g_bullet[i].y); + gravity(&g_bullet[i].vx, &g_bullet[i].vy, g_bullet[i].x, g_bullet[i].y); + for(int j = 0; j < MAX_PLAYERS; j++) if(g_player[j].live) if(collide(g_bullet[i].x, g_bullet[i].y, 0.0001, g_player[j].x, g_player[j].y, PLAYER_SIZE))