#include #include #include #include namespace mlx { Sprite& Scene::CreateSprite(NonOwningPtr texture) noexcept { MLX_PROFILE_FUNCTION(); std::shared_ptr sprite = std::make_shared(texture); m_sprites.push_back(sprite); return *sprite; } NonOwningPtr Scene::GetSpriteFromTextureAndPosition(NonOwningPtr texture, const Vec2f& position) const { MLX_PROFILE_FUNCTION(); auto it = std::find_if(m_sprites.begin(), m_sprites.end(), [&texture, &position](std::shared_ptr sprite) { return sprite->GetTexture() == texture && sprite->GetPosition().x == position.x && sprite->GetPosition().y == position.y; }); return (it != m_sprites.end() ? it->get() : nullptr); } void Scene::BringToFront(NonOwningPtr sprite) { MLX_PROFILE_FUNCTION(); auto it = std::find_if(m_sprites.begin(), m_sprites.end(), [&sprite](std::shared_ptr sprite_ptr) { return sprite_ptr.get() == sprite.Get(); }); if(it == m_sprites.end()) return; std::rotate(it, it + 1, m_sprites.end()); } void Scene::TryEraseSpriteFromTexture(NonOwningPtr texture) { MLX_PROFILE_FUNCTION(); auto it = m_sprites.begin(); do { it = std::find_if(m_sprites.begin(), m_sprites.end(), [&texture](std::shared_ptr sprite) { return sprite->GetTexture() == texture; }); if(it != m_sprites.end()) m_sprites.erase(it); } while(it != m_sprites.end()); } bool Scene::IsTextureAtGivenDrawLayer(NonOwningPtr texture, std::uint64_t draw_layer) const { if(draw_layer >= m_sprites.size()) return false; return m_sprites[draw_layer]->GetTexture() == texture; } }