#include #include #include #include namespace mlx { Scene::Scene(SceneDescriptor desc) : m_descriptor(std::move(desc)) { MLX_PROFILE_FUNCTION(); Verify((bool)m_descriptor.renderer, "invalid renderer"); m_depth.Init(m_descriptor.renderer->GetSwapchainImages().back().GetWidth(), m_descriptor.renderer->GetSwapchainImages().back().GetHeight(), false, "mlx_scene_depth"); } 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->GetPosition().x == position.x && sprite->GetPosition().y == position.y && sprite->GetTexture() == texture; }); return (it != m_sprites.end() ? it->get() : nullptr); } 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; }); m_sprites.erase(it); } while(it != m_sprites.end()); } }