summaryrefslogtreecommitdiff
path: root/src/game/interface.cpp
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2018-04-25 18:13:43 +0200
committerPaweł Redman <pawel.redman@gmail.com>2018-04-25 18:13:43 +0200
commit7103fffc57798ac0bd0ce0819a86b8411cf2c1ae (patch)
tree2dc2c3361fe604ad4389e4a2b6925c07cad3db6c /src/game/interface.cpp
parent4fa5f46575e545437ab774c97f9dc88ec304251d (diff)
Show grenade counts on avatars.
Diffstat (limited to 'src/game/interface.cpp')
-rw-r--r--src/game/interface.cpp76
1 files changed, 48 insertions, 28 deletions
diff --git a/src/game/interface.cpp b/src/game/interface.cpp
index 9e43839..2e1d8ab 100644
--- a/src/game/interface.cpp
+++ b/src/game/interface.cpp
@@ -338,14 +338,43 @@ static sf::Color health_to_color(float frac,int alpha)
return sf::Color(255, 0, 0, alpha);
}
+static void render_bar(render::state_t *render, rectf_t rect, size_t value, size_t max,
+ render::animated_texture_t *icon_image)
+{
+ rectf_t bar, icon;
+ std::string text;
+ v2f_t text_x;
+ float text_h;
+
+ render->render_rect(rect, sf::Color(0, 0, 0, 128));
+
+ if (max) {
+ float frac = (float)value / max;
+
+ bar = rect;
+ bar[1][0] = lerp(bar[0][0], bar[1][0], frac);
+ render->render_rect(bar, health_to_color(frac, 90));
+
+ text = std::to_string(value) + "/" + std::to_string(max);
+ } else
+ text = std::to_string(value);
+
+ icon[0] = bar[0];
+ icon[1] = bar[0] + v2f_t(1.0f, 1.0f) * bar.dim(1);
+ render->render(0.0, icon_image, icon);
+
+ text_h = bar.dim(1);
+ text_x = v2f_t(bar[0][0] + text_h, bar[1][1] - text_h * 0.35f);
+
+ render->render_text(text_x, text_h, text, render::ALIGN_LEFT_BOTTOM, sf::Color::White);
+}
+
static void render_avatar(render::state_t *render, game::unit_t *unit, v2f_t at,
v2f_t avatar_size, float em, bool large)
{
render::animated_texture_t *image;
- rectf_t rect, bar;
- v2f_t x;
- std::string str;
- float frac;
+ rectf_t rect, row;
+ v2f_t name_x;
switch (unit->type) {
case game::unit_t::UNIT_SOLDIER:
@@ -372,35 +401,26 @@ static void render_avatar(render::state_t *render, game::unit_t *unit, v2f_t at,
rect = rectf_t(at, at + avatar_size * em);
render->render(0, image, rect, sf::Color::White);
- frac = (float)unit->health / unit->max_health;
+ if (!large)
+ em *= 0.65f;
- if (!large) {
- bar = rect;
- bar[0][1] = bar[1][1] - em;
- render->render_rect(bar, sf::Color(0, 0, 0, 128));
+ row = rect;
+ row[0][1] = row[1][1] - em;
- bar[1][0] = lerp(bar[0][0], bar[1][0], frac);
- render->render_rect(bar, health_to_color(frac, 90));
+ render_bar(render, row, unit->health, unit->max_health,
+ &assets::ui.icon_health);
+ row[0][1] -= em;
+ row[1][1] -= em;
- return;
+ if (unit->storage.max_grenades) {
+ render_bar(render, row, unit->storage.grenades, unit->storage.max_grenades,
+ &assets::ui.icon_grenade);
+ row[0][1] -= em;
+ row[1][1] -= em;
}
- x = v2f_t(rect[0][0], rect[1][1] - em / 2);
- bar[0][0] = x[0];
- bar[0][1] = x[1] - 0.5f * em;
- bar[1][0] = rect[1][0];
- bar[1][1] = bar[0][1] + 0.9f * em;
- render->render_rect(bar, sf::Color(0, 0, 0, 128));
-
- bar[1][0] = lerp(bar[0][0], bar[1][0], frac);
- render->render_rect(bar, health_to_color(frac, 90));
-
- str = std::to_string(unit->health) + "/" + std::to_string(unit->max_health);
- render->render_text(x, em, str, render::ALIGN_LEFT_BOTTOM, sf::Color::White);
-
- x[1] -= em;
- render->render_text(x + v2f_t(0.1, 0.1) * em, em, unit->name, render::ALIGN_LEFT_BOTTOM, sf::Color::Black);
- render->render_text(x, em, unit->name, render::ALIGN_LEFT_BOTTOM, sf::Color::White);
+ name_x = v2f_t(row[0][0], row[1][1] - em * 0.35f);
+ render->render_text(name_x, em, unit->name, render::ALIGN_LEFT_BOTTOM, sf::Color::White);
}
void state_t::render_to(render::state_t *render)