You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-18 14:21:41 +00:00
Fix missing grid lines when TileMap has half offset
This commit is contained in:
@@ -832,9 +832,12 @@ void TileMapEditor::_draw_grid(Control *p_viewport, const Rect2 &p_rect) const {
|
|||||||
const Size2 screen_size = p_viewport->get_size();
|
const Size2 screen_size = p_viewport->get_size();
|
||||||
Rect2 rect;
|
Rect2 rect;
|
||||||
rect.position = node->world_to_map(xform_inv.xform(Vector2()));
|
rect.position = node->world_to_map(xform_inv.xform(Vector2()));
|
||||||
rect.expand_to(node->world_to_map(xform_inv.xform(Vector2(0, screen_size.height))));
|
rect.expand_to(node->world_to_map(xform_inv.xform(Vector2(0, screen_size.height))) + Vector2(0, 1));
|
||||||
rect.expand_to(node->world_to_map(xform_inv.xform(Vector2(screen_size.width, 0))));
|
rect.expand_to(node->world_to_map(xform_inv.xform(Vector2(screen_size.width, 0))) + Vector2(1, 0));
|
||||||
rect.expand_to(node->world_to_map(xform_inv.xform(screen_size)));
|
rect.expand_to(node->world_to_map(xform_inv.xform(screen_size)) + Vector2(1, 1));
|
||||||
|
if (node->get_half_offset() != TileMap::HALF_OFFSET_DISABLED) {
|
||||||
|
rect.grow_by(1); // So it won't matter whether corners are on an odd or even row/column.
|
||||||
|
}
|
||||||
clipped = rect.clip(si);
|
clipped = rect.clip(si);
|
||||||
}
|
}
|
||||||
clipped.position -= si.position; // Relative to the fade rect, in grid unit.
|
clipped.position -= si.position; // Relative to the fade rect, in grid unit.
|
||||||
@@ -878,15 +881,16 @@ void TileMapEditor::_draw_grid(Control *p_viewport, const Rect2 &p_rect) const {
|
|||||||
const Color color = (x + si.position.x == 0) ? axis_color : grid_color;
|
const Color color = (x + si.position.x == 0) ? axis_color : grid_color;
|
||||||
const float line_opacity = _lerp_fade(si.size.x, fade, x);
|
const float line_opacity = _lerp_fade(si.size.x, fade, x);
|
||||||
|
|
||||||
for (int y = clipped.position.y; y < cell_count; y++) {
|
for (int y = clipped.position.y; y < clipped_end.y; y++) {
|
||||||
Vector2 ofs;
|
Vector2 ofs;
|
||||||
if (ABS(si.position.y + y) & 1) {
|
if (ABS(si.position.y + y) & 1) {
|
||||||
ofs = cell_xf[0] * half_offset;
|
ofs = cell_xf[0] * half_offset;
|
||||||
}
|
}
|
||||||
points.write[y * 2 + 0] = xform.xform(ofs + node->map_to_world(si.position + Vector2(x, y), true));
|
const int index = (y - clipped.position.y) * 2;
|
||||||
points.write[y * 2 + 1] = xform.xform(ofs + node->map_to_world(si.position + Vector2(x, y + 1), true));
|
points.write[index + 0] = xform.xform(ofs + node->map_to_world(si.position + Vector2(x, y), true));
|
||||||
colors.write[y * 2 + 0] = Color(color.r, color.g, color.b, color.a * line_opacity * _lerp_fade(si.size.y, fade, y));
|
points.write[index + 1] = xform.xform(ofs + node->map_to_world(si.position + Vector2(x, y + 1), true));
|
||||||
colors.write[y * 2 + 1] = Color(color.r, color.g, color.b, color.a * line_opacity * _lerp_fade(si.size.y, fade, y + 1));
|
colors.write[index + 0] = Color(color.r, color.g, color.b, color.a * line_opacity * _lerp_fade(si.size.y, fade, y));
|
||||||
|
colors.write[index + 1] = Color(color.r, color.g, color.b, color.a * line_opacity * _lerp_fade(si.size.y, fade, y + 1));
|
||||||
}
|
}
|
||||||
p_viewport->draw_multiline_colors(points, colors, 1);
|
p_viewport->draw_multiline_colors(points, colors, 1);
|
||||||
}
|
}
|
||||||
@@ -923,15 +927,16 @@ void TileMapEditor::_draw_grid(Control *p_viewport, const Rect2 &p_rect) const {
|
|||||||
const Color color = (y + si.position.y == 0) ? axis_color : grid_color;
|
const Color color = (y + si.position.y == 0) ? axis_color : grid_color;
|
||||||
const float line_opacity = _lerp_fade(si.size.y, fade, y);
|
const float line_opacity = _lerp_fade(si.size.y, fade, y);
|
||||||
|
|
||||||
for (int x = clipped.position.x; x < cell_count; x++) {
|
for (int x = clipped.position.x; x < clipped_end.x; x++) {
|
||||||
Vector2 ofs;
|
Vector2 ofs;
|
||||||
if (ABS(si.position.x + x) & 1) {
|
if (ABS(si.position.x + x) & 1) {
|
||||||
ofs = cell_xf[1] * half_offset;
|
ofs = cell_xf[1] * half_offset;
|
||||||
}
|
}
|
||||||
points.write[x * 2 + 0] = xform.xform(ofs + node->map_to_world(si.position + Vector2(x, y), true));
|
const int index = (x - clipped.position.x) * 2;
|
||||||
points.write[x * 2 + 1] = xform.xform(ofs + node->map_to_world(si.position + Vector2(x + 1, y), true));
|
points.write[index + 0] = xform.xform(ofs + node->map_to_world(si.position + Vector2(x, y), true));
|
||||||
colors.write[x * 2 + 0] = Color(color.r, color.g, color.b, color.a * line_opacity * _lerp_fade(si.size.x, fade, x));
|
points.write[index + 1] = xform.xform(ofs + node->map_to_world(si.position + Vector2(x + 1, y), true));
|
||||||
colors.write[x * 2 + 1] = Color(color.r, color.g, color.b, color.a * line_opacity * _lerp_fade(si.size.x, fade, x + 1));
|
colors.write[index + 0] = Color(color.r, color.g, color.b, color.a * line_opacity * _lerp_fade(si.size.x, fade, x));
|
||||||
|
colors.write[index + 1] = Color(color.r, color.g, color.b, color.a * line_opacity * _lerp_fade(si.size.x, fade, x + 1));
|
||||||
}
|
}
|
||||||
p_viewport->draw_multiline_colors(points, colors, 1);
|
p_viewport->draw_multiline_colors(points, colors, 1);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user