light/modules/engine/src/layer/layer_stack.cpp

54 lines
1.1 KiB
C++
Raw Normal View History

2025-07-05 13:28:41 +03:30
#include <engine/events/event.hpp>
#include <engine/events/keyboard.hpp>
#include <engine/events/mouse.hpp>
#include <engine/events/window.hpp>
#include <engine/layer/layer.hpp>
#include <engine/layer/layer_stack.hpp>
2021-05-27 10:41:32 +04:30
2021-05-23 18:10:11 +04:30
namespace Light {
2025-07-05 16:07:51 +03:30
LayerStack *LayerStack::s_context = nullptr;
2022-03-07 21:57:00 +03:30
2025-07-06 14:02:50 +03:30
auto LayerStack::create() -> Scope<LayerStack>
2022-03-07 21:57:00 +03:30
{
return make_scope<LayerStack>(new LayerStack());
2022-03-07 21:57:00 +03:30
}
2025-07-06 16:52:50 +03:30
LayerStack::LayerStack()
2022-03-07 21:57:00 +03:30
{
lt_assert(
2025-07-05 16:07:51 +03:30
!s_context,
"An instance of 'LayerStack' already exists, do not construct this class!"
2025-07-05 16:07:51 +03:30
) s_context
= this;
2022-03-07 21:57:00 +03:30
}
LayerStack::~LayerStack()
{
2025-07-06 16:52:50 +03:30
for (auto *layer : m_layers) {
2022-03-07 21:57:00 +03:30
delete layer;
}
2025-07-06 16:52:50 +03:30
}
2022-03-07 21:57:00 +03:30
void LayerStack::attach_layer_impl(Layer *layer)
2022-03-07 21:57:00 +03:30
{
// #todo: handle attaching layer inside a for loop
m_layers.push_back(layer);
m_begin = m_layers.begin();
m_end = m_layers.end();
2022-03-07 21:57:00 +03:30
2025-07-06 16:30:38 +03:30
log_trc("Attached [{}]", layer->get_name());
2022-03-07 21:57:00 +03:30
}
void LayerStack::detach_layer_impl(Layer *layer)
2022-03-07 21:57:00 +03:30
{
// #todo: handle detaching layer inside a for loop
m_layers.erase(std::find(m_layers.begin(), m_layers.end(), layer));
m_begin = m_layers.begin();
m_end = m_layers.end();
2022-03-07 21:57:00 +03:30
2025-07-06 16:30:38 +03:30
log_trc("Detached [{}]", layer->get_name());
2022-03-07 21:57:00 +03:30
}
} // namespace Light