|
@@ -676,12 +676,9 @@ void TileMapEditor::_canvas_draw() {
|
|
Ref<Texture> t = ts->tile_get_texture(st);
|
|
Ref<Texture> t = ts->tile_get_texture(st);
|
|
if (t.is_valid()) {
|
|
if (t.is_valid()) {
|
|
Vector2 from = node->map_to_world(over_tile)+node->get_cell_draw_offset();
|
|
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);
|
|
Rect2 r = ts->tile_get_region(st);
|
|
Size2 sc = xform.get_scale();
|
|
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;
|
|
Rect2 rect;
|
|
if (r==Rect2()) {
|
|
if (r==Rect2()) {
|
|
@@ -691,23 +688,47 @@ void TileMapEditor::_canvas_draw() {
|
|
rect=Rect2(from,r.get_size());
|
|
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) {
|
|
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) {
|
|
} else if (node->get_tile_origin()==TileMap::TILE_ORIGIN_CENTER) {
|
|
rect.pos+=node->get_cell_size()/2;
|
|
rect.pos+=node->get_cell_size()/2;
|
|
Vector2 s = r.size;
|
|
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;
|
|
rect.pos.x-=s.x-center.x;
|
|
else
|
|
else
|
|
rect.pos.x-=center.x;
|
|
rect.pos.x-=center.x;
|
|
|
|
|
|
- if (mirror_y->is_pressed())
|
|
|
|
|
|
+ if (flip_v)
|
|
rect.pos.y-=s.y-center.y;
|
|
rect.pos.y-=s.y-center.y;
|
|
else
|
|
else
|
|
rect.pos.y-=center.y;
|
|
rect.pos.y-=center.y;
|
|
@@ -718,10 +739,10 @@ void TileMapEditor::_canvas_draw() {
|
|
|
|
|
|
if (r==Rect2()) {
|
|
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 {
|
|
} 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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|