Introducing application layers
This feature is not really used yet but will help in the future simplify the propegation of events
This commit is contained in:
parent
d8627d0357
commit
8e202f9d59
@ -38,7 +38,7 @@ namespace YoggieEngine {
|
|||||||
|
|
||||||
|
|
||||||
void Application::Run() {
|
void Application::Run() {
|
||||||
std::cout << "No run function implemented!";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -81,6 +81,12 @@ namespace YoggieEngine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Application::PushLayer(Layer* layer)
|
||||||
|
{
|
||||||
|
AppLayerstack.PushLayer(layer);
|
||||||
|
layer->OnAttach();
|
||||||
|
}
|
||||||
|
|
||||||
Application::~Application() {
|
Application::~Application() {
|
||||||
|
|
||||||
ImGui_ImplOpenGL3_Shutdown();
|
ImGui_ImplOpenGL3_Shutdown();
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "YoggieEngine.h"
|
#include "YoggieEngine.h"
|
||||||
|
#include "LayerStack.h"
|
||||||
|
|
||||||
|
|
||||||
namespace YoggieEngine {
|
namespace YoggieEngine {
|
||||||
@ -17,11 +18,16 @@ namespace YoggieEngine {
|
|||||||
void GuiBegin();
|
void GuiBegin();
|
||||||
void GuiEnd();
|
void GuiEnd();
|
||||||
|
|
||||||
|
void PushLayer(Layer* layer);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::string m_AppName;
|
std::string m_AppName;
|
||||||
NativeWindow* appWindow;
|
NativeWindow* appWindow;
|
||||||
friend class ApplicationRuntime;
|
|
||||||
|
LayerStack AppLayerstack;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
29
YoggieEngine/src/Layer.h
Normal file
29
YoggieEngine/src/Layer.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
class Layer {
|
||||||
|
|
||||||
|
public:
|
||||||
|
~Layer() { OnDestroy(); }
|
||||||
|
Layer() { OnCreate(); }
|
||||||
|
|
||||||
|
Layer(const std::string name )
|
||||||
|
: Name(name) {}
|
||||||
|
|
||||||
|
|
||||||
|
virtual void OnUpdate(){}
|
||||||
|
virtual void OnUI(){}
|
||||||
|
virtual void OnStartup(){}
|
||||||
|
|
||||||
|
virtual void OnAttach() {}
|
||||||
|
virtual void OnDetach() {}
|
||||||
|
|
||||||
|
|
||||||
|
virtual void OnCreate() {}
|
||||||
|
virtual void OnDestroy(){}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
std::string Name;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
27
YoggieEngine/src/LayerStack.cpp
Normal file
27
YoggieEngine/src/LayerStack.cpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include "YoggieEngine.h"
|
||||||
|
#include "LayerStack.h"
|
||||||
|
|
||||||
|
LayerStack::~LayerStack()
|
||||||
|
{
|
||||||
|
for (Layer* layer : layers) {
|
||||||
|
layer->OnDetach();
|
||||||
|
delete layer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LayerStack::PushLayer(Layer* layer) {
|
||||||
|
layers.emplace(layers.begin() + insertion_index, layer);
|
||||||
|
insertion_index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LayerStack::PopLayer(Layer* layer) {
|
||||||
|
auto it = std::find(layers.begin(), layers.begin() + insertion_index, layer);
|
||||||
|
if (it != layers.begin() + insertion_index) {
|
||||||
|
layer->OnDetach();
|
||||||
|
layers.erase(it);
|
||||||
|
insertion_index--;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
22
YoggieEngine/src/LayerStack.h
Normal file
22
YoggieEngine/src/LayerStack.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "Layer.h"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class LayerStack{
|
||||||
|
public:
|
||||||
|
LayerStack() = default;
|
||||||
|
~LayerStack();
|
||||||
|
|
||||||
|
void PushLayer(Layer* layer);
|
||||||
|
void PopLayer(Layer* layer);
|
||||||
|
|
||||||
|
std::vector<Layer*>::iterator begin() { return layers.begin(); }
|
||||||
|
std::vector<Layer*>::iterator end() { return layers.end(); }
|
||||||
|
std::vector<Layer*>::reverse_iterator rbegin() { return layers.rbegin(); }
|
||||||
|
std::vector<Layer*>::reverse_iterator rend() { return layers.rend(); }
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<Layer*> layers;
|
||||||
|
int insertion_index = 0;
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user