Skip to content
Snippets Groups Projects
Select Git revision
  • c435df3534641ba6591567c303a9a1ae61762c61
  • master default
  • 1.1
  • 1.0
4 results

options.h

Blame
  • 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