Magic fill collision and elevation
This commit is contained in:
parent
384f618bca
commit
6557eaf5cf
5 changed files with 35 additions and 1 deletions
|
@ -68,6 +68,7 @@ public:
|
||||||
void _setBlock(int x, int y, Block block);
|
void _setBlock(int x, int y, Block block);
|
||||||
void floodFillCollisionElevation(int x, int y, uint16_t collision, uint16_t elevation);
|
void floodFillCollisionElevation(int x, int y, uint16_t collision, uint16_t elevation);
|
||||||
void _floodFillCollisionElevation(int x, int y, uint16_t collision, uint16_t elevation);
|
void _floodFillCollisionElevation(int x, int y, uint16_t collision, uint16_t elevation);
|
||||||
|
void magicFillCollisionElevation(int x, int y, uint16_t collision, uint16_t elevation);
|
||||||
void undo();
|
void undo();
|
||||||
void redo();
|
void redo();
|
||||||
void commit();
|
void commit();
|
||||||
|
|
|
@ -18,6 +18,7 @@ public:
|
||||||
void updateMovementPermissionSelection(QGraphicsSceneMouseEvent *event);
|
void updateMovementPermissionSelection(QGraphicsSceneMouseEvent *event);
|
||||||
virtual void paint(QGraphicsSceneMouseEvent*);
|
virtual void paint(QGraphicsSceneMouseEvent*);
|
||||||
virtual void floodFill(QGraphicsSceneMouseEvent*);
|
virtual void floodFill(QGraphicsSceneMouseEvent*);
|
||||||
|
virtual void magicFill(QGraphicsSceneMouseEvent*);
|
||||||
virtual void pick(QGraphicsSceneMouseEvent*);
|
virtual void pick(QGraphicsSceneMouseEvent*);
|
||||||
virtual void draw(bool ignoreCache = false);
|
virtual void draw(bool ignoreCache = false);
|
||||||
|
|
||||||
|
|
|
@ -412,6 +412,26 @@ void Map::floodFillCollisionElevation(int x, int y, uint16_t collision, uint16_t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Map::magicFillCollisionElevation(int initialX, int initialY, uint16_t collision, uint16_t elevation) {
|
||||||
|
Block *block = getBlock(initialX, initialY);
|
||||||
|
if (block && (block->collision != collision || block->elevation != elevation)) {
|
||||||
|
uint old_coll = block->collision;
|
||||||
|
uint old_elev = block->elevation;
|
||||||
|
|
||||||
|
for (int y = 0; y < getHeight(); y++) {
|
||||||
|
for (int x = 0; x < getWidth(); x++) {
|
||||||
|
block = getBlock(x, y);
|
||||||
|
if (block && block->collision == old_coll && block->elevation == old_elev) {
|
||||||
|
block->collision = collision;
|
||||||
|
block->elevation = elevation;
|
||||||
|
_setBlock(x, y, *block);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
commit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QList<Event *> Map::getAllEvents() {
|
QList<Event *> Map::getAllEvents() {
|
||||||
QList<Event*> all;
|
QList<Event*> all;
|
||||||
for (QList<Event*> list : events.values()) {
|
for (QList<Event*> list : events.values()) {
|
||||||
|
|
|
@ -60,6 +60,18 @@ void CollisionPixmapItem::floodFill(QGraphicsSceneMouseEvent *event) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CollisionPixmapItem::magicFill(QGraphicsSceneMouseEvent *event) {
|
||||||
|
if (map) {
|
||||||
|
QPointF pos = event->pos();
|
||||||
|
int x = static_cast<int>(pos.x()) / 16;
|
||||||
|
int y = static_cast<int>(pos.y()) / 16;
|
||||||
|
uint16_t collision = this->movementPermissionsSelector->getSelectedCollision();
|
||||||
|
uint16_t elevation = this->movementPermissionsSelector->getSelectedElevation();
|
||||||
|
map->magicFillCollisionElevation(x, y, collision, elevation);
|
||||||
|
draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CollisionPixmapItem::pick(QGraphicsSceneMouseEvent *event) {
|
void CollisionPixmapItem::pick(QGraphicsSceneMouseEvent *event) {
|
||||||
QPointF pos = event->pos();
|
QPointF pos = event->pos();
|
||||||
int x = static_cast<int>(pos.x()) / 16;
|
int x = static_cast<int>(pos.x()) / 16;
|
||||||
|
|
|
@ -266,7 +266,7 @@ void MapPixmapItem::magicFill(QGraphicsSceneMouseEvent *event) {
|
||||||
|
|
||||||
for (int y = 0; y < map->getHeight(); y++) {
|
for (int y = 0; y < map->getHeight(); y++) {
|
||||||
for (int x = 0; x < map->getWidth(); x++) {
|
for (int x = 0; x < map->getWidth(); x++) {
|
||||||
Block *block = map->getBlock(x, y);
|
block = map->getBlock(x, y);
|
||||||
if (block && block->tile == tile) {
|
if (block && block->tile == tile) {
|
||||||
int xDiff = x - initialX;
|
int xDiff = x - initialX;
|
||||||
int yDiff = y - initialY;
|
int yDiff = y - initialY;
|
||||||
|
|
Loading…
Reference in a new issue