| 551 | } |
| 552 | |
| 553 | void scene::remove(entt::entity entity) |
| 554 | { |
| 555 | std::vector to_be_removed{entity}; |
| 556 | |
| 557 | while (not to_be_removed.empty()) |
| 558 | { |
| 559 | entt::entity parent = to_be_removed.back(); |
| 560 | to_be_removed.pop_back(); |
| 561 | world.destroy(parent); |
| 562 | |
| 563 | for (auto [e, node]: world.view<components::node>().each()) |
| 564 | { |
| 565 | if (node.parent == parent) |
| 566 | to_be_removed.push_back(e); |
| 567 | } |
| 568 | |
| 569 | for (auto [e, anim]: world.view<components::animation>().each()) |
| 570 | { |
| 571 | if (std::ranges::any_of(anim.tracks, |
| 572 | [&](const auto & track) { return std::visit( |
| 573 | [&](const components::animation_track_base & track) { |
| 574 | return track.target == parent; |
| 575 | }, |
| 576 | track); })) |
| 577 | { |
| 578 | to_be_removed.push_back(e); |
| 579 | } |
| 580 | } |
| 581 | } |
| 582 | } |
| 583 | |
| 584 | void scene::on_unfocused() {} |
| 585 | void scene::on_focused() {} |
no test coverage detected