Tweak grid rendering

This commit is contained in:
Nikita Lisitsa 2024-08-19 12:08:56 +03:00
parent a7a002196c
commit dacf1ca095

View file

@ -459,16 +459,35 @@ namespace gmtk
return result;
}
void draw_grid(geom::box<float, 2> const & box, float view_level, gfx::painter & painter)
void draw_grid(geom::box<float, 2> const & box, float view_level, gfx::painter & painter, bool solid = false)
{
float const grid_width = 0.1f * std::min(box[0].length() / 3.f, std::pow(3.f, -1.f - view_level));
float const grid_width = 0.05f * std::min(box[0].length() / 3.f, std::pow(3.f, -1.f - view_level));
auto color = gfx::black.as_color_rgba();
gfx::color_rgba color = gfx::black;
if (!solid)
color = gfx::light(color, 0.75f);
for (int x = 0; x <= 3; ++x)
{
painter.line(box.corner(x / 3.f, 0.f), box.corner(x / 3.f, 1.f), grid_width, color, true);
painter.line(box.corner(0.f, x / 3.f), box.corner(1.f, x / 3.f), grid_width, color, true);
if (solid)
{
painter.line(box.corner(x / 3.f, 0.f), box.corner(x / 3.f, 1.f), grid_width, color, true);
painter.line(box.corner(0.f, x / 3.f), box.corner(1.f, x / 3.f), grid_width, color, true);
}
else
{
for (int i = 0; i < 7; ++i)
{
float s = (i - 1.f / 3.f) / 6.f;
float t = (i + 1.f / 3.f) / 6.f;
s = std::max(s, 0.f);
t = std::min(t, 1.f);
painter.line(box.corner(x / 3.f, s), box.corner(x / 3.f, t), grid_width, color, true);
painter.line(box.corner(s, x / 3.f), box.corner(t, x / 3.f), grid_width, color, true);
}
}
}
}
@ -569,7 +588,7 @@ namespace gmtk
draw_structure(bbox, transformer{transformer_type::factory}, painter);
break;
case card_type::zoomer:
draw_grid(bbox, -1.f, painter);
draw_grid(bbox, -1.f, painter, true);
break;
}
}
@ -654,15 +673,34 @@ namespace gmtk
});
}
void draw_selection(location const & l, gfx::painter & painter, gfx::color_rgba const & color)
void draw_selection(location const & l, gfx::painter & painter, gfx::color_rgba const & color, bool solid = false)
{
auto b = l.bbox();
float s = std::pow(3.f, -l.level) * 0.1f;
float w = std::pow(3.f, -l.level) * 0.05f;
painter.line(b.corner(0, 0), b.corner(1, 0), s, color, true);
painter.line(b.corner(1, 0), b.corner(1, 1), s, color, true);
painter.line(b.corner(1, 1), b.corner(0, 1), s, color, true);
painter.line(b.corner(0, 1), b.corner(0, 0), s, color, true);
if (solid)
{
painter.line(b.corner(0, 0), b.corner(1, 0), w, color, true);
painter.line(b.corner(1, 0), b.corner(1, 1), w, color, true);
painter.line(b.corner(1, 1), b.corner(0, 1), w, color, true);
painter.line(b.corner(0, 1), b.corner(0, 0), w, color, true);
}
else
{
for (int i = 0; i <= 2; ++i)
{
float s = (i - 1.f / 3.f) / 2.f;
float t = (i + 1.f / 3.f) / 2.f;
s = std::max(s, 0.f);
t = std::min(t, 1.f);
painter.line(b.corner(s, 0), b.corner(t, 0), w, color, true);
painter.line(b.corner(s, 1), b.corner(t, 1), w, color, true);
painter.line(b.corner(0, s), b.corner(0, t), w, color, true);
painter.line(b.corner(1, s), b.corner(1, t), w, color, true);
}
}
}
std::uint64_t make_seed()
@ -1227,10 +1265,10 @@ namespace gmtk
draw(map_, view_level, painter_);
if (selected_)
draw_selection(*selected_, painter_, {255, 0, 0, 255});
draw_selection(*selected_, painter_, {255, 128, 128, 255});
if (belt_start_)
draw_selection(*belt_start_, painter_, {255, 255, 0, 255});
draw_selection(*belt_start_, painter_, {255, 191, 128, 255});
{
float w = (view_box_[0].length() - view_box_[1].length()) / 2.f;