Commit dd3848e9 authored by Печенин Данила Михайлович's avatar Печенин Данила Михайлович
Browse files

ContextManager was done

parent bdc77b95
No related merge requests found
Showing with 48 additions and 3 deletions
+48 -3
#include <States/GameState/ContextManager.h>
void ContextManager::reset(GameContext&& context) {
while (!m_contexts.empty())
m_contexts.pop();
m_initial_context = std::move(context);
m_contexts.emplace(m_initial_context.clone());
}
void ContextManager::save_context() {
m_contexts.emplace(m_contexts.top().clone());
}
void ContextManager::restore_previous_context() {
if (m_contexts.size() > 1)
m_contexts.pop();
else
m_contexts.top() = m_initial_context.clone();
}
#pragma once
#include <States/GameState/GameContext.h>
#include <stack>
class ContextManager {
public:
void reset(GameContext&& context);
GameContext& get_current_context() { return m_contexts.top(); }
void save_context();
void restore_previous_context();
private:
GameContext m_initial_context;
std::stack<GameContext> m_contexts;
};
#include "GameState.h"
#include <States/GameState/GameState.h>
#include <iostream> /// @todo remove it
#include <States/ExitState/ExitState.h>
......
#pragma once
#include <BasicAbstractions/IState.h>
#include <BasicAbstractions/IWindowKeeper.h>
#include <States/GameState/Maze/Maze.h>
#include <States/GameState/ContextManager.h>
struct GameState : IState, IWindowKeeper {
explicit GameState(IStateManager& state_manager, const sf::VideoMode& video_mode, const sf::String& window_title) : IState(state_manager), IWindowKeeper(video_mode, window_title) {}
class GameState : IState, IWindowKeeper {
public:
explicit GameState(IStateManager& state_manager, const sf::VideoMode& video_mode, const sf::String& window_title) :
IState(state_manager), IWindowKeeper(video_mode, window_title) {}
bool do_step() override;
void set_maze(Maze&& maze) { m_maze = std::move(maze); }
void set_context(GameContext&& context) { m_context_manager.reset(std::move(context)); }
private:
void event_handling() override {};
void update() override {};
void render() override {};
private:
Maze m_maze;
ContextManager m_context_manager;
};
......@@ -6,6 +6,7 @@
class Maze : public IDrawable {
public:
Maze() = default;
explicit Maze(std::vector<std::unique_ptr<Room>> rooms) : m_rooms(std::move(rooms)) {}
void draw_into(sf::RenderWindow& window) const override;
private:
......
......@@ -33,6 +33,7 @@ public:
explicit SelectState(IStateManager& state_manager, const sf::VideoMode& video_mode, const sf::String& window_title) :
IState(state_manager), IWindowKeeper(video_mode, window_title), m_menu(state_manager) {}
bool do_step() override;
private:
void event_handling() override;
void update() override;
void render() override;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment