diff --git a/src/battle/capitalShips.c b/src/battle/capitalShips.c index 2b8caac..8247ee7 100644 --- a/src/battle/capitalShips.c +++ b/src/battle/capitalShips.c @@ -64,12 +64,41 @@ Entity *spawnCapitalShip(char *name, int x, int y, int side) static void think(void) { + float dir; + int wantedAngle; + if (--self->aiActionTime <= 0) + { + self->targetLocation.x = rand() % GRID_SIZE; + self->targetLocation.x *= GRID_CELL_WIDTH; + + self->targetLocation.y = rand() % GRID_SIZE; + self->targetLocation.y *= GRID_CELL_HEIGHT; + + self->aiActionTime = FPS * (30 + (rand() % 120)); + } + + wantedAngle = getAngle(self->x, self->y, self->targetLocation.x, self->targetLocation.y); + + wantedAngle %= 360; + + if (fabs(wantedAngle - self->angle) > TURN_THRESHOLD) + { + dir = ((int)(wantedAngle - self->angle + 360)) % 360 > 180 ? -1 : 1; + + dir *= TURN_SPEED; + + self->angle += dir; + + self->angle = fmod(self->angle, 360); + } + + applyFighterThrust(); } static void gunThink(void) { - /*doAI();*/ + doAI(); } static void componentDie(void) @@ -86,7 +115,17 @@ static void componentDie(void) static void die(void) { + Entity *e; + self->alive = ALIVE_DEAD; + + for (e = battle.entityHead.next ; e != NULL ; e = e->next) + { + if (e->owner == self) + { + e->health = 0; + } + } } void loadCapitalShipDefs(void) @@ -135,6 +174,7 @@ static void loadCapitalShipDef(char *filename) e->shield = e->maxShield = cJSON_GetObjectItem(root, "shield")->valueint; e->shieldRechargeRate = cJSON_GetObjectItem(root, "shieldRechargeRate")->valueint; e->texture = getTexture(cJSON_GetObjectItem(root, "texture")->valuestring); + e->speed = 1; e->action = think; e->die = die; diff --git a/src/battle/capitalShips.h b/src/battle/capitalShips.h index c27497a..6d0581d 100644 --- a/src/battle/capitalShips.h +++ b/src/battle/capitalShips.h @@ -18,6 +18,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#define TURN_SPEED 0.1 +#define TURN_THRESHOLD 2 + #include "../common.h" #include "../json/cJSON.h" @@ -31,6 +34,9 @@ extern char *getFileLocation(char *filename); extern long flagsToLong(char *flags); extern long lookup(char *name); extern void doAI(void); +extern float getAngle(int x1, int y1, int x2, int y2); +extern float mod(float n, float x); +extern void applyFighterThrust(void); extern Battle battle; extern Entity *self;