recruitmentscene.h 6.7 KB

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