Fix crash if layout blockdata size mismatches layout dimensions
This commit is contained in:
parent
fd58eb9dab
commit
aa0709243d
5 changed files with 14 additions and 4 deletions
|
@ -5,6 +5,7 @@
|
|||
|
||||
#include <QObject>
|
||||
#include <QByteArray>
|
||||
#include <QVector>
|
||||
|
||||
class Blockdata : public QObject
|
||||
{
|
||||
|
@ -16,7 +17,7 @@ public:
|
|||
}
|
||||
|
||||
public:
|
||||
QList<Block> *blocks = nullptr;
|
||||
QVector<Block> *blocks = nullptr;
|
||||
void addBlock(uint16_t);
|
||||
void addBlock(Block);
|
||||
QByteArray serialize();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include "block.h"
|
||||
|
||||
Block::Block() {
|
||||
Block::Block() : tile(0), collision(0), elevation(0) {
|
||||
}
|
||||
|
||||
Block::Block(uint16_t word)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
Blockdata::Blockdata(QObject *parent) : QObject(parent)
|
||||
{
|
||||
blocks = new QList<Block>;
|
||||
blocks = new QVector<Block>;
|
||||
}
|
||||
|
||||
void Blockdata::addBlock(uint16_t word) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -24,7 +24,7 @@ void BorderMetatilesPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
|||
void BorderMetatilesPixmapItem::draw() {
|
||||
QImage image(32, 32, QImage::Format_RGBA8888);
|
||||
QPainter painter(&image);
|
||||
QList<Block> *blocks = map->layout->border->blocks;
|
||||
QVector<Block> *blocks = map->layout->border->blocks;
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
for (int j = 0; j < 2; j++) {
|
||||
|
|
Loading…
Reference in a new issue