Commit d3d31ed6 authored by Valentin Bartschies's avatar Valentin Bartschies
Browse files

Aliens will move until they actually hit a wall if the outter collums are gone

parent d255510d
......@@ -9,6 +9,7 @@ const int ALIEN_SIZE = 30;
extern const int GAME_SCREEN_WIDTH, LASER_CANON_SPEED, FRAME_RATE;
extern int FRAMES_COUNT;
extern Texture2D ALIEN_UP, ALIEN_DOWN, ALIEN_SHOOT;
int leftBorder, rightBorder;
Aliens *spawnAliens() {
Aliens *aliens = malloc(sizeof *aliens);
......@@ -71,12 +72,9 @@ void aliensTick(Aliens *aliens) {
}
}
int outerCol = aliens->movingRight ? ALIEN_COLS - 1 : 0;
while (!aliens->instances[outerCol + (aliens->movingRight ? -1 : 1)]) {
aliens->movingRight ? --outerCol : ++outerCol;
}
checkAlienBorders(aliens);
if (aliens->pos.x < 0 || aliens->pos.x + outerCol * (ALIEN_SIZE + ALIEN_OFFSET) + ALIEN_SIZE >= GAME_SCREEN_WIDTH) {
if (leftBorder < 0 || rightBorder >= GAME_SCREEN_WIDTH) {
aliens->movingRight = !aliens->movingRight;
}
......@@ -131,3 +129,22 @@ void destructAliens(Aliens *aliens) {
free(aliens->lastShots);
free(aliens);
}
void checkAlienBorders(Aliens *aliens) {
for (int j = 0; j < ALIEN_COLS; j++) { // Find the farthest left alien
for (int i = 0; i < ALIEN_ROWS; i++) {
if (aliens->instances[j][i]->alive) {
leftBorder = aliens->pos.x + (j * (ALIEN_SIZE + ALIEN_OFFSET));
for (int j = ALIEN_COLS - 1; j >= 0; j--) { // find the farthest right alien
for (int i = 0; i < ALIEN_ROWS; i++) {
if (aliens->instances[j][i]->alive) {
rightBorder = aliens->pos.x + ((j + 1) * (ALIEN_SIZE + ALIEN_OFFSET) - ALIEN_OFFSET);
return;
}
}
}
}
}
}
}
\ No newline at end of file
......@@ -28,3 +28,4 @@ Aliens *spawnAliens();
void aliensTick(Aliens *aliens);
void drawAliens(Aliens *aliens);
void destructAliens(Aliens *aliens);
void checkAlienBorders(Aliens *aliens);
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment