diff --git a/SakuraVNE/src/Layer.cpp b/SakuraVNE/src/Layer.cpp new file mode 100644 index 0000000..a95d9d5 --- /dev/null +++ b/SakuraVNE/src/Layer.cpp @@ -0,0 +1,6 @@ +#include "Layer.h" +#include + +namespace SakuraVNE { +Layer::Layer(const std::string &name) : m_LayerName(name) {} +} // namespace SakuraVNE diff --git a/SakuraVNE/src/Layer.h b/SakuraVNE/src/Layer.h new file mode 100644 index 0000000..3c636ff --- /dev/null +++ b/SakuraVNE/src/Layer.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +namespace SakuraVNE { +class Layer { +public: + Layer(const std::string &name = "Layer"); + virtual ~Layer() = default; + + virtual void OnStart() {} + virtual void OnFrame(float timestamp) {} + virtual void OnEnd() {} + virtual void OnEvent() {} + virtual void OnAttach() {} + virtual void OnDetach() {} + + const std::string &GetName() const { return m_LayerName; } + +protected: + std::string m_LayerName; +}; +} // namespace SakuraVNE diff --git a/SakuraVNE/src/LayerStack.cpp b/SakuraVNE/src/LayerStack.cpp new file mode 100644 index 0000000..bee6776 --- /dev/null +++ b/SakuraVNE/src/LayerStack.cpp @@ -0,0 +1,30 @@ +#include "LayerStack.h" +#include +#include + +namespace SakuraVNE { +void LayerStack::PushLayer(Layer *layer) { + m_LayerStack.emplace(m_LayerStack.begin() + m_LayerIndex, layer); + m_LayerIndex++; +} + +void LayerStack::PopLayer(Layer *layer) { + auto match = std::find(m_LayerStack.begin(), m_LayerStack.begin() + m_LayerIndex, layer); + if (match != m_LayerStack.begin() + m_LayerIndex) { + layer->OnDetach(); + m_LayerStack.erase(match); + m_LayerIndex--; + } +} + +void LayerStack::PushOverLay(Layer *layer) { m_LayerStack.emplace_back(layer); } + +void LayerStack::PopOverlay(Layer *layer) { + auto match = std::find(m_LayerStack.begin() + m_LayerIndex, m_LayerStack.end(), layer); + + if (match != m_LayerStack.end()) { + layer->OnDetach(); + m_LayerStack.erase(match); + } +} +} // namespace SakuraVNE diff --git a/SakuraVNE/src/LayerStack.h b/SakuraVNE/src/LayerStack.h new file mode 100644 index 0000000..aa8f870 --- /dev/null +++ b/SakuraVNE/src/LayerStack.h @@ -0,0 +1,21 @@ +#pragma once + +#include "Layer.h" +#include + +namespace SakuraVNE { +class LayerStack { +public: + LayerStack() = default; + ~LayerStack(); + + void PushLayer(Layer *layer); + void PopLayer(Layer *layer); + void PushOverLay(Layer *layer); + void PopOverlay(Layer *layer); + +private: + std::vector m_LayerStack; + unsigned int m_LayerIndex = 0; +}; +} // namespace SakuraVNE diff --git a/todo.md b/todo.md new file mode 100644 index 0000000..52dee64 --- /dev/null +++ b/todo.md @@ -0,0 +1 @@ +write tests for layer and layerstack