diff options
author | Rémi Verschelde <remi@verschelde.fr> | 2016-01-15 16:53:16 +0100 |
---|---|---|
committer | Rémi Verschelde <remi@verschelde.fr> | 2016-01-15 16:53:16 +0100 |
commit | 3c6dd5749d445f082fc925a34cc0a26f8d342304 (patch) | |
tree | 6194e81536952c6925d1630e49c967863b4f3ea1 /tools/editor | |
parent | d64a9526cd17f2d506cf9e6fb9c68a8636c7da07 (diff) | |
parent | a9dbe83155ec707f87f5eb6fae782e4947d84aa5 (diff) |
Merge pull request #3204 from neikeq/fix_3153
Consider texture offset when rotating tiles
Diffstat (limited to 'tools/editor')
-rw-r--r-- | tools/editor/plugins/tile_map_editor_plugin.cpp | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/tools/editor/plugins/tile_map_editor_plugin.cpp b/tools/editor/plugins/tile_map_editor_plugin.cpp index b2562eafe1..29326a2222 100644 --- a/tools/editor/plugins/tile_map_editor_plugin.cpp +++ b/tools/editor/plugins/tile_map_editor_plugin.cpp @@ -676,12 +676,9 @@ void TileMapEditor::_canvas_draw() { Ref<Texture> t = ts->tile_get_texture(st); if (t.is_valid()) { Vector2 from = node->map_to_world(over_tile)+node->get_cell_draw_offset(); + Vector2 tile_ofs = ts->tile_get_texture_offset(st); Rect2 r = ts->tile_get_region(st); Size2 sc = xform.get_scale(); - if (mirror_x->is_pressed()) - sc.x*=-1.0; - if (mirror_y->is_pressed()) - sc.y*=-1.0; Rect2 rect; if (r==Rect2()) { @@ -691,23 +688,47 @@ void TileMapEditor::_canvas_draw() { rect=Rect2(from,r.get_size()); } + bool transp = transpose->is_pressed(); + bool flip_h = mirror_x->is_pressed(); + bool flip_v = mirror_y->is_pressed(); + + if (rect.size.y > rect.size.x) { + if ((flip_h && (flip_v || transp)) || (flip_v && !transp)) + tile_ofs.y += rect.size.y - rect.size.x; + } else if (rect.size.y < rect.size.x) { + if ((flip_v && (flip_h || transp)) || (flip_h && !transp)) + tile_ofs.x += rect.size.x - rect.size.y; + } + + if (transp) { + SWAP(tile_ofs.x, tile_ofs.y); + } + + if (flip_h) { + sc.x*=-1.0; + tile_ofs.x*=-1.0; + } + if (flip_v) { + sc.y*=-1.0; + tile_ofs.y*=-1.0; + } if (node->get_tile_origin()==TileMap::TILE_ORIGIN_TOP_LEFT) { - rect.pos+=ts->tile_get_texture_offset(st); + rect.pos+=tile_ofs; } else if (node->get_tile_origin()==TileMap::TILE_ORIGIN_CENTER) { rect.pos+=node->get_cell_size()/2; Vector2 s = r.size; - Vector2 center = (s/2) - ts->tile_get_texture_offset(st); + Vector2 center = (s/2) - tile_ofs; - if (mirror_x->is_pressed()) + if (flip_h) rect.pos.x-=s.x-center.x; else rect.pos.x-=center.x; - if (mirror_y->is_pressed()) + if (flip_v) rect.pos.y-=s.y-center.y; else rect.pos.y-=center.y; @@ -718,10 +739,10 @@ void TileMapEditor::_canvas_draw() { if (r==Rect2()) { - canvas_item_editor->draw_texture_rect(t,rect,false,Color(1,1,1,0.5),transpose->is_pressed()); + canvas_item_editor->draw_texture_rect(t,rect,false,Color(1,1,1,0.5),transp); } else { - canvas_item_editor->draw_texture_rect_region(t,rect,r,Color(1,1,1,0.5),transpose->is_pressed()); + canvas_item_editor->draw_texture_rect_region(t,rect,r,Color(1,1,1,0.5),transp); } } } |