recruitmentscene.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #ifndef RECRUITMENTSCENE_H
  2. #define RECRUITMENTSCENE_H
  3. #include "gui/scene.h"
  4. #include "gui/buttoneventlistener.h"
  5. #include "ui/hotseat_recruitment/iconhint.h"
  6. #include <QWidget>
  7. #include <vector>
  8. #include <memory>
  9. class UnitIcon;
  10. class RaceIcon;
  11. class Player;
  12. class Unit;
  13. class Race;
  14. namespace Ui {
  15. class RecruitmentScene;
  16. }
  17. class RecruitmentScene;
  18. class RaceIconEventListener : public QObject
  19. {
  20. Q_OBJECT
  21. public:
  22. RaceIconEventListener() = delete;
  23. RaceIconEventListener(QObject *parent, RecruitmentScene* scene);
  24. virtual bool eventFilter(QObject * watched, QEvent * event) Q_DECL_OVERRIDE;
  25. private:
  26. RecruitmentScene* scene_;
  27. };
  28. class UnitIconEventListener : public QObject
  29. {
  30. Q_OBJECT
  31. public:
  32. UnitIconEventListener() = delete;
  33. UnitIconEventListener(QObject *parent, RecruitmentScene* scene);
  34. virtual bool eventFilter(QObject * watched, QEvent * event) Q_DECL_OVERRIDE;
  35. private:
  36. RecruitmentScene* scene_;
  37. };
  38. class RecruitmentScene : public Scene
  39. {
  40. Q_OBJECT
  41. public:
  42. explicit RecruitmentScene(QWidget *parent = 0);
  43. ~RecruitmentScene();
  44. /*
  45. * Перегруженная виртуальная функция класса Scene,
  46. * посредством которой сцене передаются аргументы инициализации.
  47. * Для данной сцены принимаются 2 аргумента, разделённые символом '|':
  48. * 1) Числовое значение - id объекта Player, для которого происходит набор отряда
  49. * 2) Числовое значение - исходное количество монет для найма/улучшения юнитов
  50. */
  51. void parseArgs(QString args) override;
  52. /*
  53. * Перегруженная виртуальная функция класса Scene.
  54. * Инициализирует сцену в соответствии с принятыми через parseArgs аргументами
  55. */
  56. void init() override;
  57. private:
  58. void initAvailableRaces();
  59. void initAvailableUnits();
  60. void showChosenUnits();
  61. public:
  62. Player *getActivePlayer();
  63. bool buyUnit(std::shared_ptr<Unit> unit);
  64. bool removeUnit(std::shared_ptr<Unit> unit);
  65. void changeRace(std::shared_ptr<Race> race);
  66. void updateMoney();
  67. private slots:
  68. void on_back_button_clicked();
  69. void on_complete_choice_button_clicked();
  70. public:
  71. /*
  72. * races_list - this is a vector of size = RACES_NUMBER
  73. * It contains pointers to races in races' icons list in GUI
  74. * i-th race in races' icons list has its race stored in races_list[i];
  75. */
  76. std::vector<std::shared_ptr<Race>> races_list;
  77. /*
  78. * available_units_list - this is a vector of size = AVAILABLE_UNIT_NUMBER
  79. * It contains pointer of each unit in available units' icons list in GUI
  80. * i-th unit in available units' icons list has its pointer stored in available_units_list[i];
  81. */
  82. std::vector<std::shared_ptr<Unit>> available_units_list;
  83. /*
  84. * chosen_units_list - this is a vector of size = MAX_PARTY_SIZE
  85. * It contains pointer of each unit in chosen units' icons list in GUI
  86. * i-th unit in chosen units' icons list has its name stored in chosen_units_list[i];
  87. */
  88. std::vector<std::shared_ptr<Unit>> chosen_units_list;
  89. private:
  90. /*
  91. * available_money_ - максимальное количество монет у игрока.
  92. * За монеты можно нанимать и улучшать юнитов.
  93. * Количество монет задаётся в поле money и передаётся вторым аргументом
  94. * в функцию ParseArgs этой сцены. Необходимо, чтобы при смене игрока и ре-инициализации сцены
  95. * в неё передавать исходное количество монет для игроков
  96. */
  97. unsigned int available_money_;
  98. /*
  99. * current_money_ - текущее количество монет у игрока.
  100. */
  101. int current_money_;
  102. /*
  103. * current_player_id_ - id текущего игрока, который соответствует его id в классе PlayerManager
  104. */
  105. int current_player_id_;
  106. /*
  107. * current_player_ - указатель на объекта класса Player текущего игрока.
  108. * В класс Player передаются на хранение созданные юниты
  109. */
  110. Player* current_player_;
  111. /*
  112. * movie - объект класса QMovie, отвечающий за воспроизведение gif-анимации
  113. * на графическом объекте QLabel image
  114. */
  115. QMovie *movie;
  116. /*
  117. * Указатель на объект класса обработчика кнопок, отвечающего за изменение
  118. * кнопок при нажатии и наведении на них курсора мыши
  119. */
  120. ButtonEventListener *watcher;
  121. /*
  122. * Указатель на объект класса обработчика расовых кнопок-объектов QLabel,
  123. * отвечающего за действия при наведении курсора и нажатии на "кнопки" рас.
  124. */
  125. RaceIconEventListener *race_icon_watcher;
  126. /*
  127. * Указатель на объект класса обработчика расовых кнопок-объектов QLabel,
  128. * отвечающего за действия при наведении курсора и нажатии на "кнопки" юнитов.
  129. */
  130. UnitIconEventListener *unit_icon_watcher;
  131. /*
  132. * Указатель на объект корневого элемента графического интерфейса сцены,
  133. * созданной посредством QtDesigner
  134. */
  135. Ui::RecruitmentScene *ui;
  136. };
  137. #endif // RECRUITMENTSCENE_H