Implement proof of concept for scripting capabilities

This commit is contained in:
Marcus Huderle
2020-04-26 19:38:20 -05:00
parent 37ab54019b
commit 267cd5e2cb
12 changed files with 154 additions and 25 deletions

View File

@@ -3,6 +3,12 @@
Block::Block() : tile(0), collision(0), elevation(0) {
}
Block::Block(uint16_t tile, uint16_t collision, uint16_t elevation) {
this->tile = tile;
this->collision = collision;
this->elevation = elevation;
}
Block::Block(uint16_t word)
{
tile = word & 0x3ff;

View File

@@ -2,6 +2,7 @@
#include "historyitem.h"
#include "map.h"
#include "imageproviders.h"
#include "scripting.h"
#include <QTime>
#include <QPainter>
@@ -363,10 +364,14 @@ Block* Map::getBlock(int x, int y) {
return nullptr;
}
void Map::_setBlock(int x, int y, Block block) {
void Map::setBlock(int x, int y, Block block, bool invokeCallback) {
int i = y * getWidth() + x;
if (layout->blockdata && layout->blockdata->blocks) {
if (layout->blockdata && layout->blockdata->blocks && i < layout->blockdata->blocks->size()) {
Block prevBlock = layout->blockdata->blocks->value(i);
layout->blockdata->blocks->replace(i, block);
if (invokeCallback) {
Scripting::cb_MetatileChanged(x, y, prevBlock, block);
}
}
}
@@ -390,7 +395,7 @@ void Map::_floodFillCollisionElevation(int x, int y, uint16_t collision, uint16_
block->collision = collision;
block->elevation = elevation;
_setBlock(x, y, *block);
setBlock(x, y, *block);
if ((block = getBlock(x + 1, y)) && block->collision == old_coll && block->elevation == old_elev) {
todo.append(QPoint(x + 1, y));
}
@@ -495,14 +500,6 @@ void Map::commit() {
}
}
void Map::setBlock(int x, int y, Block block) {
Block *old_block = getBlock(x, y);
if (old_block && (*old_block) != block) {
_setBlock(x, y, block);
commit();
}
}
void Map::floodFillCollisionElevation(int x, int y, uint16_t collision, uint16_t elevation) {
Block *block = getBlock(x, y);
if (block && (block->collision != collision || block->elevation != elevation)) {
@@ -523,7 +520,7 @@ void Map::magicFillCollisionElevation(int initialX, int initialY, uint16_t colli
if (block && block->collision == old_coll && block->elevation == old_elev) {
block->collision = collision;
block->elevation = elevation;
_setBlock(x, y, *block);
setBlock(x, y, *block);
}
}
}