Skip to content

Commit e3a44dc

Browse files
Ro_batRo_bat
authored andcommitted
feat: added states to miniatures, so graphics can be switched out quickly
1 parent 60450f1 commit e3a44dc

9 files changed

Lines changed: 170 additions & 25 deletions

File tree

OmegaRPG/omegarpgmainwindow.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include <QAudioOutput>
2121
#include <QAudioDecoder>
2222
#include <QSoundEffect>
23-
#include <QSound>
2423
#include <QSettings>
2524
#include <QGraphicsColorizeEffect>
2625

core/multi/roomresources/mapresources/mapminiatureresource.cpp

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "mapminiatureresource.h"
2+
#include <QJsonArray>
23

34
const QString MapMiniatureResource::resourceName = "map-miniature";
45

@@ -12,12 +13,12 @@ void MapMiniatureResource::setName(const QString &value)
1213
_name = value;
1314
}
1415

15-
QString MapMiniatureResource::getGraphic() const
16+
QVector<QString> MapMiniatureResource::getGraphic() const
1617
{
1718
return graphic;
1819
}
1920

20-
void MapMiniatureResource::setGraphic(const QString &value)
21+
void MapMiniatureResource::setGraphic(const QVector<QString> &value)
2122
{
2223
graphic = value;
2324
}
@@ -94,6 +95,14 @@ void MapMiniatureResource::setVisibility(const Visibility &value)
9495
visibility = value;
9596
}
9697

98+
quint32 MapMiniatureResource::getSelectedGraphicsIndex() const {
99+
return selectedGraphicsIndex;
100+
}
101+
102+
void MapMiniatureResource::setSelectedGraphicsIndex(quint32 value) {
103+
selectedGraphicsIndex = value;
104+
}
105+
97106
const QString&MapMiniatureResource::name() const
98107
{
99108
return resourceName;
@@ -111,14 +120,15 @@ void MapMiniatureResource::updateValidity()
111120
}
112121

