diff options
Diffstat (limited to 'src/game')
| -rw-r--r-- | src/game/assets.cpp | 2 | ||||
| -rw-r--r-- | src/game/game.hpp | 13 | ||||
| -rw-r--r-- | src/game/units.cpp | 36 | 
3 files changed, 35 insertions, 16 deletions
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  | 
