1 line
1.5 KiB
C++
1 line
1.5 KiB
C++
// the asteroids-ish game inside of the automap
|
|
|
|
#include "DoomDef.h"
|
|
#include "AM_map.h"
|
|
#include "AM_oids.h"
|
|
|
|
fixed_t ff_x, ff_y, ff_w, ff_h;
|
|
|
|
amo_bullet_t amo_bullets[AMO_MAXBULLETS];
|
|
|
|
boolean AM_oInRock(amo_rock_t *rock, fixed_t x, fixed_t y)
|
|
{
|
|
fixed_t dx2, dy2;
|
|
boolean rc = false;
|
|
|
|
dx2 = FixedMul(x-rock->x, x-rock->x);
|
|
dy2 = FixedMul(y-rock->y, y-rock->y);
|
|
if (dx2+dy2 <= rock->r2) rc = true;
|
|
|
|
return rc;
|
|
}
|
|
|
|
void AM_oUpdateBullets(void)
|
|
{
|
|
int i;
|
|
amo_bullet_t *a;
|
|
|
|
for (a=amo_bullets;a<amo_bullets + AMO_MAXBULLETS;a++)
|
|
{
|
|
if (a->x != -1)
|
|
{
|
|
// move bullet
|
|
a->x += a->vx;
|
|
a->y += a->vy;
|
|
// destroy bullet if it left the screen
|
|
if (a->x < ff_x || a->x >= ff_x + ff_w || a->y < ff_y
|
|
|| a->y >= ff_y + ff_h)
|
|
{
|
|
a->x = -1;
|
|
continue;
|
|
}
|
|
// check for collision with any rock
|
|
for (r=amo_rocks;r<amo_rocks + AMO_MAXROCKS;r++)
|
|
{
|
|
if (r->x != -1 && AM_oInRock(r, a->x, a->y))
|
|
{
|
|
a->x = r->x = -1; // if collision, destroy bullet and rock
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void AM_oTicker(void)
|
|
{
|
|
AM_oUpdateBullets();
|
|
AM_oUpdateShip();
|
|
AM_oUpdateRocks();
|
|
AM_oUpdateShrapnel();
|
|
}
|
|
|
|
void AM_oDrawer(void)
|
|
{
|
|
|
|
}
|
|
|
|
void AM_oInitData(void)
|
|
{
|
|
int i;
|
|
for (i=0;i<AMO_MAXBULLETS;i++) amo_bullets[i].x = -1;
|
|
for (i=0;i<AMO_MAXROCKS;i++) amo_rocks[i].x = -1;
|
|
ff_x = f_x << FRACBITS;
|
|
ff_y = f_y << FRACBITS;
|
|
ff_w = f_w << FRACBITS;
|
|
ff_h = f_h << FRACBITS;
|
|
}
|
|
|
|
void AM_oStart(void)
|
|
{
|
|
AM_oInitData();
|
|
}
|