reworked application push layer and push overlay for a template system part of the new layer system
This commit is contained in:
@@ -73,8 +73,10 @@ bool Application::Init() {
|
||||
|
||||
SDL_SetRenderVSync(m_Renderer, 1);
|
||||
|
||||
m_ImGuiLayer = new SakuraVNE::ImGuiLayer();
|
||||
PushOverlay(m_ImGuiLayer);
|
||||
// m_ImGuiLayer = new SakuraVNE::ImGuiLayer();
|
||||
// PushOverlay(m_ImGuiLayer);
|
||||
|
||||
this->PushOverlay<SakuraVNE::ImGuiLayer>();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -148,12 +150,3 @@ void Application::Shutdown() {
|
||||
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
void Application::PushLayer(SakuraVNE::Layer *layer) {
|
||||
m_LayerStack.PushLayer(layer);
|
||||
layer->OnAttach();
|
||||
}
|
||||
void Application::PushOverlay(SakuraVNE::Layer *layer) {
|
||||
m_LayerStack.PushOverLay(layer);
|
||||
layer->OnAttach();
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
#include "SDL3/SDL_render.h"
|
||||
#include "SDL3/SDL_video.h"
|
||||
#include "imguilayer.h"
|
||||
#include <memory>
|
||||
#include <type_traits>
|
||||
|
||||
struct WindowData {
|
||||
int width = 1280;
|
||||
@@ -28,8 +30,38 @@ public:
|
||||
void Run();
|
||||
void Shutdown();
|
||||
|
||||
void PushLayer(SakuraVNE::Layer *);
|
||||
void PushOverlay(SakuraVNE::Layer *);
|
||||
template <typename TLayer>
|
||||
requires(std::is_base_of_v<SakuraVNE::Layer, TLayer>)
|
||||
void PushLayer() {
|
||||
auto newLayer = std::make_unique<TLayer>();
|
||||
SakuraVNE::Layer *layer = newLayer.get();
|
||||
|
||||
m_LayerStack.PushLayer(std::move(newLayer));
|
||||
|
||||
layer->OnAttach();
|
||||
}
|
||||
|
||||
template <typename TLayer>
|
||||
requires(std::is_base_of_v<SakuraVNE::Layer, TLayer>)
|
||||
TLayer *GetLayer() {
|
||||
for (const auto &layer : m_LayerStack) {
|
||||
if (auto casted = dynamic_cast<TLayer *>(layer.get())) {
|
||||
return casted;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
template <typename TLayer>
|
||||
requires(std::is_base_of_v<SakuraVNE::Layer, TLayer>)
|
||||
void PushOverlay() {
|
||||
auto newOverlay = std::make_unique<TLayer>();
|
||||
SakuraVNE::Layer *layer = newOverlay.get();
|
||||
|
||||
m_LayerStack.PushOverLay(std::move(newOverlay));
|
||||
|
||||
layer->OnAttach();
|
||||
}
|
||||
|
||||
inline AppData &GetAppData() { return m_AppData; }
|
||||
inline SDL_Window *GetSDLWindow() { return m_Window; }
|
||||
|
||||
Reference in New Issue
Block a user