in procgen/src/games/caveflyer.cpp [94:122]
void handle_collision(const std::shared_ptr<Entity> &src, const std::shared_ptr<Entity> &target) override {
if (target->type == PLAYER_BULLET) {
bool erase_bullet = false;
if (src->type == TARGET) {
src->health -= 1;
erase_bullet = true;
if (src->health <= 0 && !src->will_erase) {
spawn_child(src, EXPLOSION, .5 * src->rx);
src->will_erase = true;
step_data.reward += TARGET_REWARD;
}
} else if (src->type == OBSTACLE) {
erase_bullet = true;
} else if (src->type == ENEMY) {
erase_bullet = true;
} else if (src->type == GOAL) {
erase_bullet = true;
}
if (erase_bullet && !target->will_erase) {
target->will_erase = true;
auto explosion = spawn_child(target, EXPLOSION, .5 * target->rx);
explosion->vx = src->vx;
explosion->vy = src->vy;
}
}
}