Skip to content

Commit a1c6d2b

Browse files
committed
0.9.3beta1 - form generator and simulation improvements
1 parent d5baaa6 commit a1c6d2b

35 files changed

+806
-198
lines changed

sj-sim.pro

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ SOURCES += \
9292
source/competitions/StartListCompetitorStatus.cpp \
9393
source/form-generator/JumperFormGenerator.cpp \
9494
source/form-generator/JumperFormGeneratorSettings.cpp \
95+
source/form-generator/JumperFormGeneratorSettingsPreset.cpp \
9596
source/form-generator/JumperFormTendence.cpp \
9697
source/global/CountryFlagsManager.cpp \
9798
source/global/GlobalAppSettings.cpp \
@@ -107,7 +108,6 @@ SOURCES += \
107108
source/seasons/Season.cpp \
108109
source/seasons/SeasonCalendar.cpp \
109110
source/seasons/SeasonCalendarPreset.cpp \
110-
source/seasons/SeasonSettings.cpp \
111111
source/seasons/SimulationSave.cpp \
112112
source/seasons/Classification.cpp \
113113
source/simulator/Characteristic.cpp \
@@ -216,6 +216,7 @@ HEADERS += \
216216
source/competitions/StartListCompetitorStatus.h \
217217
source/form-generator/JumperFormGenerator.h \
218218
source/form-generator/JumperFormGeneratorSettings.h \
219+
source/form-generator/JumperFormGeneratorSettingsPreset.h \
219220
source/form-generator/JumperFormTendence.h \
220221
source/global/CountryFlagsManager.h \
221222
source/global/GlobalAppSettings.h \
@@ -229,7 +230,6 @@ HEADERS += \
229230
source/seasons/Season.h \
230231
source/seasons/SeasonCalendar.h \
231232
source/seasons/SeasonCalendarPreset.h \
232-
source/seasons/SeasonSettings.h \
233233
source/seasons/SimulationSave.h \
234234
source/seasons/Classification.h \
235235
source/simulator/Characteristic.h \

source/UI/EditorWidgets/JumperEditorWidget.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,13 @@ void JumperEditorWidget::removeSubmitButton()
8484
delete ui->pushButton_submit;
8585
}
8686

