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);
|
SDL_SetRenderVSync(m_Renderer, 1);
|
||||||
|
|
||||||
m_ImGuiLayer = new SakuraVNE::ImGuiLayer();
|
// m_ImGuiLayer = new SakuraVNE::ImGuiLayer();
|
||||||
PushOverlay(m_ImGuiLayer);
|
// PushOverlay(m_ImGuiLayer);
|
||||||
|
|
||||||
|
this->PushOverlay<SakuraVNE::ImGuiLayer>();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -148,12 +150,3 @@ void Application::Shutdown() {
|
|||||||
|
|
||||||
SDL_Quit();
|
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_render.h"
|
||||||
#include "SDL3/SDL_video.h"
|
#include "SDL3/SDL_video.h"
|
||||||
#include "imguilayer.h"
|
#include "imguilayer.h"
|
||||||
|
#include <memory>
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
struct WindowData {
|
struct WindowData {
|
||||||
int width = 1280;
|
int width = 1280;
|
||||||
@@ -28,8 +30,38 @@ public:
|
|||||||
void Run();
|
void Run();
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
|
||||||
void PushLayer(SakuraVNE::Layer *);
|
template <typename TLayer>
|
||||||
void PushOverlay(SakuraVNE::Layer *);
|
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 AppData &GetAppData() { return m_AppData; }
|
||||||
inline SDL_Window *GetSDLWindow() { return m_Window; }
|
inline SDL_Window *GetSDLWindow() { return m_Window; }
|
||||||
|
|||||||
Reference in New Issue
Block a user