#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; };