void handle_collision()

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;
            }
        }
    }