Files
DEC/DEC_GUI/Agressor/manager.h
2024-10-03 18:43:04 +07:00

110 lines
6.2 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef MANAGER_H
#define MANAGER_H
#include <QObject>
#include <QtWidgets>
#include "agent.h"
#include "agentitem.h"
#include "aphistory.h"
#include "manageritem.h"
#include "model.h"
#include "Kolch_Shind/qcustomplot.h"
class Manager : public QObject
{
Q_OBJECT
public:
explicit Manager(QObject *parent = 0); // конструктор
void initSettings(QGroupBox *set); // создание окна настроек
void initTab(QTabWidget *tabs);
QVector<qreal> calculateAvContenmentForGroups(uint typeCalc, uint iModel);
void iteration(uint j);
// геттеры
uint getCowardMedian(){return this->cowardMedian;}
uint getCowardNormal(){return this->cowardNormal;}
uint getProtectorMedian(){return this->protectorMedian;}
uint getProtectorNormal(){return this->protectorNormal;}
private:
QList<Model*> modelList;
QVector<qreal> xCoord; // x координата для построения графика средней неудовлетворённости
QVector<qreal> yCoord; // y координата для построения графика средней неудовлетворённости
QVector<qreal> xBatchCoord;
QVector<qreal> yBatchCoord;
uint cowardMedian; // число игроков в режиме труса, движущихся по медиане
uint cowardNormal; // число игроков в режиме труса, движущихся по нормали
uint protectorMedian; // число игроков в режиме защитника, движущихся по медиане
uint protectorNormal; // число игроков в режиме защитника, движущихся по нормали
int agentRadius; // радиус шарика-агента (для передачи в конструктор)
uint speedDistr; // распределение скоростей (однородное)
uint gamerSpeed; // скорость агентов
bool period; // метка периодичности краёв сцены (true - сцена периодична)
uint initDistr; // метка начального распределения игроков сцены (0 - случайное, 1 - на круге)
uint enmity; // минимальное расстояние, на которое игроки могут приближаются друг к другу, enmity = 0 - возможно покоординатное совпадение игроков
uint newEnmity; // параметр enmity, полученный из диалогового окна
int viewOrPackageMode; // 0 - визуализация одной модели, 1 - пакетное задание
int nIterations; // число итераций для пакетного задания
int nModels; // число запусков модели для пакетного задания
uint typeContentment; // способ расчёта ср.неудовлетворённости: 0 - сравнение со всеми агентами, 1 - сравнение внутри окрестности
//qreal avContentment; // ср.неудовлетворённость (ToDo: а надо ли?)
uint radiusLocality; // радиус окрестности в случае typeContenment = 1
QWidget *window;
QGridLayout *base;
QTabWidget *tabWindow;
QGraphicsScene *scene;
ManagerItem *manItem;
QCustomPlot *plot;
QPushButton *createButton; // кнопка создания модели
QPushButton *buttonTime; // кнопка "Pause/Start"
QLabel *labelContent;
QSpinBox *spinLocality;
QComboBox *viewOrPackage;
QCheckBox *checkLink;
QCheckBox *checkOutputToTxt;
QComboBox *comboTime;
QSpinBox *spinIterations;
QSpinBox *spinModels;
bool outputToTxt;
QTimer *timer;
QProgressBar *prBar;
QComboBox *graphCombo;
QCustomPlot *batchPlot;
QLineEdit *lineSaveWithName;
APHistory *history;
private slots:
void setCowardMedian(int cm) {this->cowardMedian = cm;}
void setCowardNormal(int cn) {this->cowardNormal = cn;}
void setProtectorMedian(int pm) {this->protectorMedian = pm;}
void setProtectorNormal(int pn) {this->protectorNormal = pn;}
void setAgentRadius(int rad){this->agentRadius = rad;}
void setSpeedDistr(int spDistr) {this->speedDistr = spDistr;}
void setGamerSpeed(int gamerSp) {this->gamerSpeed = gamerSp;}
void setPeriodicity(bool value) {this->period = value;}
void setDistr(int distr){this->initDistr = distr;}
void setEnmity(int enm) {this->enmity = enm;}
void setNewEnmity(int nEnm){this->newEnmity = nEnm;}
void setviewOrPackageMode(int val){this->viewOrPackageMode = val;}
void setNIterations(int number){this->nIterations = number;}
void setNModels(int number){this->nModels = number;}
void setOutputToTxt(bool output) {this->outputToTxt = output;}
void setTypeContenment(int type){this->typeContentment = type;}
//void setAvContentment(qreal cont){this->avContentment = cont;}
void setRadiusLocality(int rad){this->radiusLocality = rad;}
void initModel(); // создание модели по полученным данным
void timerEvent(); // итерация игры - вычисление новых координат для всех игроков
void handlePrBar();
void handleButton(); // остановка/возобновление игры
void timerRestart(int index); // перезапуск таймера
void resetProgressBarAndHistory();
void composeGraph(int iModel);
void saveGragh();
// вкл/выкл пункты окна настроеек
void manageSpinLocality(int value);
void managePackageOptions(int val);
};
#endif // MANAGER_H