Merge pull request #13216 from hoelzl/pr-fix-tile-origin-center

Fix displacement for centered tilemaps
This commit is contained in:
Poommetee Ketson 2017-12-01 11:46:34 +07:00 committed by GitHub
commit e89309b931
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 18 deletions

View File

@ -565,20 +565,19 @@ void TileMapEditor::_draw_cell(int p_cell, const Point2i &p_point, bool p_flip_h
}
} else if (node->get_tile_origin() == TileMap::TILE_ORIGIN_CENTER) {
rect.position += node->get_cell_size() / 2;
Vector2 s = r.size;
Size2 cell_size = node->get_cell_size();
Vector2 center = (s / 2) - tile_ofs;
rect.position += tile_ofs;
if (p_flip_h)
rect.position.x -= s.x - center.x;
rect.position.x -= cell_size.x / 2;
else
rect.position.x -= center.x;
rect.position.x += cell_size.x / 2;
if (p_flip_v)
rect.position.y -= s.y - center.y;
rect.position.y -= cell_size.y / 2;
else
rect.position.y -= center.y;
rect.position.y += cell_size.y / 2;
}
rect.position = p_xform.xform(rect.position);

View File

@ -215,6 +215,9 @@ void TileMap::_fix_cell_transform(Transform2D &xform, const Cell &p_cell, const
if (tile_origin == TILE_ORIGIN_BOTTOM_LEFT)
offset.y += cell_size.y;
else if (tile_origin == TILE_ORIGIN_CENTER) {
offset += cell_size / 2;
}
if (s.y > s.x) {
if ((p_cell.flip_h && (p_cell.flip_v || p_cell.transpose)) || (p_cell.flip_v && !p_cell.transpose))
@ -235,6 +238,8 @@ void TileMap::_fix_cell_transform(Transform2D &xform, const Cell &p_cell, const
xform.elements[1].x = -xform.elements[1].x;
if (tile_origin == TILE_ORIGIN_TOP_LEFT || tile_origin == TILE_ORIGIN_BOTTOM_LEFT)
offset.x = s.x - offset.x;
else if (tile_origin == TILE_ORIGIN_CENTER)
offset.x = s.x - offset.x / 2;
}
if (p_cell.flip_v) {
xform.elements[0].y = -xform.elements[0].y;
@ -242,10 +247,9 @@ void TileMap::_fix_cell_transform(Transform2D &xform, const Cell &p_cell, const
if (tile_origin == TILE_ORIGIN_TOP_LEFT)
offset.y = s.y - offset.y;
else if (tile_origin == TILE_ORIGIN_BOTTOM_LEFT) {
if (p_cell.transpose)
offset.y += s.y;
else
offset.y -= s.y;
offset.y += s.y;
} else if (tile_origin == TILE_ORIGIN_CENTER) {
offset.y += s.y;
}
}
xform.elements[2].x += offset.x;
@ -429,20 +433,18 @@ void TileMap::_update_dirty_quadrants() {
}
} else if (tile_origin == TILE_ORIGIN_CENTER) {
rect.position += tcenter;
Vector2 center = (s / 2) - tile_ofs;
center_ofs = tcenter - (s / 2);
rect.position += tile_ofs;
if (c.flip_h)
rect.position.x -= s.x - center.x;
rect.position.x -= cell_size.x / 2;
else
rect.position.x -= center.x;
rect.position.x += cell_size.x / 2;
if (c.flip_v)
rect.position.y -= s.y - center.y;
rect.position.y -= cell_size.y / 2;
else
rect.position.y -= center.y;
rect.position.y += cell_size.y / 2;
}
Ref<Texture> normal_map = tile_set->tile_get_normal_map(c.id);