changed layer stack vector to contain uniqe_ptr of layers
This commit is contained in:
@@ -95,7 +95,7 @@ void Application::Run() {
|
||||
oldTime = currentTime;
|
||||
|
||||
// Update functions before rendereing
|
||||
for (auto layer : m_LayerStack) {
|
||||
for (auto &layer : m_LayerStack) {
|
||||
layer->OnFrame(time);
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ void Application::Run() {
|
||||
SDL_SetRenderDrawColor(m_Renderer, (Uint8)111, (Uint8)232, (Uint8)168, (Uint8)0);
|
||||
SDL_RenderClear(m_Renderer);
|
||||
|
||||
for (auto layer : m_LayerStack) {
|
||||
for (auto &layer : m_LayerStack) {
|
||||
layer->OnImGuiRender();
|
||||
}
|
||||
|
||||
|
||||
@@ -4,19 +4,20 @@
|
||||
|
||||
namespace SakuraVNE {
|
||||
LayerStack::~LayerStack() {
|
||||
for (Layer *layer : m_LayerStack) {
|
||||
for (auto &layer : m_LayerStack) {
|
||||
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) {
|
||||
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);
|
||||
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) {
|
||||
layer->OnDetach();
|
||||
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::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()) {
|
||||
layer->OnDetach();
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "Layer.h"
|
||||
#include <iterator>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace SakuraVNE {
|
||||
@@ -15,22 +16,22 @@ public:
|
||||
void PushOverLay(Layer *layer);
|
||||
void PopOverlay(Layer *layer);
|
||||
|
||||
std::vector<Layer *>::iterator begin() { return m_LayerStack.begin(); }
|
||||
std::vector<Layer *>::iterator end() { return m_LayerStack.end(); }
|
||||
std::vector<Layer *>::reverse_iterator rbegin() { return m_LayerStack.rbegin(); }
|
||||
std::vector<Layer *>::reverse_iterator rend() { return m_LayerStack.rend(); }
|
||||
std::vector<std::unique_ptr<Layer>>::iterator begin() { return m_LayerStack.begin(); }
|
||||
std::vector<std::unique_ptr<Layer>>::iterator end() { return m_LayerStack.end(); }
|
||||
std::vector<std::unique_ptr<Layer>>::reverse_iterator rbegin() { return m_LayerStack.rbegin(); }
|
||||
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<Layer *>::const_iterator end() const { return m_LayerStack.end(); }
|
||||
std::vector<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_iterator begin() const { return m_LayerStack.begin(); }
|
||||
std::vector<std::unique_ptr<Layer>>::const_iterator end() const { return m_LayerStack.end(); }
|
||||
std::vector<std::unique_ptr<Layer>>::const_reverse_iterator rbegin() const { return m_LayerStack.rbegin(); }
|
||||
std::vector<std::unique_ptr<Layer>>::const_reverse_iterator rend() const { return m_LayerStack.rend(); }
|
||||
|
||||
#ifdef DEBUG
|
||||
// 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
|
||||
private:
|
||||
std::vector<Layer *> m_LayerStack;
|
||||
std::vector<std::unique_ptr<Layer>> m_LayerStack;
|
||||
unsigned int m_LayerIndex = 0;
|
||||
};
|
||||
} // namespace SakuraVNE
|
||||
|
||||
@@ -42,7 +42,7 @@ TEST_CASE("Layer operations", "[Layer]") {
|
||||
lstack.PopOverlay(layer6);
|
||||
|
||||
bool hasLayer2InVec = false;
|
||||
for (auto layer : layers) {
|
||||
for (auto &layer : layers) {
|
||||
if (layer->GetName() == "layer6") {
|
||||
hasLayer2InVec = true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user