changed layer stack vector to contain uniqe_ptr of layers
This commit is contained in:
@@ -95,7 +95,7 @@ void Application::Run() {
|
|||||||
oldTime = currentTime;
|
oldTime = currentTime;
|
||||||
|
|
||||||
// Update functions before rendereing
|
// Update functions before rendereing
|
||||||
for (auto layer : m_LayerStack) {
|
for (auto &layer : m_LayerStack) {
|
||||||
layer->OnFrame(time);
|
layer->OnFrame(time);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@ void Application::Run() {
|
|||||||
SDL_SetRenderDrawColor(m_Renderer, (Uint8)111, (Uint8)232, (Uint8)168, (Uint8)0);
|
SDL_SetRenderDrawColor(m_Renderer, (Uint8)111, (Uint8)232, (Uint8)168, (Uint8)0);
|
||||||
SDL_RenderClear(m_Renderer);
|
SDL_RenderClear(m_Renderer);
|
||||||
|
|
||||||
for (auto layer : m_LayerStack) {
|
for (auto &layer : m_LayerStack) {
|
||||||
layer->OnImGuiRender();
|
layer->OnImGuiRender();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,19 +4,20 @@
|
|||||||
|
|
||||||
namespace SakuraVNE {
|
namespace SakuraVNE {
|
||||||
LayerStack::~LayerStack() {
|
LayerStack::~LayerStack() {
|
||||||
for (Layer *layer : m_LayerStack) {
|
for (auto &layer : m_LayerStack) {
|
||||||
layer->OnDetach();
|
layer->OnDetach();
|
||||||
delete layer;
|
// delete layer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// should these be fixed with std::move and take layer param as std::unique_ptr?
|
||||||
void LayerStack::PushLayer(Layer *layer) {
|
void LayerStack::PushLayer(Layer *layer) {
|
||||||
m_LayerStack.emplace(m_LayerStack.begin() + m_LayerIndex, layer);
|
m_LayerStack.emplace(m_LayerStack.begin() + m_LayerIndex, layer);
|
||||||
m_LayerIndex++;
|
m_LayerIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LayerStack::PopLayer(Layer *layer) {
|
void LayerStack::PopLayer(Layer *layer) {
|
||||||
auto match = std::find(m_LayerStack.begin(), m_LayerStack.begin() + m_LayerIndex, layer);
|
auto match = std::find_if(m_LayerStack.begin(), m_LayerStack.begin() + m_LayerIndex, [layer](const std::unique_ptr<Layer> &ptr) { return ptr.get() == layer; });
|
||||||
if (match != m_LayerStack.begin() + m_LayerIndex) {
|
if (match != m_LayerStack.begin() + m_LayerIndex) {
|
||||||
layer->OnDetach();
|
layer->OnDetach();
|
||||||
m_LayerStack.erase(match);
|
m_LayerStack.erase(match);
|
||||||
@@ -27,7 +28,7 @@ void LayerStack::PopLayer(Layer *layer) {
|
|||||||
void LayerStack::PushOverLay(Layer *layer) { m_LayerStack.emplace_back(layer); }
|
void LayerStack::PushOverLay(Layer *layer) { m_LayerStack.emplace_back(layer); }
|
||||||
|
|
||||||
void LayerStack::PopOverlay(Layer *layer) {
|
void LayerStack::PopOverlay(Layer *layer) {
|
||||||
auto match = std::find(m_LayerStack.begin() + m_LayerIndex, m_LayerStack.end(), layer);
|
auto match = std::find_if(m_LayerStack.begin() + m_LayerIndex, m_LayerStack.end(), [layer](const std::unique_ptr<Layer> &ptr) { return ptr.get() == layer; });
|
||||||
|
|
||||||
if (match != m_LayerStack.end()) {
|
if (match != m_LayerStack.end()) {
|
||||||
layer->OnDetach();
|
layer->OnDetach();
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include "Layer.h"
|
#include "Layer.h"
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace SakuraVNE {
|
namespace SakuraVNE {
|
||||||
@@ -15,22 +16,22 @@ public:
|
|||||||
void PushOverLay(Layer *layer);
|
void PushOverLay(Layer *layer);
|
||||||
void PopOverlay(Layer *layer);
|
void PopOverlay(Layer *layer);
|
||||||
|
|
||||||
std::vector<Layer *>::iterator begin() { return m_LayerStack.begin(); }
|
std::vector<std::unique_ptr<Layer>>::iterator begin() { return m_LayerStack.begin(); }
|
||||||
std::vector<Layer *>::iterator end() { return m_LayerStack.end(); }
|
std::vector<std::unique_ptr<Layer>>::iterator end() { return m_LayerStack.end(); }
|
||||||
std::vector<Layer *>::reverse_iterator rbegin() { return m_LayerStack.rbegin(); }
|
std::vector<std::unique_ptr<Layer>>::reverse_iterator rbegin() { return m_LayerStack.rbegin(); }
|
||||||
std::vector<Layer *>::reverse_iterator rend() { return m_LayerStack.rend(); }
|
std::vector<std::unique_ptr<Layer>>::reverse_iterator rend() { return m_LayerStack.rend(); }
|
||||||
|
|
||||||
std::vector<Layer *>::const_iterator begin() const { return m_LayerStack.begin(); }
|
std::vector<std::unique_ptr<Layer>>::const_iterator begin() const { return m_LayerStack.begin(); }
|
||||||
std::vector<Layer *>::const_iterator end() const { return m_LayerStack.end(); }
|
std::vector<std::unique_ptr<Layer>>::const_iterator end() const { return m_LayerStack.end(); }
|
||||||
std::vector<Layer *>::const_reverse_iterator rbegin() const { return m_LayerStack.rbegin(); }
|
std::vector<std::unique_ptr<Layer>>::const_reverse_iterator rbegin() const { return m_LayerStack.rbegin(); }
|
||||||
std::vector<Layer *>::const_reverse_iterator rend() const { return m_LayerStack.rend(); }
|
std::vector<std::unique_ptr<Layer>>::const_reverse_iterator rend() const { return m_LayerStack.rend(); }
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
// this is only used for the tests for now, so it will be taken out of the release build
|
// this is only used for the tests for now, so it will be taken out of the release build
|
||||||
inline const std::vector<Layer *> &GetLayers() const { return m_LayerStack; }
|
inline const std::vector<std::unique_ptr<Layer>> &GetLayers() const { return m_LayerStack; }
|
||||||
#endif
|
#endif
|
||||||
private:
|
private:
|
||||||
std::vector<Layer *> m_LayerStack;
|
std::vector<std::unique_ptr<Layer>> m_LayerStack;
|
||||||
unsigned int m_LayerIndex = 0;
|
unsigned int m_LayerIndex = 0;
|
||||||
};
|
};
|
||||||
} // namespace SakuraVNE
|
} // namespace SakuraVNE
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ TEST_CASE("Layer operations", "[Layer]") {
|
|||||||
lstack.PopOverlay(layer6);
|
lstack.PopOverlay(layer6);
|
||||||
|
|
||||||
bool hasLayer2InVec = false;
|
bool hasLayer2InVec = false;
|
||||||
for (auto layer : layers) {
|
for (auto &layer : layers) {
|
||||||
if (layer->GetName() == "layer6") {
|
if (layer->GetName() == "layer6") {
|
||||||
hasLayer2InVec = true;
|
hasLayer2InVec = true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user