diff --git a/include/core/blockdata.h b/include/core/blockdata.h index 0bb6a7b6..35c071fb 100644 --- a/include/core/blockdata.h +++ b/include/core/blockdata.h @@ -5,6 +5,7 @@ #include #include +#include class Blockdata : public QObject { @@ -16,7 +17,7 @@ public: } public: - QList *blocks = nullptr; + QVector *blocks = nullptr; void addBlock(uint16_t); void addBlock(Block); QByteArray serialize(); diff --git a/src/core/block.cpp b/src/core/block.cpp index c064399a..bc65c923 100644 --- a/src/core/block.cpp +++ b/src/core/block.cpp @@ -1,6 +1,6 @@ #include "block.h" -Block::Block() { +Block::Block() : tile(0), collision(0), elevation(0) { } Block::Block(uint16_t word) diff --git a/src/core/blockdata.cpp b/src/core/blockdata.cpp index 34aff306..77239add 100644 --- a/src/core/blockdata.cpp +++ b/src/core/blockdata.cpp @@ -2,7 +2,7 @@ Blockdata::Blockdata(QObject *parent) : QObject(parent) { - blocks = new QList; + blocks = new QVector; } void Blockdata::addBlock(uint16_t word) { diff --git a/src/project.cpp b/src/project.cpp index 88c97c19..34be984e 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -775,6 +775,15 @@ void Project::loadBlockdata(Map* map) { QString path = QString("%1/%2").arg(root).arg(map->layout->blockdata_path); map->layout->blockdata = readBlockdata(path); + + if (map->layout->blockdata->blocks->count() != map->getWidth() * map->getHeight()) { + logWarn(QString("Layout blockdata length %1 does not match dimensions %2x%3 (should be %4). Resizing blockdata.") + .arg(map->layout->blockdata->blocks->count()) + .arg(map->getWidth()) + .arg(map->getHeight()) + .arg(map->getWidth() * map->getHeight())); + map->layout->blockdata->blocks->resize(map->getWidth() * map->getHeight()); + } } void Project::setNewMapBlockdata(Map* map) { diff --git a/src/ui/bordermetatilespixmapitem.cpp b/src/ui/bordermetatilespixmapitem.cpp index 4886e42e..2093eabe 100644 --- a/src/ui/bordermetatilespixmapitem.cpp +++ b/src/ui/bordermetatilespixmapitem.cpp @@ -24,7 +24,7 @@ void BorderMetatilesPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event) void BorderMetatilesPixmapItem::draw() { QImage image(32, 32, QImage::Format_RGBA8888); QPainter painter(&image); - QList *blocks = map->layout->border->blocks; + QVector *blocks = map->layout->border->blocks; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) {