added layer and layerstack class

This commit is contained in:
2026-03-12 21:56:05 +01:00
parent f654d84f8d
commit a98af1fe55
5 changed files with 81 additions and 0 deletions

6
SakuraVNE/src/Layer.cpp Normal file
View File

@@ -0,0 +1,6 @@
#include "Layer.h"
#include <string>
namespace SakuraVNE {
Layer::Layer(const std::string &name) : m_LayerName(name) {}
} // namespace SakuraVNE

23
SakuraVNE/src/Layer.h Normal file
View File

@@ -0,0 +1,23 @@
#pragma once
#include <string>
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

View File

@@ -0,0 +1,30 @@
#include "LayerStack.h"
#include <algorithm>
#include <vector>
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

View File

@@ -0,0 +1,21 @@
#pragma once
#include "Layer.h"
#include <vector>
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<Layer *> m_LayerStack;
unsigned int m_LayerIndex = 0;
};
} // namespace SakuraVNE

1
todo.md Normal file
View File

@@ -0,0 +1 @@
write tests for layer and layerstack