87+
void JumperEditorWidget::setShowForm(bool ok)
88+
{
89+
ui->doubleSpinBox_form->setHidden(!ok);
90+
ui->label_form->setHidden(!ok);
91+
ui->label_formRange->setHidden(!ok);
92+
}
93+
8794
Jumper *JumperEditorWidget::getJumper() const
8895
{
8996
return jumper;

source/UI/EditorWidgets/JumperEditorWidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class JumperEditorWidget : public QWidget
2020
void resetJumperInputs();
2121
void fillJumperInputs();
2222
void removeSubmitButton();
23+
void setShowForm(bool ok);
2324

2425
Jumper getJumperFromWidgetInput() const;
2526

source/UI/EditorWidgets/JumperEditorWidget.ui

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@ border-radius: 3px;
695695
</layout>
696696
</item>
697697
<item row="7" column="0">
698-
<widget class="QLabel" name="label_9">
698+
<widget class="QLabel" name="label_form">
699699
<property name="font">
700700
<font>
701701
<family>Quicksand Medium</family>
@@ -903,7 +903,7 @@ border-radius: 3px;
903903
</widget>
904904
</item>
905905
<item>
906-
<widget class="QLabel" name="label_11">
906+
<widget class="QLabel" name="label_formRange">
907907
<property name="font">
908908
<font>
909909
<pointsize>12</pointsize>

source/UI/FormGenerator/JumperFormGeneratorsSettingsTableModel.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -107,27 +107,27 @@ QVariant JumperFormGeneratorsSettingsTableModel::data(const QModelIndex &index,
107107
if(index.column() == 5)
108108
{
109109
double multi = generatorsSettings[index.row()].getTendenceAlignmentMultiplier();
110-
if(multi <= (-4))
110+
if(multi <= (-8))
111111
return QColor(qRgb(255, 194, 100));
112-
else if(multi <= (-3))
112+
else if(multi <= (-6))
113113
return QColor(qRgb(235, 191, 61));
114-
else if(multi <= (-2))
114+
else if(multi <= (-4))
115115
return QColor(qRgb(199, 168, 76));
116-
else if(multi <= (-1))
116+
else if(multi <= (-2))
117117
return QColor(qRgb(179, 155, 84));
118118
else if(multi < (0))
119119
return QColor(qRgb(143, 126, 77));
120120
else if(multi == 0)
121121
return QColor(qRgb(64, 64, 64));
122-
else if(multi <= (1))
123-
return QColor(qRgb(68, 97, 55));
124122
else if(multi <= (2))
123+
return QColor(qRgb(68, 97, 55));
124+
else if(multi <= (4))
125125
return QColor(qRgb(94, 140, 73));
126-
else if(multi <= (3))
126+
else if(multi <= (6))
127127
return QColor(qRgb(103, 181, 67));
128-
else if(multi <= (4))
128+
else if(multi <= (8))
129129
return QColor(qRgb(102, 204, 55));
130-
else if(multi <= (5))
130+
else if(multi <= (10))
131131
return QColor(qRgb(90, 240, 22));
132132

133133
}
@@ -205,7 +205,7 @@ bool JumperFormGeneratorsSettingsTableModel::setData(const QModelIndex &index, c
205205
switch(index.column())
206206
{
207207
case 1:
208-
if(value.toDouble() < 0 || value.toDouble() > 10)
208+
if(value.toDouble() < 0 || value.toDouble() > 20)
209209
return false;
210210
generatorsSettings[index.row()].setTendenceVariability(value.toDouble());
211211
break;
@@ -225,12 +225,12 @@ bool JumperFormGeneratorsSettingsTableModel::setData(const QModelIndex &index, c
225225
generatorsSettings[index.row()].setMaxTendence(value.toDouble());
226226
break;
227227
case 5:
228-
if(value.toDouble() < -5 || value.toDouble() > 5)
228+
if(value.toDouble() < -10 || value.toDouble() > 10)
229229
return false;
230230
generatorsSettings[index.row()].setTendenceAlignmentMultiplier(value.toDouble());
231231
break;
232232
case 6:
233-
if(value.toDouble() < 0 || value.toDouble() > 10)
233+
if(value.toDouble() < 0 || value.toDouble() > 20)
234234
return false;
235235
generatorsSettings[index.row()].setFormVariability(value.toDouble());
236236
break;

source/UI/FormGenerator/JumpersFormGeneratorConfigWindow.cpp

Lines changed: 179 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
#include "JumpersFormGeneratorConfigWindow.h"
22
#include "ui_JumpersFormGeneratorConfigWindow.h"
3+
#include "../../form-generator/JumperFormGenerator.h"
4+
#include "../../global/GlobalDatabase.h"
5+
#include "../../utilities/functions.h"
36
#include <QMessageBox>
7+
#include <QInputDialog>
48

59
JumpersFormGeneratorConfigWindow::JumpersFormGeneratorConfigWindow(QWidget *parent) :
610
QDialog(parent),
@@ -10,6 +14,19 @@ JumpersFormGeneratorConfigWindow::JumpersFormGeneratorConfigWindow(QWidget *pare
1014

1115
tableModel = new JumperFormGeneratorsSettingsTableModel(this);
1216
ui->tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
17+
18+
removeFromTableAction = new QAction(this);
19+
this->addAction(removeFromTableAction);
20+
removeFromTableAction->setShortcut(Qt::CTRL | Qt::Key_D);
21+
connect(removeFromTableAction, &QAction::triggered, this, [this](){
22+
onRemoveFromTable(false);
23+
});
24+
alternativeRemoveFromTableAction = new QAction(this);
25+
this->addAction(alternativeRemoveFromTableAction);
26+
alternativeRemoveFromTableAction->setShortcut(Qt::CTRL | Qt::ALT | Qt::Key_D);
27+
connect(alternativeRemoveFromTableAction, &QAction::triggered, this, [this](){
28+
onRemoveFromTable(true);
29+
});
1330
}
1431

1532
JumpersFormGeneratorConfigWindow::~JumpersFormGeneratorConfigWindow()
@@ -24,6 +41,42 @@ void JumpersFormGeneratorConfigWindow::updateTable()
2441
ui->tableView->resizeColumnsToContents();
2542
}
2643

44+
JumperFormGeneratorSettings JumpersFormGeneratorConfigWindow::getSettingsFromInputs()
45+
{
46+
JumperFormGeneratorSettings settings;
47+
settings.setTendenceVariability(ui->doubleSpinBox_tendenceVariability->value());
48+
settings.setMinTendence(ui->doubleSpinBox_minTend->value());
49+
settings.setMaxTendence(ui->doubleSpinBox_maxTend->value());
50+
settings.setTendenceBonus(ui->doubleSpinBox_tendBonus->value());
51+
settings.setTendenceAlignmentMultiplier(ui->doubleSpinBox_tendAlignment->value());
52+
53+
settings.setFormVariability(ui->doubleSpinBox_formVariability->value());
54+
settings.setMinForm(ui->doubleSpinBox_minForm->value());
55+
settings.setMaxForm(ui->doubleSpinBox_maxForm->value());
56+
settings.setFormBonus(ui->doubleSpinBox_formBonus->value());
57+
return settings;
58+
}
59+
60+
QAction *JumpersFormGeneratorConfigWindow::getRemoveFromTableAction() const
61+
{
62+
return removeFromTableAction;
63+
}
64+
65+
void JumpersFormGeneratorConfigWindow::setRemoveFromTableAction(QAction *newRemoveFromTableAction)
66+
{
67+
removeFromTableAction = newRemoveFromTableAction;
68+
}
69+
70+
SimulationSave *JumpersFormGeneratorConfigWindow::getSave() const
71+
{
72+
return save;
73+
}
74+
75+
void JumpersFormGeneratorConfigWindow::setSave(SimulationSave *newSave)
76+
{
77+
save = newSave;
78+
}
79+
2780
JumperFormGeneratorsSettingsTableModel *JumpersFormGeneratorConfigWindow::getTableModel() const
2881
{
2982
return tableModel;
@@ -81,12 +134,7 @@ void JumpersFormGeneratorConfigWindow::on_doubleSpinBox_maxTend_editingFinished(
81134

82135
void JumpersFormGeneratorConfigWindow::on_doubleSpinBox_tendVariability_editingFinished()
83136
{
84-
double value = ui->doubleSpinBox_tendVariability->value();
85-
for(auto & settings : tableModel->getGeneratorsSettingsReference())
86-
{
87-
settings.setFormVariability(value);
88-
}
89-
updateTable();
137+
90138
}
91139

92140
void JumpersFormGeneratorConfigWindow::on_doubleSpinBox_formBonus_editingFinished()
@@ -140,7 +188,131 @@ void JumpersFormGeneratorConfigWindow::on_listWidget_questions_doubleClicked(con
140188
else if(index.row() == 3)
141189
{
142190
QMessageBox::information(this, tr("Jak ustalić formę na start nowego sezonu?"), tr(
143-
"Aby osiągnąć taki efekt, że zawodnicy na start następnego sezonu mają całkiem inną formę z ułamkiem formy z końcówki poprzedniego sezonum należy wykonać 3 czynności z generatorem formy:\n1. Wygenerować nową tendencję i formę zawodników. Dzięki temu zawodnicy mają odświeżoną formę na nowy sezon. Trzeba ustawić dużą zmienność tendencji i dużą zmienność formy, a także powinno się ustawić mnożnik wyrównania tendencji powyżej 1 (aby forma zawodników wyrównała się do środka na początek sezonu). Zalecane jest też ustawienie minusowego bonusu formy w wysokości około -10, jeśli początek sezonu to \"okres przygotowawczy\" (Dzięki temu na start przygotowań nikt nie będzie miał bardzo wysokiej formy co nie było by do końca realistyczne).\n2. Ustalić każdemu zawodnikowi neutralną tendencję formy (Ustawić maksymalną tendencję na 0). Resztę trzeba ustawić na zero. Robimy to po to, aby każdy zawodnik miał nową niezbyt mocną tendencję ponieważ przez dużą moc tendencji jaka byłaby przez punkt 1, byłyby nierealistycznie duże spadki i wzrosty.\n3. Ustalić każdemu zawodnikowi nową, niezbyt mocną tendencję poprzez ustawienie średniej zmienności tendencji i ZEROWEJ zmienności formy (formy zmieniać nie chcemy). Można również ustawić według uznania bonus tendencji jeżeli chce się aby zawodnikom na start sezonu forma raczej rosła niż spadała (można też zrobić na odwrót).\nPo wykonaniu tych 3 kroków, wszyscy zawodnicy są gotowi do ciekawej walki w następnym sezonie."), QMessageBox::Ok);
191+
"Aby osiągnąć taki efekt, że zawodnicy na start następnego sezonu mają całkiem inną formę z ułamkiem formy z końcówki poprzedniego sezonu, należy wykonać 3 czynności z generatorem formy:\n1. Wygenerować nową tendencję i formę zawodników. Dzięki temu zawodnicy mają odświeżoną formę na nowy sezon. Trzeba ustawić dużą zmienność tendencji i dużą zmienność formy, a także powinno się ustawić wyrównanie tendencji powyżej 0 (aby forma zawodników wyrównała się do środka na początek sezonu). Zalecane jest też ustawienie minusowego bonusu formy w wysokości około -10, jeśli początek sezonu to \"okres przygotowawczy\" (Dzięki temu na start przygotowań nikt nie będzie miał bardzo wysokiej formy co nie było by do końca realistyczne).\n2. Ustalić każdemu zawodnikowi neutralną tendencję formy (Trzeba ustawić minimalną i maksymalną tendencję na 0. To samo robimy ze zmiennością tendencji i formy, też ustawiamy na 0). Resztę trzeba zostawić domyślnie. Robimy to po to, aby każdy zawodnik miał nową niezbyt mocną tendencję ponieważ przez dużą moc tendencji jaka byłaby przez punkt 1, byłyby nierealistycznie duże spadki i wzrosty formy.\n3. Ustalić każdemu zawodnikowi nową, niezbyt mocną tendencję poprzez ustawienie średniej zmienności tendencji i ZEROWEJ zmienności formy (formy zmieniać nie chcemy). Można również ustawić według uznania bonus tendencji jeżeli chce się aby zawodnikom na start sezonu forma raczej rosła niż spadała (można też zrobić na odwrót).\nPo wykonaniu tych 3 kroków, wszyscy zawodnicy są gotowi do ciekawej walki w następnym sezonie."), QMessageBox::Ok);
192+
}
193+
}
194+
195+
196+
void JumpersFormGeneratorConfigWindow::on_pushButton_saveAsPreset_clicked()
197+
{
198+
bool ok = false;
199+
QString text = QInputDialog::getText(this, tr("Nazwa presetu"), tr("Podaj nazwę jaką ma mieć ten preset generatora formy. Jeżeli istnieje już preset o takiej nazwie, zostanie on nadpisany."), QLineEdit::Normal, "", &ok);
200+
if(ok == true)
201+
{
202+
bool textExsists = false;
203+
int index=0;
204+
for(auto & p : GlobalDatabase::get()->getEditableGlobalCalendarPresets())
205+
{
206+
if(p.getName() == text){
207+
textExsists = true;
208+
break;
209+
}
210+
index++;
211+
}
212+
if(textExsists == false)
213+
index = (-1);
214+
215+
JumperFormGeneratorSettingsPreset * preset;
216+
if(index == -1){
217+
GlobalDatabase::get()->getEditableFormGeneratorPresets().push_back(getSettingsFromInputs());
218+
preset = &GlobalDatabase::get()->getEditableFormGeneratorPresets().last();
219+
}
220+
else{
221+
GlobalDatabase::get()->getEditableFormGeneratorPresets()[index]=JumperFormGeneratorSettingsPreset(getSettingsFromInputs());
222+
preset = &GlobalDatabase::get()->getEditableFormGeneratorPresets()[index];
223+
}
224+
preset->setName(text);
225+
GlobalDatabase::get()->writeFormGeneratorPresets();
144226
}
145227
}
146228

229+
230+
void JumpersFormGeneratorConfigWindow::on_pushButton_loadPreset_clicked()
231+
{
232+
bool ok = false;
233+
QStringList presetsNames;
234+
for(auto & preset : GlobalDatabase::get()->getEditableFormGeneratorPresets())
235+
presetsNames.push_back(preset.getName());
236+
QString itemText = QInputDialog::getItem(this, tr("Wybierz preset generatora formy"), tr("Wybierz z listy preset generatora formy który chcesz wczytać"), presetsNames,0, false, &ok);
237+
if(ok == true)
238+
{
239+
JumperFormGeneratorSettingsPreset * preset = &GlobalDatabase::get()->getEditableFormGeneratorPresets()[presetsNames.indexOf(itemText)];
240+
for(auto & settings : tableModel->getGeneratorsSettingsReference())
241+
{
242+
Jumper * jumper = settings.getJumper();
243+
settings = preset->getSettings();
244+
settings.setJumper(jumper);
245+
}
246+
JumperFormGeneratorSettings * settings = &preset->getSettingsReference();
247+
ui->doubleSpinBox_tendenceVariability->setValue(settings->getTendenceVariability());
248+
ui->doubleSpinBox_tendBonus->setValue(settings->getTendenceBonus());
249+
ui->doubleSpinBox_minTend->setValue(settings->getMinTendence());
250+
ui->doubleSpinBox_maxTend->setValue(settings->getMaxTendence());
251+
ui->doubleSpinBox_tendAlignment->setValue(settings->getTendenceAlignmentMultiplier());
252+
ui->doubleSpinBox_formVariability->setValue(settings->getFormVariability());
253+
ui->doubleSpinBox_formBonus->setValue(settings->getFormBonus());
254+
ui->doubleSpinBox_minForm->setValue(settings->getMinForm());
255+
ui->doubleSpinBox_maxForm->setValue(settings->getMaxForm());
256+
}
257+
}
258+
259+
260+
void JumpersFormGeneratorConfigWindow::on_pushButton_generate_clicked()
261+
{
262+
JumperFormGenerator generator;
263+
for(auto & jumperSettings : tableModel->getGeneratorsSettingsReference())
264+
{
265+
generator.setSettings(jumperSettings);
266+
generator.setTendence(save->getJumperTendence(generator.getJumper()));
267+
generator.generateJumperFormTendence();
268+
generator.generateJumperForm();
269+
}
270+
271+
QMessageBox::information(this, tr("Generowanie formy"), tr("Pomyślnie zaktualizowano tendencję formy i formę zawodników"), QMessageBox::Ok);
272+
}
273+
274+
void JumpersFormGeneratorConfigWindow::onRemoveFromTable(bool alternative)
275+
{
276+
QSet<int> rows;
277+
for(auto & index : ui->tableView->selectionModel()->selectedIndexes())
278+
rows.insert(index.row());
279+
qDebug()<<"rows count: "<<rows.count();
280+
if(alternative && ui->tableView->selectionModel()->selectedRows().count() < tableModel->rowCount() && ui->tableView->selectionModel()->selectedIndexes().count() > 0)
281+
{
282+
qDebug()<<"alt";
283+
int count = tableModel->rowCount();
284+
QSet<int> tempRows;
285+
for(int i=0; i<count; i++)
286+
{
287+
qDebug()<<i<<" ("<<rows.contains(i)<<")";
288+
if(rows.contains(i) == false)
289+
{
290+
tempRows.insert(i);
291+
}
292+
}
293+
qDebug()<<"size "<<tempRows.size();
294+
rows = tempRows;
295+
}
296+
int removed = 0;
297+
QList<int> r = rows.values();
298+
std::sort(r.begin(), r.end(), std::less<int>());
299+
for(auto & row : qAsConst(r))
300+
{
301+
qDebug()<<"b << "<<row<<" (removed: "<<removed<<")";
302+
MyFunctions::removeFromVector(tableModel->getGeneratorsSettingsReference(), &tableModel->getGeneratorsSettingsReference()[row - removed]);
303+
removed++;
304+
}
305+
updateTable();
306+
}
307+
308+
309+
void JumpersFormGeneratorConfigWindow::on_doubleSpinBox_formVariability_editingFinished()
310+
{
311+
double value = ui->doubleSpinBox_formVariability->value();
312+
for(auto & settings : tableModel->getGeneratorsSettingsReference())
313+
{
314+
settings.setFormVariability(value);
315+
}
316+
updateTable();
317+
}
318+

0 commit comments

Comments
 (0)