113122
MapMiniatureResource::MapMiniatureResource(const QString &name,
114-
const QString &graphic,
123+
const QVector<QString> &graphic,
115124
const QPointF &pos,
116125
qreal size,
117126
MapMiniatureResource::Layer layer,
118127
MapMiniatureResource::Display display,
119128
qreal rotation,
120129
qreal direction,
121-
MapMiniatureResource::Visibility visibility)
130+
MapMiniatureResource::Visibility visibility,
131+
quint32 selectedGraphicsIndex)
122132
: Resource()
123133
{
124134
this->_name = name;
@@ -130,14 +140,24 @@ MapMiniatureResource::MapMiniatureResource(const QString &name,
130140
this->rotation = rotation;
131141
this->direction = direction;
132142
this->visibility = visibility;
143+
this->selectedGraphicsIndex = selectedGraphicsIndex;
133144
updateValidity();
134145
}
135146

136147
MapMiniatureResource::MapMiniatureResource(const QJsonObject &data)
137148
: Resource()
138149
{
139150
this->_name = data["name"].toString();
140-
this->graphic = data["graphic"].toString();
151+
QVector<QString> graphicArray;
152+
if (data["graphic"].isString()) {
153+
graphicArray = QVector<QString>({data["graphic"].toString()});
154+
} else if (data["graphic"].isArray()) {
155+
for (const QJsonValue &entry : data["graphic"].toArray()) {
156+
graphicArray.push_back(entry.toString());
157+
}
158+
}
159+
this->graphic = graphicArray;
160+
this->selectedGraphicsIndex = data["selectedGraphicsIndex"].toInt(0);
141161
this->pos.rx() = data["x"].toDouble(0.0);
142162
this->pos.ry() = data["y"].toDouble(0.0);
143163
this->size = data["size"].toDouble(1);
@@ -153,7 +173,11 @@ QJsonObject MapMiniatureResource::data() const
153173
{
154174
QJsonObject data;
155175
data.insert("name",_name);
156-
data.insert("graphic",graphic);
176+
QJsonArray graphicsArray;
177+
for (const QString &entry : graphic) {
178+
graphicsArray.push_back(entry);
179+
}
180+
data.insert("graphic",graphicsArray);
157181
data.insert("x",pos.x());
158182
data.insert("y",pos.y());
159183
data.insert("size",size);
@@ -162,5 +186,14 @@ QJsonObject MapMiniatureResource::data() const
162186
data.insert("rotation",rotation);
163187
data.insert("direction",direction);
164188
data.insert("vis",(int)visibility);
189+
data.insert("selectedGraphicsIndex", (int) selectedGraphicsIndex);
165190
return data;
166191
}
192+
193+
QString MapMiniatureResource::getSelectedGraphic() const {
194+
if (this->selectedGraphicsIndex < this->graphic.size()) {
195+
return this->graphic[selectedGraphicsIndex];
196+
} else {
197+
return "";
198+
}
199+
}

core/multi/roomresources/mapresources/mapminiatureresource.h

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ class MapMiniatureResource : public Resource
3333
};
3434
private:
3535
QString _name;
36-
QString graphic;
36+
QVector<QString> graphic;
37+
quint32 selectedGraphicsIndex;
3738
QPointF pos;
3839
qreal size;
3940
Layer layer;
@@ -43,20 +44,21 @@ class MapMiniatureResource : public Resource
4344
void updateValidity();
4445
public:
4546
MapMiniatureResource(const QString& name="",
46-
const QString& graphic="",
47+
const QVector<QString>& graphic=QVector<QString>(),
4748
const QPointF& pos=QPointF(0,0),
4849
qreal size=1.0,
4950
MapMiniatureResource::Layer layer=LAYER_ABOVELINES,
5051
MapMiniatureResource::Display display=DISPLAY_NORMAL,
5152
qreal rotation=0.0,
5253
qreal direction=-1.0,
53-
Visibility visibility = VISIBILITY_VISIBLE);
54+
Visibility visibility = VISIBILITY_VISIBLE,
55+
quint32 selectedGraphicsIndex=0);
5456
MapMiniatureResource(const QJsonObject& data);
5557
virtual QJsonObject data() const;
5658
QString getName() const;
5759
void setName(const QString &value);
58-
QString getGraphic() const;
59-
void setGraphic(const QString &value);
60+
QVector<QString> getGraphic() const;
61+
void setGraphic(const QVector<QString> &value);
6062
QPointF getPos() const;
6163
void setPos(const QPointF &value);
6264
qreal getSize() const;
@@ -71,6 +73,9 @@ class MapMiniatureResource : public Resource
7173
void setDirection(const qreal &value);
7274
Visibility getVisibility() const;
7375
void setVisibility(const Visibility &value);
76+
quint32 getSelectedGraphicsIndex() const;
77+
void setSelectedGraphicsIndex(quint32 value);
78+
QString getSelectedGraphic() const;
7479
virtual const QString& name() const;
7580
};
7681

gui/map/dialogs/miniatureeditdialog.cpp

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,21 @@ void MiniatureEditDialog::addRow(QWidget *widget)
212212

213213
void MiniatureEditDialog::addRow(QLayout *layout)
214214
{
215-
this->layout->addLayout(layout,this->layout->rowCount(),0,1,2);
215+
this->layout->addLayout(layout,this->layout->rowCount(),0,1,2);
216+
}
217+
218+
void MiniatureEditDialog::addRow(const QString &label, QLayout *layout)
219+
{
220+
this->layout->addLayout(layout,this->layout->rowCount(),0,1,2);
221+
222+
int row = this->layout->rowCount();
223+
if(!label.isEmpty())
224+
{
225+
QLabel* labelWidget = new QLabel(label);
226+
labelMap.insert((QWidget*)layout,labelWidget);
227+
this->layout->addWidget(labelWidget,row,0,1,1);
228+
}
229+
this->layout->addLayout(layout,row,1,1,1);
216230
}
217231

