| 628 | } |
| 629 | |
| 630 | Graphics::Sprite* Scene::getSpriteByPosition( |
| 631 | const Transform::UnitVector& position, const int layer) |
| 632 | { |
| 633 | std::vector<Transform::Referential> rectPts = { Transform::Referential::TopLeft, |
| 634 | Transform::Referential::TopRight, Transform::Referential::BottomRight, |
| 635 | Transform::Referential::BottomLeft }; |
| 636 | const Transform::UnitVector zeroOffset(0, 0); |
| 637 | |
| 638 | std::vector<Graphics::Sprite*> spritesOnLayer = this->getSpritesByLayer(layer); |
| 639 | Transform::UnitVector camera |
| 640 | = -(m_camera.getPosition().to<Transform::Units::ScenePixels>()); |
| 641 | for (const auto& sprite : spritesOnLayer) |
| 642 | { |
| 643 | Collision::PolygonalCollider positionCollider("positionCollider"); |
| 644 | positionCollider.addPoint( |
| 645 | sprite->getPositionTransformer()(position, camera, layer)); |
| 646 | Collision::PolygonalCollider sprCollider("sprCollider"); |
| 647 | for (Transform::Referential& ref : rectPts) |
| 648 | { |
| 649 | sprCollider.addPoint(sprite->getPosition(ref)); |
| 650 | } |
| 651 | if (sprCollider.doesCollide(positionCollider, zeroOffset)) |
| 652 | { |
| 653 | return sprite; |
| 654 | } |
| 655 | } |
| 656 | return nullptr; |
| 657 | } |
| 658 | |
| 659 | Graphics::Sprite& Scene::getSprite(const std::string& id) |
| 660 | { |
nothing calls this directly
no test coverage detected