Skip to content
Snippets Groups Projects
Unverified Commit deb88fba authored by Julian Dreuth's avatar Julian Dreuth Committed by Leon Lux
Browse files

Add saving and exporting mobs and objects in editor

parent 78c22710
No related branches found
No related tags found
1 merge request!55Abgabe des Projektes
......@@ -20,11 +20,17 @@ CenterGrid::CenterGrid(QWidget* parent)
const int cols = 64;
gridItems.resize(rows);
m_tileIDs.resize(rows);
m_objectIDs.resize(rows);
m_mobIDs.resize(rows);
for (int row = 0; row < rows; row++) {
gridItems[row].resize(cols);
m_tileIDs[row].resize(cols);
m_objectIDs[row].resize(cols);
m_mobIDs[row].resize(cols);
for (int col = 0; col < cols; col++) {
m_tileIDs[row][col] = m_currentSpriteID;
m_objectIDs[row][col] = m_currentSpriteID;
m_mobIDs[row][col] = m_currentSpriteID;
}
}
......@@ -66,6 +72,16 @@ void CenterGrid::resizeEvent(QResizeEvent* event)
void CenterGrid::setCurrentSprite(const QPixmap pixmap, const int id)
{
if (std::find(m_tileIDList.begin(), m_tileIDList.end(), id) != m_tileIDList.end())
{
m_spriteType = 0;
} else if (std::find(m_mobIDList.begin(), m_mobIDList.end(), id) != m_mobIDList.end())
{
m_spriteType = 1;
} else
{
m_spriteType = 2;
}
m_currentSprite = pixmap;
m_currentSpriteID = id;
}
......@@ -74,7 +90,16 @@ void CenterGrid::onTileClicked(int row, int col)
{
GridItem* tile = getTile(row,col);
tile->setPixmap(m_currentSprite);
m_tileIDs[row][col] = m_currentSpriteID;
if (m_spriteType == 0) {
m_tileIDs[row][col] = m_currentSpriteID;
} else if (m_spriteType == 1)
{
m_mobIDs[row][col] = m_currentSpriteID;
} else
{
m_objectIDs[row][col] = m_currentSpriteID;
}
}
GridItem* CenterGrid::getTile(int row, int col) const
......@@ -91,6 +116,16 @@ QVector<QVector<int>> CenterGrid::getTileIDs()
return m_tileIDs;
}
QVector<QVector<int>> CenterGrid::getMobIDs()
{
return m_mobIDs;
}
QVector<QVector<int>> CenterGrid::getObjectIDs()
{
return m_objectIDs;
}
void CenterGrid::drawPreset(int index)
{
QList<QGraphicsItem*> items = scene->items();
......
......@@ -59,6 +59,18 @@ public:
*/
QVector<QVector<int>> getTileIDs();
/**
* @brief getter function for Vector of MobIDs
* @return QVector<QVector<int>> of MobIDs
*/
QVector<QVector<int>> getMobIDs();
/**
* @brief getter function for Vector of ObjectsIDs
* @return QVector<QVector<int>> of ObjectIDs
*/
QVector<QVector<int>> getObjectIDs();
private:
/**
......@@ -93,9 +105,40 @@ private:
QVector<QVector<GridItem*>> gridItems;
/**
* @brief 2D Vector holding all GridItems, making them accessible by position on grid
* @brief 2D Vector holding all tileIDs, making them accessible by position on grid
*/
QVector<QVector<int>> m_tileIDs;
/**
* @brief 2D Vector holding all objectIDs, making them accessible by position on grid
*/
QVector<QVector<int>> m_objectIDs;
/**
* @brief 2D Vector holding all mobIDs, making them accessible by position on grid
*/
QVector<QVector<int>> m_mobIDs;
/**
* @brief Integer marking the type of the currently selected sprite
*/
int m_spriteType;
/**
* @brief List of all spriteIDs that are tiles
*/
std::vector<int> m_tileIDList = {0,1,2,3,4,5,6,7,8,9,32,33,34,35,36,37,38,39,
40,41,64,65,66,67,68,69,70,71,72,73,96,97,98,99,100,101,128,
129,130,131,132,133,160,161,162,163,164,165,192,193,194,195,
201,224,225,226,227,232,233};
/**
* @brief List of all spriteIDs that are mobs
*/
std::vector<int> m_mobIDList = {18,19,20,21,22,23,24,25,50,51,52,53,54,55,56,
57,82,83,84,85,86,87,88,89,114,115,116,117,118,119,120,121,146,
147,148,149,150,151,152,153,178,179,180,181,182,183,184,185,210,
211,212,213,214,215,216,242,243,244,245,246,247,248};
};
} // namespace editor
\ No newline at end of file
......@@ -37,17 +37,25 @@ void HDF5Handler::loadTilesheet(TileBar* tileBar) const
tileBar->populateList(tileNames, tiles);
}
void HDF5Handler::saveRoom(int id, QString name, QVector<QVector<int>> tileIDs, QVector<QVector<int>> mobIDs)
void HDF5Handler::saveRoom(int id, QString name, QVector<QVector<int>> tileIDs, QVector<QVector<int>> mobIDs, QVector<QVector<int>> objectIDs)
{
lvl::Room newRoom(id, name.toStdString(), 64, 64);
for (int row = 0; row < 64; row++)
lvl::Room newRoom(id, name.toStdString(), 32, 32);
for (int row = 0; row < 32; row++)
{
for (int col = 0; col < 64; col++)
for (int col = 0; col < 32; col++)
{
newRoom.placeTile({col,row}, tileIDs[row][col]);
//newRoom->placeEnemy(pos, mobIDs[row][col]);
if(mobIDs[row][col] != -1)
{
newRoom.placeEnemy({col,row}, mobIDs[row][col]);
}
if(objectIDs[row][col] != -1)
{
newRoom.placeObject({col,row}, objectIDs[row][col]);
}
}
}
std::vector<lvl::Room>& roomsList = m_Level.getRooms();
roomsList.push_back(newRoom);
m_Level.saveChanges("./level.h5");
......@@ -56,8 +64,18 @@ void HDF5Handler::saveRoom(int id, QString name, QVector<QVector<int>> tileIDs,
int HDF5Handler::getMaxID()
{
std::vector<lvl::Room>& roomsList = m_Level.getRooms();
lvl::Room lastRoom = roomsList.back();
return lastRoom.getId();
auto maxIt = std::max_element(roomsList.begin(), roomsList.end(),
[](const lvl::Room& a, const lvl::Room& b)
{
return a.getId() < b.getId();
});
if (maxIt != roomsList.end())
{
return maxIt->getId();
} else
{
return 0;
}
}
}
\ No newline at end of file
#pragma once
#include <QImage>
#include <QPixmap>
#include <QMessageBox>
#include <algorithm>
#include <level.hpp>
#include <room.hpp>
#include "TileBar.hpp"
#include <QMessageBox>
namespace editor
{
......@@ -39,9 +43,10 @@ public:
* @param id ID of the room, has to be unique!
* @param name Name of the room
* @param tileIDs 2D QVector of the tileIDs
* @param mobIDs 2D QVector of the tileIDs
* @param mobIDs 2D QVector of the mobIDs
* @param objectIDs 2D QVector of the objectIDs
*/
void saveRoom(int id, QString name, QVector<QVector<int>> tileIDs, QVector<QVector<int>> mobIDs);
void saveRoom(int id, QString name, QVector<QVector<int>> tileIDs, QVector<QVector<int>> mobIDs, QVector<QVector<int>> objectIDs);
/**
* @brief find maximum room-ID in current HDF5-file
......
......@@ -107,20 +107,24 @@ void MainWindow::handleTileBarClick(int index, int id)
void MainWindow::saveLevel()
{
QVector<QVector<int>> tileIDs = m_centerGrid->getTileIDs();
QVector<QVector<int>> mobIDs;
QString name = "testlevel1234";
QVector<QVector<int>> mobIDs = m_centerGrid->getMobIDs();
QVector<QVector<int>> objectIDs = m_centerGrid->getObjectIDs();
QString name = QInputDialog::getText(nullptr, "Enter Level Name", "Name:");
if (name.isEmpty()) {
name = "defaultName";
}
if (QFile::exists("./level.h5"))
{
std::cout << "using new handler" << std::endl;
std::filesystem::path path = "./level.h5";
HDF5Handler handler = HDF5Handler(path);
handler.saveRoom(m_ID, name, tileIDs, mobIDs);
handler.saveRoom(m_ID, name, tileIDs, mobIDs, objectIDs);
} else
{
std::cout << "using default handler" << std::endl;
HDF5Handler handler = HDF5Handler();
handler.saveRoom(m_ID, name, tileIDs, mobIDs);
handler.saveRoom(m_ID, name, tileIDs, mobIDs, objectIDs);
}
m_ID++;
}
......
......@@ -7,6 +7,7 @@
#include <QMenuBar>
#include <QWidget>
#include <QMessageBox>
#include <QInputDialog>
#include <filesystem>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment