Add recipe printing
This commit is contained in:
parent
69b5bed15b
commit
4506865512
1 changed files with 112 additions and 48 deletions
|
|
@ -60,8 +60,8 @@ namespace gmtk
|
|||
case resource_type::copper_plate: return color_of(resource_type::copper_ore);
|
||||
case resource_type::iron_gear: return color_of(resource_type::iron_ore);
|
||||
case resource_type::copper_wire: return color_of(resource_type::copper_ore);
|
||||
case resource_type::inserter: return {224, 160, 64, 255};
|
||||
case resource_type::electric_circuit: return {64, 160, 0, 255};
|
||||
case resource_type::inserter: return {224, 192, 64, 255};
|
||||
case resource_type::electric_circuit: return {64, 192, 64, 255};
|
||||
case resource_type::red_science_pack: return {192, 64, 64, 255};
|
||||
case resource_type::green_science_pack: return {64, 192, 64, 255};
|
||||
}
|
||||
|
|
@ -93,7 +93,7 @@ namespace gmtk
|
|||
{{resource_type::copper_plate, resource_type::stone_brick}, resource_type::copper_wire},
|
||||
{{resource_type::iron_plate, resource_type::copper_wire}, resource_type::electric_circuit},
|
||||
{{resource_type::iron_gear, resource_type::copper_plate}, resource_type::inserter},
|
||||
{{resource_type::electric_circuit, resource_type::inserter}, resource_type::green_science_pack},
|
||||
{{resource_type::electric_circuit, resource_type::inserter, resource_type::red_science_pack}, resource_type::green_science_pack},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
@ -453,6 +453,55 @@ namespace gmtk
|
|||
}
|
||||
}
|
||||
|
||||
void draw_item(resource_type type, geom::point<float, 2> const & pos, float scale, gfx::painter & painter)
|
||||
{
|
||||
auto color = color_of(type);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case resource_type::coal:
|
||||
case resource_type::stone:
|
||||
case resource_type::iron_ore:
|
||||
case resource_type::copper_ore:
|
||||
painter.circle(pos, 0.075f * scale, {0, 0, 0, 255});
|
||||
painter.circle(pos, 0.05f * scale, color);
|
||||
break;
|
||||
case resource_type::stone_brick:
|
||||
case resource_type::iron_plate:
|
||||
case resource_type::copper_plate:
|
||||
{
|
||||
auto box = geom::expand(geom::box<float, 2>::singleton(pos), 0.075f * scale);
|
||||
painter.rect(box, {0, 0, 0, 255});
|
||||
box = geom::shrink(box, 0.025f * scale);
|
||||
painter.rect(box, color);
|
||||
}
|
||||
break;
|
||||
case resource_type::iron_gear:
|
||||
case resource_type::copper_wire:
|
||||
case resource_type::inserter:
|
||||
case resource_type::electric_circuit:
|
||||
{
|
||||
bool first = true;
|
||||
for (float radius : {0.075f * scale, 0.05f * scale})
|
||||
{
|
||||
for (int i = 0; i < 6; ++i)
|
||||
painter.triangle(pos, pos + geom::direction(geom::rad(i * 60.f)) * radius, pos + geom::direction(geom::rad((i + 1) * 60.f)) * radius, first ? gfx::black : color);
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case resource_type::red_science_pack:
|
||||
case resource_type::green_science_pack:
|
||||
{
|
||||
auto box = geom::expand(geom::box<float, 2>::singleton(pos), 0.075f * scale);
|
||||
painter.triangle(box.corner(0, 0), box.corner(1, 0), box.corner(0.5f, 1), {0, 0, 0, 255});
|
||||
box = geom::shrink(box, 0.025f * scale);
|
||||
painter.triangle(box.corner(0, 0), box.corner(1, 0), box.corner(0.5f, 1), color);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void draw(map & map, float view_level, gfx::painter & painter)
|
||||
{
|
||||
draw_grid({-1, {0, 0}}, view_level, painter, false);
|
||||
|
|
@ -576,51 +625,7 @@ namespace gmtk
|
|||
}
|
||||
scale *= 3.f;
|
||||
|
||||
auto color = color_of(i.type);
|
||||
|
||||
switch (i.type)
|
||||
{
|
||||
case resource_type::coal:
|
||||
case resource_type::stone:
|
||||
case resource_type::iron_ore:
|
||||
case resource_type::copper_ore:
|
||||
painter.circle(pos, 0.075f * scale, {0, 0, 0, 255});
|
||||
painter.circle(pos, 0.05f * scale, color);
|
||||
break;
|
||||
case resource_type::stone_brick:
|
||||
case resource_type::iron_plate:
|
||||
case resource_type::copper_plate:
|
||||
{
|
||||
auto box = geom::expand(geom::box<float, 2>::singleton(pos), 0.075f * scale);
|
||||
painter.rect(box, {0, 0, 0, 255});
|
||||
box = geom::shrink(box, 0.025f * scale);
|
||||
painter.rect(box, color);
|
||||
}
|
||||
break;
|
||||
case resource_type::iron_gear:
|
||||
case resource_type::copper_wire:
|
||||
case resource_type::inserter:
|
||||
case resource_type::electric_circuit:
|
||||
{
|
||||
bool first = true;
|
||||
for (float radius : {0.075f * scale, 0.05f * scale})
|
||||
{
|
||||
for (int i = 0; i < 6; ++i)
|
||||
painter.triangle(pos, pos + geom::direction(geom::rad(i * 60.f)) * radius, pos + geom::direction(geom::rad((i + 1) * 60.f)) * radius, first ? gfx::black : color);
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case resource_type::red_science_pack:
|
||||
case resource_type::green_science_pack:
|
||||
{
|
||||
auto box = geom::expand(geom::box<float, 2>::singleton(pos), 0.075f * scale);
|
||||
painter.triangle(box.corner(0, 0), box.corner(1, 0), box.corner(0.5f, 1), {0, 0, 0, 255});
|
||||
box = geom::shrink(box, 0.025f * scale);
|
||||
painter.triangle(box.corner(0, 0), box.corner(1, 0), box.corner(0.5f, 1), color);
|
||||
}
|
||||
break;
|
||||
}
|
||||
draw_item(i.type, pos, scale, painter);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -1108,6 +1113,65 @@ namespace gmtk
|
|||
if (belt_start_)
|
||||
draw_selection(*belt_start_, painter_, {255, 255, 0, 255});
|
||||
|
||||
{
|
||||
float w = (view_box_[0].length() - view_box_[1].length()) / 2.f;
|
||||
geom::vector t{view_box_[1].length() / 5.f, 0.f};
|
||||
geom::vector d{w - t[0], 0.f};
|
||||
geom::vector n{w, 0.f};
|
||||
|
||||
auto p00 = view_box_.corner(0, 0);
|
||||
auto p01 = view_box_.corner(0, 1);
|
||||
auto p10 = view_box_.corner(1, 0);
|
||||
auto p11 = view_box_.corner(1, 1);
|
||||
|
||||
gfx::color_rgba c1{255, 255, 255, 255};
|
||||
gfx::color_rgba c0{255, 255, 255, 0};
|
||||
|
||||
painter_.triangle(p00, p00 + d, p01 + d, c1, c1, c1);
|
||||
painter_.triangle(p00, p01 + d, p01, c1, c1, c1);
|
||||
|
||||
painter_.triangle(p00 + d, p00 + n, p01 + n, c1, c0, c0);
|
||||
painter_.triangle(p00 + d, p01 + n, p01 + d, c1, c0, c1);
|
||||
|
||||
painter_.triangle(p10, p10 - d, p11 - d, c1, c1, c1);
|
||||
painter_.triangle(p10, p11 - d, p11, c1, c1, c1);
|
||||
|
||||
painter_.triangle(p10 - d, p10 - n, p11 - n, c1, c0, c0);
|
||||
painter_.triangle(p10 - d, p11 - n, p11 - d, c1, c0, c1);
|
||||
}
|
||||
|
||||
if (selected_)
|
||||
if (auto entity = map_.world.index<index>().find(*selected_))
|
||||
if (auto t = map_.world.get(*entity).get_if<transformer>())
|
||||
{
|
||||
float const scale = std::pow(3.f, -1.f - view_level);
|
||||
float const step = 1.5f * scale / 9.f;
|
||||
|
||||
geom::point<float, 2> pen = view_box_.corner(0, 1) + geom::vector{1.f, -1.f} * view_box_[1].length() / 10.f;
|
||||
for (auto const & recipe : recipies.at(t->type))
|
||||
{
|
||||
int i = 0;
|
||||
for (auto type : recipe.inputs)
|
||||
{
|
||||
draw_item(type, pen + geom::vector{i * step, 0.f}, scale, painter_);
|
||||
++i;
|
||||
}
|
||||
|
||||
i = 3;
|
||||
painter_.triangle(
|
||||
pen + geom::vector{(i - 0.4f) * step, -0.4f * step},
|
||||
pen + geom::vector{(i - 0.4f) * step, 0.4f * step},
|
||||
pen + geom::vector{(i + 0.4f) * step, 0.f},
|
||||
{127, 127, 127, 255}
|
||||
);
|
||||
|
||||
i = 4;
|
||||
draw_item(recipe.output, pen + geom::vector{i * step, 0.f}, scale, painter_);
|
||||
|
||||
pen[1] -= step;
|
||||
}
|
||||
}
|
||||
|
||||
painter_.render(geom::orthographic_camera{view_box_}.transform());
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue