Skip to content

Commit fa82fe9

Browse files
committed
Adding export level to JSON file feature
1 parent e103d19 commit fa82fe9

File tree

5 files changed

+127
-11
lines changed

5 files changed

+127
-11
lines changed

entirelevel.cpp

+94-11
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,6 @@ void EntireLevel::saveToStream(QDataStream &out)
7373
if (Matrix->getNumsAt(i,j) != NULL)
7474
if (Matrix->getNumsAt(i,j)->contains(k))
7575
{
76-
//out << (int) i;
77-
//out << (int) j;
7876
bf.append(QPoint(i,j));
7977
}
8078
}
@@ -131,14 +129,10 @@ void EntireLevel::loadFromStream(QDataStream &in)
131129
in >> buf_int;
132130
in >> buf_int;
133131

134-
// qDeleteAll(Layers); //wywołujemy destrukotyry
135-
// Layers.clear(); //usuwamy wskaźniki
136-
137132
int num_layers;
138133
in >> num_layers;
139134

140135
qDebug() << "Load, layers count: " << num_layers;
141-
// ui->cbSelectLayer->clear();
142136
int maxx = 0,maxy = 0;
143137
for (int k=0; k<num_layers; k++ )
144138
{
@@ -148,7 +142,6 @@ void EntireLevel::loadFromStream(QDataStream &in)
148142
Layers[k]->setWorldSize(buf_int,buf_int2);
149143
if (maxx < buf_int) maxx = buf_int;
150144
if (maxy < buf_int2) maxy = buf_int2;
151-
// ui->cbSelectLayer->addItem(QString::number(k+1));
152145
for (int j=0; j<Layers[k]->getSizeY(); j++)
153146
for (int i=0; i<Layers[k]->getSizeX(); i++)
154147
{
@@ -166,7 +159,6 @@ void EntireLevel::loadFromStream(QDataStream &in)
166159
in >> buf_str;
167160
in >> buf_str2;
168161
Matrix->createNewEvent(buf_str,buf_str2);
169-
// ui->lwEventList->addItem( buf_str );
170162
in >> buf_int2;
171163
for(int i=0;i<buf_int2;i++)
172164
{
@@ -180,6 +172,98 @@ void EntireLevel::loadFromStream(QDataStream &in)
180172
in >> buf_int;
181173
}
182174

175+
void saveJson(QJsonDocument document, QString fileName) {
176+
QFile jsonFile(fileName);
177+
jsonFile.open(QFile::WriteOnly);
178+
jsonFile.write(document.toJson(QJsonDocument::Compact));
179+
jsonFile.close();
180+
}
181+
182+
void EntireLevel::saveToJSON(QString FileName)
183+
{
184+
QJsonObject jObj;
185+
186+
jObj["level-name"] = Name;
187+
jObj["tile-sizeX"] = Buffer->getTileSizeX();
188+
jObj["tile-sizeY"] = Buffer->getTileSizeY();
189+
190+
QJsonArray jAnim;
191+
for (int i=0; i<AnimBuffer->Animations.size(); i++)
192+
{
193+
QJsonObject j;
194+
QJsonArray f;
195+
j["is-ping-pong"] = AnimBuffer->Animations[i].isPingPong;
196+
j["fps"] = AnimBuffer->Animations[i].Fps;
197+
for (int j=0;j<AnimBuffer->Animations[i].Frames.size(); j++)
198+
{
199+
f.append( AnimBuffer->Animations[i].Frames[j] );
200+
}
201+
j["frames"] = f;
202+
jAnim.append(j);
203+
}
204+
205+
QJsonArray jLay;
206+
for (int k=0; k<Layers.size(); k++ )
207+
{
208+
QJsonObject j;
209+
QJsonArray ty;
210+
j["sizeX"] = Layers[k]->getSizeX();
211+
j["sizeY"] = Layers[k]->getSizeY();
212+
for (int j=0; j<Layers[k]->getSizeY(); j++)
213+
{
214+
QJsonArray tx;
215+
for (int i=0; i<Layers[k]->getSizeX(); i++)
216+
{
217+
tx.append( Layers[k]->getTileAt(i,j) );
218+
}
219+
ty.append( tx );
220+
}
221+
j["tiles"] = ty;
222+
jLay.append(j);
223+
}
224+
225+
QVector<QPoint> bf;
226+
QJsonArray jEve;
227+
for(int k=0;k<Matrix->getCount();k++)
228+
{
229+
for (int j=0; j<Matrix->getSizeY(); j++)
230+
{
231+
for (int i=0; i<Matrix->getSizeX(); i++)
232+
{
233+
if (Matrix->getNumsAt(i,j) != NULL)
234+
if (Matrix->getNumsAt(i,j)->contains(k))
235+
{
236+
bf.append(QPoint(i,j));
237+
}
238+
}
239+
}
240+
241+
QJsonObject j;
242+
QJsonArray lp;
243+
j["name"] = Matrix->getEvent(k)->Name;
244+
j["parameters"] = Matrix->getEvent(k)->Params;
245+
246+
for (int i=0; i<bf.count(); i++)
247+
{
248+
QJsonArray pt;
249+
pt.append( bf.at(i).x() );
250+
pt.append( bf.at(i).y() );
251+
lp.append( pt );
252+
}
253+
bf.clear();
254+
255+
j["level-positions"] = lp;
256+
jEve.append(j);
257+
}
258+
jObj["animations"] = jAnim;
259+
jObj["layers"] = jLay;
260+
jObj["events"] = jEve;
261+
262+
QJsonDocument d;
263+
d.setObject(jObj);
264+
saveJson(d,FileName);
265+
}
266+
183267
void EntireLevel::setName(QString s)
184268
{
185269
Name = s;
@@ -193,9 +277,8 @@ void EntireLevel::clearAll()
193277

194278
void EntireLevel::clear()
195279
{
196-
qDeleteAll(Layers); //wywołujemy destrukotyry
197-
Layers.clear(); //usuwamy wskaźniki
198-
//Buffer->clear();
280+
qDeleteAll(Layers);
281+
Layers.clear();
199282
AnimBuffer->clear();
200283
Matrix->clear();
201284
}

entirelevel.h

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
#include <QVector>
55

6+
#include <QJsonDocument>
7+
#include <QJsonObject>
8+
#include <QJsonArray>
9+
610
#include "tilemap.h"
711
#include "tilebuffer.h"
812
#include "animationbuffer.h"
@@ -18,6 +22,7 @@ class EntireLevel
1822
// int getTileHeight();
1923
void saveToStream(QDataStream &out);
2024
void loadFromStream(QDataStream &in);
25+
void saveToJSON(QString FileName);
2126
void setName(QString s);
2227
void clear();
2328
void clearAll();

mainwindow.cpp

+20
Original file line numberDiff line numberDiff line change
@@ -746,3 +746,23 @@ void MainWindow::on_actionPowt_rz_triggered()
746746
Editor->setCursorTiles(bf);
747747
AnimEditor->setCursorTiles(bf);
748748
}
749+
750+
void MainWindow::on_actionExport_level_as_JSON_triggered()
751+
{
752+
QFileDialog dial( this, tr("Export level as JSON file"),FilesPath,tr("JSON file (*.json);;All files (*)"));
753+
dial.setDefaultSuffix(".json");
754+
dial.setAcceptMode(QFileDialog::AcceptSave);
755+
if (! dial.exec() ) return;
756+
QString fileName = dial.selectedFiles().at(0);
757+
if (fileName == "") return;
758+
FilesPath = QFileInfo(fileName).absolutePath();
759+
760+
Level->saveToJSON( fileName );
761+
// QFile file( fileName );
762+
// if ( file.open(QIODevice::WriteOnly) )
763+
// {
764+
// QTextStream stream( &file );
765+
// Level->Layers[ui->cbSelectLayer->currentIndex()]->saveLayerAsText(stream);
766+
// file.close();
767+
// }
768+
}

mainwindow.h

+2
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ private slots:
7575
void on_actionCofnij_triggered();
7676
void on_actionPowt_rz_triggered();
7777

78+
void on_actionExport_level_as_JSON_triggered();
79+
7880
private:
7981
void closeEvent(QCloseEvent *event);
8082
void resizeEvent( QResizeEvent * );

mainwindow.ui

+6
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,7 @@ remove:</string>
884884
<addaction name="actionZapisz_jako"/>
885885
<addaction name="separator"/>
886886
<addaction name="actionWczytaj_textur_o_rozmiarach"/>
887+
<addaction name="actionExport_level_as_JSON"/>
887888
<addaction name="menuExportuj_warstw"/>
888889
<addaction name="menuExportuj_textur"/>
889890
<addaction name="separator"/>
@@ -1145,6 +1146,11 @@ remove:</string>
11451146
<string>Ctrl+Shift+Z</string>
11461147
</property>
11471148
</action>
1149+
<action name="actionExport_level_as_JSON">
1150+
<property name="text">
1151+
<string>Export level as JSON file</string>
1152+
</property>
1153+
</action>
11481154
</widget>
11491155
<layoutdefault spacing="6" margin="11"/>
11501156
<resources>

0 commit comments

Comments
 (0)