218232
void MiniatureEditDialog::setWidgetHidden(QWidget *widget, bool value)
@@ -262,15 +276,41 @@ void MiniatureEditDialog::setDirection(qreal deg)
262276
directionBox->setCurrentIndex(directionBox->count()-1);
263277
}
264278

279+
void MiniatureEditDialog::graphicsSliderChanged(int value) {
280+
this->graphicStateSliderLabel->setText(QString::fromStdString(std::to_string(value+1)));
281+
setUrl(urls[value]);
282+
}
283+
284+
void MiniatureEditDialog::urlLineEditChanged(const QString& value) {
285+
this->urls[this->graphicStateSlider->value()] = value;
286+
}
287+
288+
void MiniatureEditDialog::colorChanged(QColor value) {
289+
this->urls[this->graphicStateSlider->value()] = value.name();
290+
}
291+
265292
MiniatureEditDialog::MiniatureEditDialog(QWidget* parent) : NightModeDialog(parent)
266293
{
294+
urls = QVector<QString>(8);
267295
layout = new QGridLayout(getCentralWidget());
268296
nameEdit = new QLineEdit();
269297
urlEdit = new ImageUrlSelection(Global::imgurClientID());
270298
sizeBox = new MiniatureSizeSpinBox();
271299
sizeBox->setMinimum(1.0/4.0);
272300
sizeBox->setMaximum(1000);
273301
sizeBox->setSuffix(" Grid Cells");
302+
graphicStateSlider = new QSlider(this);
303+
quint32 selectedState = 0;
304+
graphicStateSlider->setValue(selectedState);
305+
graphicStateSlider->setMinimum(0);
306+
graphicStateSlider->setMaximum(7);
307+
graphicStateSlider->setOrientation(Qt::Horizontal);
308+
graphicStateSliderLabel = new QLabel(QString::fromStdString(std::to_string(selectedState+1)), this);
309+
QHBoxLayout* graphicStateLayout = new QHBoxLayout(this);
310+
QWidget* fuckoff = new QWidget(this);
311+
fuckoff->setLayout(graphicStateLayout);
312+
graphicStateLayout->addWidget(graphicStateSliderLabel);
313+
graphicStateLayout->addWidget(graphicStateSlider);
274314
imageSourceBox = new QComboBox(this);
275315
imageSourceBox->addItem("URL");
276316
imageSourceBox->addItem("Color");
@@ -331,6 +371,7 @@ MiniatureEditDialog::MiniatureEditDialog(QWidget* parent) : NightModeDialog(pare
331371
buttonLayout->addWidget(cancelButton);
332372

333373
addRow("Name:",nameEdit);
374+
addRow("State:",fuckoff);
334375
addRow("Image Source:",imageSourceBox);
335376
addRow("URL:",urlEdit);
336377
addRow("Color:",colorButton);
@@ -355,12 +396,22 @@ MiniatureEditDialog::MiniatureEditDialog(QWidget* parent) : NightModeDialog(pare
355396
connect(imageSourceBox,qOverload<int>(&QComboBox::currentIndexChanged), this, &MiniatureEditDialog::sourceChanged);
356397
connect(rotationBox,qOverload<int>(&QComboBox::currentIndexChanged),this,&MiniatureEditDialog::rotationBoxChanged);
357398
connect(directionBox,qOverload<int>(&QComboBox::currentIndexChanged),this,&MiniatureEditDialog::directionBoxChanged);
399+
connect(graphicStateSlider, qOverload<int>(&QSlider::valueChanged), this, &MiniatureEditDialog::graphicsSliderChanged);
400+
connect(this->urlEdit->lineEdit(), qOverload<const QString&>(&QLineEdit::textChanged), this, &MiniatureEditDialog::urlLineEditChanged);
401+
connect(this->colorButton, qOverload<QColor>(&ColorSelectButton::finalColorChanged), this, &MiniatureEditDialog::colorChanged);
358402
}
359403

360404
MapMiniatureResource MiniatureEditDialog::getMiniature()
361405
{
362406
miniature.setName(nameEdit->text());
363-
miniature.setGraphic(getUrl());
407+
QVector<QString> urls;
408+
for (int i = 0; i<this->urls.size(); ++i) {
409+
if (this->urls[i].size()>0) {
410+
urls.push_back(this->urls[i]);
411+
}
412+
}
413+
miniature.setSelectedGraphicsIndex(this->graphicStateSlider->value());
414+
miniature.setGraphic(urls);
364415
miniature.setSize(getSize());
365416
miniature.setLayer(getLayer());
366417
miniature.setVisibility(getVisibility());
@@ -374,11 +425,23 @@ void MiniatureEditDialog::setMiniature(const MapMiniatureResource &mini)
374425
{
375426
miniature = mini;
376427
setName(mini.getName());
377-
setUrl(mini.getGraphic());
428+
auto graphics = mini.getGraphic();
429+
for(int i=0; i<std::min(this->urls.size(),graphics.size()); ++i) {
430+
this->urls[i] = graphics[i];
431+
}
432+
//setUrl(mini.getGraphic()[0]);
378433
setSize(mini.getSize());
379434
setLayer(mini.getLayer());
380435
setVisibility(mini.getVisibility());
381436
setDisplay(mini.getDisplay());
382437
setRotation(mini.getRotation());
383438
setDirection(mini.getDirection());
439+
auto selectedIndex = mini.getSelectedGraphicsIndex();
440+
if (selectedIndex > 0 && selectedIndex < 8) {
441+
graphicsSliderChanged(mini.getSelectedGraphicsIndex());
442+
setUrl(this->urls[mini.getSelectedGraphicsIndex()]);
443+
} else {
444+
graphicsSliderChanged(0);
445+
setUrl(this->urls[0]);
446+
}
384447
}

gui/map/dialogs/miniatureeditdialog.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class MiniatureEditDialog : public NightModeDialog
3030
QGridLayout* layout;
3131
//QGridLayout* layout;
3232
QLineEdit* nameEdit;
33+
QLabel* graphicStateSliderLabel;
34+
QSlider* graphicStateSlider;
3335
QComboBox* imageSourceBox;
3436
ColorSelectButton* colorButton;
3537
ImageUrlSelection* urlEdit;
@@ -44,6 +46,7 @@ class MiniatureEditDialog : public NightModeDialog
4446
QComboBox* directionBox;
4547
QSpinBox* directionSpinBox;
4648

49+
QVector<QString> urls;
4750

4851
QHBoxLayout* buttonLayout;
4952
QPushButton* okButton;
@@ -57,6 +60,7 @@ class MiniatureEditDialog : public NightModeDialog
5760
void addRow(const QString& label, QWidget* widget);
5861
void addRow(QWidget* widget);
5962
void addRow(QLayout* layout);
63+
void addRow(const QString &label, QLayout *layout);
6064
void setWidgetHidden(QWidget* widget, bool value);
6165

6266
void setRotation(qreal deg);
@@ -89,6 +93,9 @@ private slots:
8993
void sourceChanged(int index);
9094
void rotationBoxChanged(int index);
9195
void directionBoxChanged(int index);
96+
void graphicsSliderChanged(int value);
97+
void urlLineEditChanged(const QString& value);
98+
void colorChanged(QColor value);
9299
};
93100

94101
#endif // MINIATUREEDITDIALOG_H

gui/map/objects/mapscene-instances/miniatureinstance.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ MiniatureInstance::MiniatureInstance(const MapMiniatureResource &miniature, QGra
207207
this->miniature = miniature;
208208
if(!miniature.getGraphic().isEmpty())
209209
{
210-
item = ih->getGraphicsItem(miniature.getGraphic(),miniature.getSize()*gridSize,miniature.getDisplay());
210+
item = ih->getGraphicsItem(miniature.getSelectedGraphic(),miniature.getSize()*gridSize,miniature.getDisplay());
211211
item->setRotation(miniature.getRotation());
212212
item->setPos(miniature.getPos()*gridSize);
213213

0 commit comments

Comments
 (0)