From 7d0b6babe9906df0990028e41e0f895fab605498 Mon Sep 17 00:00:00 2001 From: Paweł Redman Date: Tue, 19 Dec 2017 20:19:01 +0100 Subject: Better selection markers. --- src/game/assets.cpp | 2 ++ src/game/game.hpp | 13 ++++++++++--- src/game/units.cpp | 36 +++++++++++++++++++++++------------- 3 files changed, 35 insertions(+), 16 deletions(-) (limited to 'src/game') diff --git a/src/game/assets.cpp b/src/game/assets.cpp index 046934b..66d3bc8 100644 --- a/src/game/assets.cpp +++ b/src/game/assets.cpp @@ -9,6 +9,7 @@ fx_assets_t fx; deco_assets_t deco; render::animated_texture_t unit_selected; +render::animated_texture_t unit_selected_halo; void load(void) { @@ -36,6 +37,7 @@ void load(void) deco.spike_small.load("assets/deco/spike_small_", 1); unit_selected.load("assets/units/selected_", 1); + unit_selected_halo.load("assets/units/selected_halo_", 1); world::register_tile(TILE_DIRT, 0); render::register_tile(TILE_DIRT, "assets/tiles/dirt.png", NULL, 0.0f); diff --git a/src/game/game.hpp b/src/game/game.hpp index 456a8ea..7adc307 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -59,7 +59,8 @@ namespace game { extern nest_assets_t nest; extern fx_assets_t fx; extern deco_assets_t deco; - extern render::animated_texture_t unit_selected; + extern render::animated_texture_t unit_selected; + extern render::animated_texture_t unit_selected_halo; void load(void); } @@ -182,15 +183,15 @@ namespace game { double say_time = -INFINITY; void say(std::string str); - void render_to_pre(render::state_t *render); void render_to(render::state_t *render); - }; class unit_soldier_t : public unit_t { double last_target_time = -INFINITY; v2f_t last_target_x; + sf::Color selection_color; + double next_fear_test = -INFINITY; size_t willpower_bonus; size_t fear_dc; @@ -206,6 +207,7 @@ namespace game { unit_soldier_t(game::state_t *game_); ~unit_soldier_t(void) {}; void render_to(render::state_t *render); + void render_late_to(render::state_t *render); void on_think(void); void on_spawn(void) {}; @@ -218,6 +220,7 @@ namespace game { unit_spider_t(game::state_t *game_); ~unit_spider_t(void) {}; void render_to(render::state_t *render); + void render_late_to(render::state_t *render) {}; void target_and_attack(void); @@ -234,6 +237,7 @@ namespace game { unit_nest_t(game::state_t *game_); ~unit_nest_t(void) {}; void render_to(render::state_t *render); + void render_late_to(render::state_t *render) {}; void on_think(void); void on_spawn(void); @@ -251,6 +255,8 @@ namespace game { void on_think(void); void on_spawn(void) {}; void on_wake(void) {}; + + void render_late_to(render::state_t *render) {}; }; class fx_tracer_t : public effect_t { @@ -290,6 +296,7 @@ namespace game { deco_t(game::state_t *game, deco_type_t type_); void render_to(render::state_t *render); + void render_late_to(render::state_t *render) {}; void on_think(void) {}; void on_spawn(void) {}; diff --git a/src/game/units.cpp b/src/game/units.cpp index e7f5e81..214861b 100644 --- a/src/game/units.cpp +++ b/src/game/units.cpp @@ -7,12 +7,6 @@ unit_t::unit_t(game::state_t *game_, unit_t::type_t type_) : game::entity_t(game type = type_; } -void unit_t::render_to_pre(render::state_t *render) -{ - if (!dead && selected == selection_cookie) - render->render(0.0, &assets::unit_selected, cmodel.bounds); -} - void unit_t::render_to(render::state_t *render) { if (!dead && health < max_health) @@ -440,8 +434,6 @@ void unit_soldier_t::on_think(void) void unit_soldier_t::on_death(void) { - game->selected_units.erase(this); - render_size[0] = v2f_t(-0.75f, -0.5f); render_size[1] = v2f_t(+0.75f, +0.5f); render_layer = -1; @@ -451,7 +443,23 @@ void unit_soldier_t::on_death(void) void unit_soldier_t::render_to(render::state_t *render) { - unit_t::render_to_pre(render); + sf::Color selection_color; + + if (selected == selection_cookie) { + if (health == max_health) + selection_color = sf::Color::Green; + else if (health >= max_health / 2) + selection_color = sf::Color::Yellow; + else if (dead) + selection_color = sf::Color::Black; + else + selection_color = sf::Color::Red; + + if (panic && (game->now - floor(game->now) > 0.5)) + selection_color = sf::Color::Blue; + + render->render(0.0, &assets::unit_selected, cmodel.bounds, selection_color); + } if (!dead) { render::oriented_sprite_t *legs, *body; @@ -489,6 +497,12 @@ void unit_soldier_t::render_to(render::state_t *render) unit_t::render_to(render); } +void unit_soldier_t::render_late_to(render::state_t *render) +{ + if (selected == selection_cookie) + render->render(0.0, &assets::unit_selected_halo, cmodel.bounds, selection_color); +} + unit_spider_t::unit_spider_t(game::state_t *game) : unit_t(game, UNIT_SPIDER) { size[0] = v2f_t(-0.2f, +0.0f); @@ -561,8 +575,6 @@ void unit_spider_t::render_to(render::state_t *render) { bool moving; - unit_t::render_to_pre(render); - moving = move.moving && !move.blocked; if (!dead) @@ -640,8 +652,6 @@ void unit_nest_t::on_death(void) void unit_nest_t::render_to(render::state_t *render) { - unit_t::render_to_pre(render); - if (!dead) render->render(game->now, &assets::nest.idle, render_bounds); else -- cgit