campaign_manager.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #pragma once
  2. #include "game/map/mission_context.h"
  3. #include "game/map/mission_definition.h"
  4. #include <QObject>
  5. #include <QString>
  6. #include <QVariantList>
  7. #include <optional>
  8. namespace Game::Mission {
  9. struct MissionDefinition;
  10. }
  11. namespace Game::Systems {
  12. class VictoryService;
  13. }
  14. class CampaignManager : public QObject {
  15. Q_OBJECT
  16. public:
  17. explicit CampaignManager(QObject *parent = nullptr);
  18. void load_campaigns();
  19. void set_available_campaigns(const QVariantList &campaigns);
  20. void start_campaign_mission(const QString &mission_path,
  21. int &selected_player_id);
  22. void mark_current_mission_completed();
  23. void set_skirmish_context(const QString &map_path);
  24. [[nodiscard]] QVariantList available_campaigns() const {
  25. return m_available_campaigns;
  26. }
  27. [[nodiscard]] QString current_campaign_id() const {
  28. return m_current_campaign_id;
  29. }
  30. [[nodiscard]] QString current_mission_id() const {
  31. return m_current_mission_id;
  32. }
  33. [[nodiscard]] const std::optional<Game::Mission::MissionDefinition> &
  34. current_mission_definition() const {
  35. return m_current_mission_definition;
  36. }
  37. void configure_mission_victory_conditions(
  38. Game::Systems::VictoryService *victory_service, int local_owner_id);
  39. [[nodiscard]] const Game::Mission::MissionContext &
  40. current_mission_context() const {
  41. return m_current_mission_context;
  42. }
  43. void set_mission_context(const Game::Mission::MissionContext &context) {
  44. m_current_mission_context = context;
  45. }
  46. signals:
  47. void available_campaigns_changed();
  48. void current_campaign_changed();
  49. void current_mission_changed();
  50. private:
  51. QVariantList m_available_campaigns;
  52. QString m_current_campaign_id;
  53. QString m_current_mission_id;
  54. std::optional<Game::Mission::MissionDefinition> m_current_mission_definition;
  55. Game::Mission::MissionContext m_current_mission_context;
  56. };