110 lines
6.2 KiB
C++
110 lines
6.2 KiB
C++
#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
|