123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- #ifndef RECRUITMENTSCENE_H
- #define RECRUITMENTSCENE_H
- #include "gui/scene.h"
- #include "gui/buttoneventlistener.h"
- #include "ui/hotseat_recruitment/iconhint.h"
- #include <QWidget>
- #include <vector>
- #include <memory>
- class UnitIcon;
- class RaceIcon;
- class Player;
- class Unit;
- class Race;
- namespace Ui {
- class RecruitmentScene;
- }
- class RecruitmentScene;
- class RaceIconEventListener : public QObject
- {
- Q_OBJECT
- public:
- RaceIconEventListener() = delete;
- RaceIconEventListener(QObject *parent, RecruitmentScene* scene);
- virtual bool eventFilter(QObject * watched, QEvent * event) Q_DECL_OVERRIDE;
- private:
- RecruitmentScene* scene_;
- };
- class UnitIconEventListener : public QObject
- {
- Q_OBJECT
- public:
- UnitIconEventListener() = delete;
- UnitIconEventListener(QObject *parent, RecruitmentScene* scene);
- virtual bool eventFilter(QObject * watched, QEvent * event) Q_DECL_OVERRIDE;
- private:
- RecruitmentScene* scene_;
- };
- class RecruitmentScene : public Scene
- {
- Q_OBJECT
- public:
- explicit RecruitmentScene(QWidget *parent = 0);
- ~RecruitmentScene();
- /*
- * Перегруженная виртуальная функция класса Scene,
- * посредством которой сцене передаются аргументы инициализации.
- * Для данной сцены принимаются 2 аргумента, разделённые символом '|':
- * 1) Числовое значение - id объекта Player, для которого происходит набор отряда
- * 2) Числовое значение - исходное количество монет для найма/улучшения юнитов
- */
- void parseArgs(QString args) override;
- /*
- * Перегруженная виртуальная функция класса Scene.
- * Инициализирует сцену в соответствии с принятыми через parseArgs аргументами
- */
- void init() override;
- private:
- void initAvailableRaces();
- void initAvailableUnits();
- void showChosenUnits();
- public:
- Player *getActivePlayer();
- bool buyUnit(std::shared_ptr<Unit> unit);
- bool removeUnit(std::shared_ptr<Unit> unit);
- void changeRace(std::shared_ptr<Race> race);
- void updateMoney();
- private slots:
- void on_back_button_clicked();
- void on_complete_choice_button_clicked();
- public:
- /*
- * races_list - this is a vector of size = RACES_NUMBER
- * It contains pointers to races in races' icons list in GUI
- * i-th race in races' icons list has its race stored in races_list[i];
- */
- std::vector<std::shared_ptr<Race>> races_list;
- /*
- * available_units_list - this is a vector of size = AVAILABLE_UNIT_NUMBER
- * It contains pointer of each unit in available units' icons list in GUI
- * i-th unit in available units' icons list has its pointer stored in available_units_list[i];
- */
- std::vector<std::shared_ptr<Unit>> available_units_list;
- /*
- * chosen_units_list - this is a vector of size = MAX_PARTY_SIZE
- * It contains pointer of each unit in chosen units' icons list in GUI
- * i-th unit in chosen units' icons list has its name stored in chosen_units_list[i];
- */
- std::vector<std::shared_ptr<Unit>> chosen_units_list;
- private:
- /*
- * available_money_ - максимальное количество монет у игрока.
- * За монеты можно нанимать и улучшать юнитов.
- * Количество монет задаётся в поле money и передаётся вторым аргументом
- * в функцию ParseArgs этой сцены. Необходимо, чтобы при смене игрока и ре-инициализации сцены
- * в неё передавать исходное количество монет для игроков
- */
- unsigned int available_money_;
- /*
- * current_money_ - текущее количество монет у игрока.
- */
- int current_money_;
- /*
- * current_player_id_ - id текущего игрока, который соответствует его id в классе PlayerManager
- */
- int current_player_id_;
- /*
- * current_player_ - указатель на объекта класса Player текущего игрока.
- * В класс Player передаются на хранение созданные юниты
- */
- Player* current_player_;
- /*
- * movie - объект класса QMovie, отвечающий за воспроизведение gif-анимации
- * на графическом объекте QLabel image
- */
- QMovie *movie;
- /*
- * Указатель на объект класса обработчика кнопок, отвечающего за изменение
- * кнопок при нажатии и наведении на них курсора мыши
- */
- ButtonEventListener *watcher;
- /*
- * Указатель на объект класса обработчика расовых кнопок-объектов QLabel,
- * отвечающего за действия при наведении курсора и нажатии на "кнопки" рас.
- */
- RaceIconEventListener *race_icon_watcher;
- /*
- * Указатель на объект класса обработчика расовых кнопок-объектов QLabel,
- * отвечающего за действия при наведении курсора и нажатии на "кнопки" юнитов.
- */
- UnitIconEventListener *unit_icon_watcher;
- /*
- * Указатель на объект корневого элемента графического интерфейса сцены,
- * созданной посредством QtDesigner
- */
- Ui::RecruitmentScene *ui;
- };
- #endif // RECRUITMENTSCENE_H
|