Select Git revision
-
Carl Philipp Klemm authoredCarl Philipp Klemm authored
CenterGrid.cpp 9.49 KiB
#include "CenterGrid.hpp"
namespace editor
{
CenterGrid::CenterGrid(QWidget *parent)
: QWidget(parent), scene(new QGraphicsScene(this)), view(new QGraphicsView(scene, this))
{
// Configure view
view->setRenderHint(QPainter::Antialiasing);
view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view->setAlignment(Qt::AlignCenter | Qt::AlignCenter);
// Initialize the 2D container
m_currentSpriteID = -1;
const int rows = 64;
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;
}
}
// Create tiles
const qreal tileSize = 20.0;
for (int row = 0; row < rows; row++)
{
for (int col = 0; col < cols; col++)
{
GridItem *tile = new GridItem(row, col, tileSize);
tile->setPos(col * tileSize, row * tileSize);
scene->addItem(tile);
gridItems[row][col] = tile;
connect(tile, &GridItem::clicked, this, &CenterGrid::onTileClicked);
}
}
// Set initial grid boundaries
scene->setSceneRect(0, 0, 64 * tileSize, 64 * tileSize);
// Set Layout
QVBoxLayout *layout = new QVBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(view);
setLayout(layout);
// Resize after initialization is done to fit window size
QTimer::singleShot(0, this, [this]() { view->fitInView(scene->sceneRect(), Qt::KeepAspectRatio); });
}
void CenterGrid::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
view->fitInView(scene->sceneRect(), Qt::KeepAspectRatio);
}
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;
}
void CenterGrid::onTileClicked(int row, int col)
{
GridItem *tile = getTile(row, col);
tile->setPixmap(m_currentSprite);
if (m_spriteType == 0)
{
m_tileIDs[row][col] = m_currentSpriteID;
if (std::find(m_doorIDList.begin(), m_doorIDList.end(), m_currentSpriteID) != m_doorIDList.end())
{
m_objectIDs[row][col] = m_currentSpriteID;
}
}
else if (m_spriteType == 1)
{
switch (m_currentSpriteID)
{
case 22:
case 23:
case 24:
case 25:
m_mobIDs[row][col] = 0;
break;
case 86:
case 87:
case 88:
case 89:
m_mobIDs[row][col] = 1;
break;
case 146:
case 147:
case 148:
case 149:
m_mobIDs[row][col] = 2;
break;
}
}
else
{
m_objectIDs[row][col] = m_currentSpriteID;
}
}
GridItem *CenterGrid::getTile(int row, int col) const
{
if (row >= 0 && row < gridItems.size() && col >= 0 && col < gridItems[row].size())
{
return gridItems[row][col];
}
return nullptr;
}
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();
for (QGraphicsItem *item : scene->items())
{
GridItem *gridItem = dynamic_cast<GridItem *>(item);
if (gridItem)
{
gridItem->reset();
}
}
switch (index)
{
case (0): {
for (QGraphicsItem *item : items)
{
GridItem *gridItem = dynamic_cast<GridItem *>(item);
if (gridItem)
{
if (gridItem->row() == 0 && gridItem->col() == 15 || gridItem->row() == 0 && gridItem->col() == 16 ||
gridItem->row() == 31 && gridItem->col() == 15 || gridItem->row() == 31 && gridItem->col() == 16 ||
gridItem->row() == 15 && gridItem->col() == 0 || gridItem->row() == 16 && gridItem->col() == 0 ||
gridItem->row() == 15 && gridItem->col() == 31 || gridItem->row() == 16 && gridItem->col() == 31)
{
gridItem->setColor(Qt::red);
}
else if (gridItem->row() < 32 && gridItem->col() < 32)
{
gridItem->setColor(Qt::white);
}
else
{
gridItem->setColor(Qt::black);
}
}
}
break;
}
case (1): {
for (QGraphicsItem *item : items)
{
GridItem *gridItem = dynamic_cast<GridItem *>(item);
if (gridItem)
{
if (gridItem->row() == 0 && gridItem->col() == 31 || gridItem->row() == 0 && gridItem->col() == 32 ||
gridItem->row() == 31 && gridItem->col() == 31 || gridItem->row() == 31 && gridItem->col() == 32 ||
gridItem->row() == 15 && gridItem->col() == 0 || gridItem->row() == 16 && gridItem->col() == 0 ||
gridItem->row() == 15 && gridItem->col() == 63 || gridItem->row() == 16 && gridItem->col() == 63)
{
gridItem->setColor(Qt::red);
}
else if (gridItem->row() < 32)
{
gridItem->setColor(Qt::white);
}
else
{
gridItem->setColor(Qt::black);
}
}
}
break;
}
case (2): {
for (QGraphicsItem *item : items)
{
GridItem *gridItem = dynamic_cast<GridItem *>(item);
if (gridItem)
{
if (gridItem->row() == 0 && gridItem->col() == 15 || gridItem->row() == 0 && gridItem->col() == 16 ||
gridItem->row() == 63 && gridItem->col() == 15 || gridItem->row() == 63 && gridItem->col() == 16 ||
gridItem->row() == 31 && gridItem->col() == 0 || gridItem->row() == 32 && gridItem->col() == 0 ||
gridItem->row() == 31 && gridItem->col() == 31 || gridItem->row() == 32 && gridItem->col() == 31)
{
gridItem->setColor(Qt::red);
}
else if (gridItem->col() < 32)
{
gridItem->setColor(Qt::white);
}
else
{
gridItem->setColor(Qt::black);
}
}
}
break;
}
case (3): {
for (QGraphicsItem *item : items)
{
GridItem *gridItem = dynamic_cast<GridItem *>(item);
if (gridItem)
{
if (gridItem->row() == 0 && gridItem->col() == 31 || gridItem->row() == 0 && gridItem->col() == 32 ||
gridItem->row() == 63 && gridItem->col() == 31 || gridItem->row() == 63 && gridItem->col() == 32 ||
gridItem->row() == 31 && gridItem->col() == 0 || gridItem->row() == 32 && gridItem->col() == 0 ||
gridItem->row() == 31 && gridItem->col() == 63 || gridItem->row() == 32 && gridItem->col() == 63)
{
gridItem->setColor(Qt::red);
}
else
{
gridItem->setColor(Qt::white);
}
}
}
break;
}
case (4): {
for (QGraphicsItem *item : items)
{
GridItem *gridItem = dynamic_cast<GridItem *>(item);
if (gridItem)
{
if (gridItem->row() == 0 && gridItem->col() == 31 || gridItem->row() == 0 && gridItem->col() == 32 ||
gridItem->row() == 63 && gridItem->col() == 31 || gridItem->row() == 63 && gridItem->col() == 32 ||
gridItem->row() == 31 && gridItem->col() == 0 || gridItem->row() == 32 && gridItem->col() == 0 ||
gridItem->row() == 31 && gridItem->col() == 63 || gridItem->row() == 32 && gridItem->col() == 63)
{
gridItem->setColor(Qt::red);
}
else if (gridItem->row() < 16 && gridItem->col() < 16 || gridItem->row() > 47 && gridItem->col() > 47 ||
gridItem->row() > 47 && gridItem->col() < 16 || gridItem->row() < 16 && gridItem->col() > 47)
{
gridItem->setColor(Qt::black);
}
else
{
gridItem->setColor(Qt::white);
}
}
}
break;
}
case (5): {
for (QGraphicsItem *item : items)
{
GridItem *gridItem = dynamic_cast<GridItem *>(item);
if (gridItem)
{
gridItem->setColor(Qt::white);
}
}
break;
}
}
}
} // namespace editor