mirror of
https://github.com/huderlem/porymap.git
synced 2026-09-26 09:56:32 -05:00
Implement proof of concept for scripting capabilities
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user