mirror of
https://github.com/seekrs/MacroLibX.git
synced 2026-01-12 15:13:34 +00:00
74 lines
2.2 KiB
C++
74 lines
2.2 KiB
C++
#include <PreCompiled.h>
|
|
#include <Graphics/Scene.h>
|
|
#include <Renderer/Renderer.h>
|
|
#include <Renderer/RenderCore.h>
|
|
|
|
namespace mlx
|
|
{
|
|
Sprite& Scene::CreateSprite(NonOwningPtr<Texture> texture) noexcept
|
|
{
|
|
MLX_PROFILE_FUNCTION();
|
|
Verify((bool)texture, "Scene: invalid texture (internal mlx issue, please report to devs)");
|
|
|
|
#pragma omp parallel for
|
|
for(auto& sprite : m_sprites)
|
|
{
|
|
if(texture->GetWidth() == sprite->GetTexture()->GetWidth() && texture->GetHeight() == sprite->GetTexture()->GetHeight())
|
|
{
|
|
std::shared_ptr<Sprite> new_sprite = std::make_shared<Sprite>(sprite->GetMesh(), texture);
|
|
m_sprites.push_back(new_sprite);
|
|
return *new_sprite;
|
|
}
|
|
}
|
|
|
|
std::shared_ptr<Sprite> sprite = std::make_shared<Sprite>(texture);
|
|
m_sprites.push_back(sprite);
|
|
return *sprite;
|
|
}
|
|
|
|
NonOwningPtr<Sprite> Scene::GetSpriteFromTextureAndPosition(NonOwningPtr<Texture> 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> 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> sprite)
|
|
{
|
|
MLX_PROFILE_FUNCTION();
|
|
auto it = std::find_if(m_sprites.begin(), m_sprites.end(), [&sprite](std::shared_ptr<Sprite> 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> 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> sprite)
|
|
{
|
|
return sprite->GetTexture() == texture;
|
|
});
|
|
if(it != m_sprites.end())
|
|
m_sprites.erase(it);
|
|
} while(it != m_sprites.end());
|
|
}
|
|
|
|
bool Scene::IsTextureAtGivenDrawLayer(NonOwningPtr<Texture> texture, std::uint64_t draw_layer) const
|
|
{
|
|
MLX_PROFILE_FUNCTION();
|
|
if(draw_layer >= m_sprites.size())
|
|
return false;
|
|
return m_sprites[draw_layer]->GetTexture() == texture;
|
|
}
|
|
}
|