TileMap: Properly flip/rotate tiles with non-square region
This commit is contained in:
parent
e22e0cecf7
commit
a9dbe83155
2 changed files with 45 additions and 16 deletions
|
|
@ -223,6 +223,14 @@ void TileMap::_fix_cell_transform(Matrix32& xform,const Cell& p_cell, const Vect
|
|||
Size2 s=p_sc;
|
||||
Vector2 offset = p_offset;
|
||||
|
||||
if (s.y > s.x) {
|
||||
if ((p_cell.flip_h && (p_cell.flip_v || p_cell.transpose)) || (p_cell.flip_v && !p_cell.transpose))
|
||||
offset.y += s.y - s.x;
|
||||
} else if (s.y < s.x) {
|
||||
if ((p_cell.flip_v && (p_cell.flip_h || p_cell.transpose)) || (p_cell.flip_h && !p_cell.transpose))
|
||||
offset.x += s.x - s.y;
|
||||
}
|
||||
|
||||
if (p_cell.transpose) {
|
||||
SWAP(xform.elements[0].x, xform.elements[0].y);
|
||||
SWAP(xform.elements[1].x, xform.elements[1].y);
|
||||
|
|
@ -376,6 +384,14 @@ void TileMap::_update_dirty_quadrants() {
|
|||
rect.pos=offset.floor();
|
||||
rect.size=s;
|
||||
|
||||
if (rect.size.y > rect.size.x) {
|
||||
if ((c.flip_h && (c.flip_v || c.transpose)) || (c.flip_v && !c.transpose))
|
||||
tile_ofs.y += rect.size.y - rect.size.x;
|
||||
} else if (rect.size.y < rect.size.x) {
|
||||
if ((c.flip_v && (c.flip_h || c.transpose)) || (c.flip_h && !c.transpose))
|
||||
tile_ofs.x += rect.size.x - rect.size.y;
|
||||
}
|
||||
|
||||
/* rect.size.x+=fp_adjust;
|
||||
rect.size.y+=fp_adjust;*/
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue