give enemies hp

This commit is contained in:
2025-12-02 19:53:44 -05:00
parent 8e89f1bf70
commit eec22cd791
3 changed files with 21 additions and 18 deletions

View File

@@ -90,32 +90,33 @@ struct EnemySpawner final : Spawner<Enemy, 100> {
const auto starting_y = Rng::generate(static_cast<int>(viewport.level_top),
static_cast<int>(viewport.level_bottom));
for (auto &[center, radius, speed, alive]: this->values) {
if (alive) continue;
alive = true;
radius = enemy_radius;
for (auto &enemy: this->values) {
if (enemy.alive()) continue;
enemy.radius = enemy_radius;
auto hp = Rng::generate(1, 4);
enemy.hp = static_cast<uint32_t>(hp);
if (num < 0.25) {
center = {.x = starting_x, .y = viewport.level_top};
enemy.center = {.x = starting_x, .y = viewport.level_top};
} else if (0.25 <= num && num < 0.5) {
center = {
enemy.center = {
.x = starting_x, .y = viewport.level_bottom
};
} else if (0.5 <= num && num < 0.75) {
center = {.x = viewport.level_left, .y = starting_y};
enemy.center = {.x = viewport.level_left, .y = starting_y};
} else {
center = {
enemy.center = {
.x = viewport.level_right, .y = starting_y
};
}
speed = Rng::generate(static_cast<uint32_t>(enemy_max_speed));
enemy.speed = Rng::generate(static_cast<uint32_t>(enemy_max_speed));
break;
}
}
};
EnemySpawner enemy_spawner{2};
EnemySpawner enemy_spawner{1};
struct ItemSpawner final : Spawner<Item, 100> {
explicit ItemSpawner(const long long rate_secs) : Spawner<Item, 100>(rate_secs) {
@@ -164,10 +165,9 @@ void update_tears() {
}
enemy_spawner.for_each([&center, &active](auto &enemy) {
if (enemy.alive && CheckCollisionCircles(center, player.tear_radius, enemy.center, enemy.radius)) {
if (enemy.alive() && CheckCollisionCircles(center, player.tear_radius, enemy.center, enemy.radius)) {
active = false;
enemy.alive = false;
score++;
if (--enemy.hp == 0) score++;
}
});
@@ -266,13 +266,15 @@ int main() {
}
enemy_spawner.for_each([now](Enemy &enemy) {
if (enemy.alive) {
if (enemy.alive()) {
enemy.center = Vector2MoveTowards(enemy.center, player.center(), enemy.speed);
DrawCircleV(enemy.center, enemy.radius, RED);
const Color enemy_color = enemy.hp == 1 ? PINK : enemy.hp == 2 ? ORANGE : RED;
DrawCircleV(enemy.center, enemy.radius, enemy_color);
if (enemy.center.x < viewport.level_left || viewport.level_right < enemy.center.x ||
enemy.center.y < viewport.level_top || viewport.level_bottom < enemy.center.y) {
enemy.alive = false;
// Basically removing the enemy from the pool;
enemy.hp = 0;
}
if (CheckCollisionCircleRec(enemy.center, enemy.radius, player.rect) &&