ChangeStateCommand.h 1021 bytes
#pragma once
#include <BasicAbstractions/Command.h>
#include <BasicAbstractions/IState.h>
#include <States/ExitState/ExitState.h>
#include <States/GameState/GameBuilder/GameBuilderDirector.h>
struct ChangeStateCommand : ISelectCommand {
    explicit ChangeStateCommand(IStateManager& state_manager) : m_state_manager(state_manager) {}
protected:
    IStateManager& m_state_manager;
struct ExitCommand : ChangeStateCommand {
    using ChangeStateCommand::ChangeStateCommand;
    void execute() override { m_state_manager.set_next_state(std::make_unique<ExitState>(m_state_manager)); }
class GameCommand : public ChangeStateCommand {
public:
    GameCommand(IStateManager& state_manager, std::unique_ptr<GameBuilderDirector>&& ptr_director) :
        ChangeStateCommand(state_manager), m_ptr_director(std::move(ptr_director)) {}
    void execute() override { m_state_manager.set_next_state(std::move(m_ptr_director->build(m_state_manager))); }
private:
    std::unique_ptr<GameBuilderDirector> m_ptr_director;