#include "screen.h" Screen::Screen(std::weak_ptr stack) : stack(stack) {} ScreenStack::Ptr ScreenStack::new_instance() { std::shared_ptr ptr = std::shared_ptr(new ScreenStack{}); ptr->self_weak = ptr; return ptr; } void ScreenStack::update(float dt) { auto idx = stack.size(); while (idx > 0 && stack.at(--idx)->update(dt)) { } } void ScreenStack::draw() { auto idx = stack.size(); while (idx > 0 && stack.at(--idx)->draw()) { } } void ScreenStack::push_screen(Screen::Ptr &&screen) { stack.emplace_back(std::forward(screen)); } void ScreenStack::pop_screen() { if (!stack.empty()) { stack.pop_back(); } } ScreenStack::ScreenStack() : self_weak(), stack() {}