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:
		| @ -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; | ||||||
|  | }; | ||||||
		Reference in New Issue
	
	Block a user