Fix displacement for centered tilemaps

- Fixes tile and collision placement for tilemaps with
  `tile_origin` set to `TILE_ORIGIN_CENTER`.
- Also fixes a bug in the offset computation for collision shapes
  with `flip_v` flag set to true if `tile_origin` is
  `TILE_ORIGIN_BOTTOM_LEFT`.
This commit is contained in:
Matthias Hoelzl 2017-11-20 02:56:10 +01:00
parent d992eb1b25
commit 2beadf7ac0
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);