diff --git a/data/terrain.cfg b/data/terrain.cfg index 6b552f46433..e9a3e510a3d 100644 --- a/data/terrain.cfg +++ b/data/terrain.cfg @@ -68,7 +68,7 @@ green=200 [/terrain] [terrain] -image=flag +image=flag-neutral name=village char=t red=200 @@ -80,7 +80,7 @@ no_overlay=true [/terrain] [terrain] -image=flag-cave +image=flag-cave-neutral name=underground village char=D aliasof=t diff --git a/src/display.cpp b/src/display.cpp index 563119d2f90..b99856801c1 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -918,7 +918,13 @@ void display::draw_tile(int x, int y, SDL_Surface* unit_image, std::vector overlaps; if(!is_shrouded) { - overlaps = getAdjacentTerrain(x,y,image_type); + SDL_Surface* const flag = getFlag(terrain,x,y); + if(flag != NULL) + overlaps.push_back(flag); + + const std::vector& adj = getAdjacentTerrain(x,y,image_type); + + overlaps.insert(overlaps.end(),adj.begin(),adj.end()); typedef std::multimap::const_iterator Itor; @@ -1430,23 +1436,6 @@ SDL_Surface* display::getTerrain(gamemap::TERRAIN terrain,image::TYPE image_type map_.get_terrain_info(terrain).image(x,y) : map_.get_terrain_info(terrain).default_image()); - if(tower) { - - size_t i; - for(i = 0; i != teams_.size(); ++i) { - if(teams_[i].owns_tower(gamemap::location(x,y)) && (!fogged(x,y) || i == currentTeam_)) { - char buf[50]; - sprintf(buf,"-team%d",i+1); - image += buf; - break; - } - } - - if(i == teams_.size()) { - image += "-neutral"; - } - } - if(terrain == gamemap::CASTLE && map_.is_starting_position(gamemap::location(x,y))) { image = "terrain/keep"; @@ -1473,6 +1462,25 @@ SDL_Surface* display::getTerrain(gamemap::TERRAIN terrain,image::TYPE image_type return im; } +SDL_Surface* display::getFlag(gamemap::TERRAIN terrain, int x, int y) +{ + const bool village = (map_.underlying_terrain(terrain) == gamemap::TOWER); + if(!village) + return NULL; + + const gamemap::location loc(x,y); + + for(size_t i = 0; i != teams_.size(); ++i) { + if(teams_[i].owns_tower(loc) && (!fogged(x,y) || i == currentTeam_)) { + char buf[50]; + sprintf(buf,"terrain/flag-team%d.png",i+1); + return image::get_image(buf); + } + } + + return NULL; +} + void display::blit_surface(int x, int y, SDL_Surface* surface) { SDL_Surface* const target = video().getSurface(); diff --git a/src/display.hpp b/src/display.hpp index 5c62b4caf76..016a1f8c005 100644 --- a/src/display.hpp +++ b/src/display.hpp @@ -276,6 +276,8 @@ private: SDL_Surface* getTerrain(gamemap::TERRAIN, image::TYPE type, int x, int y, const std::string& dir=""); + SDL_Surface* getFlag(gamemap::TERRAIN, int x, int y); + SDL_Surface* getMinimap(int w, int h); void clearImageCache();