mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-20 18:21:12 +00:00
Fold the old draw_tile() into draw();
it had become simplified enough by the tile_stack change that separating this code no longer makes sense.
This commit is contained in:
parent
3af6d6af60
commit
dd0ec08dad
250
src/display.cpp
250
src/display.cpp
@ -1589,7 +1589,130 @@ void display::draw(bool update,bool force)
|
|||||||
image_type = image::SEMI_BRIGHTENED;
|
image_type = image::SEMI_BRIGHTENED;
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_tile(*it, tod, tod_at, image_type, clip_rect);
|
if(screen_.update_locked()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int xpos = int(get_location_x(*it));
|
||||||
|
int ypos = int(get_location_y(*it));
|
||||||
|
|
||||||
|
if(xpos >= clip_rect.x + clip_rect.w || ypos >= clip_rect.y + clip_rect.h ||
|
||||||
|
xpos + zoom_ < clip_rect.x || ypos + zoom_ < clip_rect.y) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the terrain is off the map it shouldn't
|
||||||
|
// be included for reachmap, fog, shroud and
|
||||||
|
// the grid. In the future it may not depend
|
||||||
|
// on whether the location is on the map but
|
||||||
|
// whether it's an _off^* terrain. (atm not
|
||||||
|
// too happy with how the grid looks) (the
|
||||||
|
// shroud has some glitches due to commented
|
||||||
|
// out code but enabling it looks worse)
|
||||||
|
const bool on_map = map_.on_board(*it);
|
||||||
|
const bool is_shrouded = shrouded(*it);
|
||||||
|
t_translation::t_letter terrain = t_translation::VOID_TERRAIN;
|
||||||
|
|
||||||
|
if(!is_shrouded || !on_map) {
|
||||||
|
terrain = map_.get_terrain(*it);
|
||||||
|
}
|
||||||
|
|
||||||
|
tile_stack_clear();
|
||||||
|
|
||||||
|
// tod_at may differ from tod if hex is illuminated
|
||||||
|
std::string mask = tod_at.image_mask;
|
||||||
|
|
||||||
|
if(!is_shrouded /*|| !on_map*/) {
|
||||||
|
// unshrouded terrain (the normal case)
|
||||||
|
tile_stack_terrains(*it,tod, image_type, ADJACENT_BACKGROUND);
|
||||||
|
|
||||||
|
// village-control flags.
|
||||||
|
tile_stack_append(get_flag(terrain,*it));
|
||||||
|
|
||||||
|
typedef overlay_map::const_iterator Itor;
|
||||||
|
|
||||||
|
for(std::pair<Itor,Itor> overlays = overlays_.equal_range(*it);
|
||||||
|
overlays.first != overlays.second; ++overlays.first) {
|
||||||
|
|
||||||
|
tile_stack_append(image::get_image(overlays.first->second.image,image_type));
|
||||||
|
}
|
||||||
|
} else if(on_map) {
|
||||||
|
// shrouded but on map
|
||||||
|
tile_stack_append(image::get_image(game_config::void_image));
|
||||||
|
}
|
||||||
|
|
||||||
|
// footsteps indicating a movement path may be
|
||||||
|
// required; this has to be done before fogging
|
||||||
|
// because you might specify a goto to a place
|
||||||
|
// your unit can't reach in one turn.
|
||||||
|
tile_stack_append(footstep_image(*it));
|
||||||
|
|
||||||
|
if(!is_shrouded /*|| !on_map*/) {
|
||||||
|
tile_stack_terrains(*it,tod,image_type,ADJACENT_FOREGROUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
// apply fogging
|
||||||
|
if(fogged(*it) && on_map && !is_shrouded) {
|
||||||
|
tile_stack_append(image::get_image(game_config::fog_image));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!is_shrouded && on_map) {
|
||||||
|
tile_stack_terrains(*it,tod,image_type,ADJACENT_FOGSHROUD);
|
||||||
|
}
|
||||||
|
|
||||||
|
//draw the time-of-day mask on top of the
|
||||||
|
//terrain in the hex
|
||||||
|
if(tod_hex_mask1 != NULL || tod_hex_mask2 != NULL) {
|
||||||
|
tile_stack_append(tod_hex_mask1);
|
||||||
|
tile_stack_append(tod_hex_mask2);
|
||||||
|
} else if(mask != "") {
|
||||||
|
tile_stack_append(image::get_image(mask,image::UNMASKED,image::NO_ADJUST_COLOUR));
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw reach_map information
|
||||||
|
if (!reach_map_.empty() && on_map) {
|
||||||
|
reach_map::iterator reach = reach_map_.find(*it);
|
||||||
|
if (reach == reach_map_.end()) {
|
||||||
|
tile_stack_append(image::get_image(game_config::unreachable_image,image::UNMASKED,image::NO_ADJUST_COLOUR));
|
||||||
|
} else if (reach->second > 1) {
|
||||||
|
const std::string num = lexical_cast<std::string>(reach->second);
|
||||||
|
draw_text_in_hex(*it, num, font::SIZE_PLUS, font::YELLOW_COLOUR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw the grid, if that's been enabled
|
||||||
|
if(grid_ && on_map) {
|
||||||
|
tile_stack_append(image::get_image(game_config::grid_image));
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw cross images for debug highlights
|
||||||
|
if(game_config::debug && debugHighlights_.count(*it)) {
|
||||||
|
const surface cross(image::get_image(game_config::cross_image));
|
||||||
|
if(cross != NULL) {
|
||||||
|
draw_unit(xpos,ypos,cross,false,debugHighlights_[*it],0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the top layer overlay surfaces
|
||||||
|
if(!hex_overlay_.empty()) {
|
||||||
|
std::map<gamemap::location, surface>::const_iterator itor = hex_overlay_.find(*it);
|
||||||
|
if(itor != hex_overlay_.end())
|
||||||
|
tile_stack_append(itor->second);
|
||||||
|
}
|
||||||
|
|
||||||
|
// paint selection and mouseover overlays
|
||||||
|
if(*it == selectedHex_ && map_.on_board(selectedHex_) && selected_hex_overlay_ != NULL)
|
||||||
|
tile_stack_append(selected_hex_overlay_);
|
||||||
|
if(*it == mouseoverHex_ && map_.on_board(mouseoverHex_) && mouseover_hex_overlay_ != NULL)
|
||||||
|
tile_stack_append(mouseover_hex_overlay_);
|
||||||
|
|
||||||
|
tile_stack_render(xpos, ypos);
|
||||||
|
|
||||||
|
// perhaps show how many turns it would take
|
||||||
|
// to reach this hex
|
||||||
|
if(!is_shrouded && on_map) {
|
||||||
|
draw_movement_info(*it);
|
||||||
|
}
|
||||||
//simulate_delay += 1;
|
//simulate_delay += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2024,131 +2147,6 @@ void display::draw_movement_info(const gamemap::location& loc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void display::draw_tile(const gamemap::location &loc, const time_of_day& tod, const time_of_day & tod_at, image::TYPE image_type, const SDL_Rect &clip_rect)
|
|
||||||
{
|
|
||||||
if(screen_.update_locked()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int xpos = int(get_location_x(loc));
|
|
||||||
int ypos = int(get_location_y(loc));
|
|
||||||
|
|
||||||
if(xpos >= clip_rect.x + clip_rect.w || ypos >= clip_rect.y + clip_rect.h ||
|
|
||||||
xpos + zoom_ < clip_rect.x || ypos + zoom_ < clip_rect.y) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the terrain is off the map it shouldn't be included for
|
|
||||||
// reachmap, fog, shroud and the grid.
|
|
||||||
// In the future it may not depend on whether the location is
|
|
||||||
// on the map but whether it's an _off^* terrain.
|
|
||||||
// (atm not too happy with how the grid looks)
|
|
||||||
// (the shroud has some glitches due to commented out code
|
|
||||||
// but enabling it looks worse)
|
|
||||||
const bool on_map = map_.on_board(loc);
|
|
||||||
const bool is_shrouded = shrouded(loc);
|
|
||||||
t_translation::t_letter terrain = t_translation::VOID_TERRAIN;
|
|
||||||
|
|
||||||
if(!is_shrouded || !on_map) {
|
|
||||||
terrain = map_.get_terrain(loc);
|
|
||||||
}
|
|
||||||
|
|
||||||
tile_stack_clear();
|
|
||||||
|
|
||||||
// tod_at may differ from tod if our hex is illuminated
|
|
||||||
std::string mask = tod_at.image_mask;
|
|
||||||
|
|
||||||
if(!is_shrouded /*|| !on_map*/) {
|
|
||||||
// unshrouded terrain (the normal case)
|
|
||||||
tile_stack_terrains(loc,tod, image_type, ADJACENT_BACKGROUND);
|
|
||||||
|
|
||||||
// village-control flags.
|
|
||||||
tile_stack_append(get_flag(terrain,loc));
|
|
||||||
|
|
||||||
typedef overlay_map::const_iterator Itor;
|
|
||||||
|
|
||||||
for(std::pair<Itor,Itor> overlays = overlays_.equal_range(loc);
|
|
||||||
overlays.first != overlays.second; ++overlays.first) {
|
|
||||||
|
|
||||||
tile_stack_append(image::get_image(overlays.first->second.image,image_type));
|
|
||||||
}
|
|
||||||
} else if(on_map) {
|
|
||||||
// shrouded but on map
|
|
||||||
tile_stack_append(image::get_image(game_config::void_image));
|
|
||||||
}
|
|
||||||
|
|
||||||
// footsteps indicating a movement path may be required
|
|
||||||
// this has to be done before fogging because you might
|
|
||||||
// specify a goto to a place your unit can't reach in one turn.
|
|
||||||
tile_stack_append(footstep_image(loc));
|
|
||||||
|
|
||||||
if(!is_shrouded /*|| !on_map*/) {
|
|
||||||
tile_stack_terrains(loc,tod,image_type,ADJACENT_FOREGROUND);
|
|
||||||
}
|
|
||||||
|
|
||||||
// apply fogging
|
|
||||||
if(fogged(loc) && on_map && !is_shrouded) {
|
|
||||||
tile_stack_append(image::get_image(game_config::fog_image));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!is_shrouded && on_map) {
|
|
||||||
tile_stack_terrains(loc,tod,image_type,ADJACENT_FOGSHROUD);
|
|
||||||
}
|
|
||||||
|
|
||||||
//draw the time-of-day mask on top of the terrain in the hex
|
|
||||||
|
|
||||||
if(tod_hex_mask1 != NULL || tod_hex_mask2 != NULL) {
|
|
||||||
tile_stack_append(tod_hex_mask1);
|
|
||||||
tile_stack_append(tod_hex_mask2);
|
|
||||||
} else if(mask != "") {
|
|
||||||
tile_stack_append(image::get_image(mask,image::UNMASKED,image::NO_ADJUST_COLOUR));
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw reach_map information
|
|
||||||
if (!reach_map_.empty() && on_map) {
|
|
||||||
reach_map::iterator reach = reach_map_.find(loc);
|
|
||||||
if (reach == reach_map_.end()) {
|
|
||||||
tile_stack_append(image::get_image(game_config::unreachable_image,image::UNMASKED,image::NO_ADJUST_COLOUR));
|
|
||||||
} else if (reach->second > 1) {
|
|
||||||
const std::string num = lexical_cast<std::string>(reach->second);
|
|
||||||
draw_text_in_hex(loc, num, font::SIZE_PLUS, font::YELLOW_COLOUR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw the grid, if that's been enabled
|
|
||||||
if(grid_ && on_map) {
|
|
||||||
tile_stack_append(image::get_image(game_config::grid_image));
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw cross images for debug highlights
|
|
||||||
if(game_config::debug && debugHighlights_.count(loc)) {
|
|
||||||
const surface cross(image::get_image(game_config::cross_image));
|
|
||||||
if(cross != NULL) {
|
|
||||||
draw_unit(xpos,ypos,cross,false,debugHighlights_[loc],0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the top layer overlay surfaces
|
|
||||||
if(!hex_overlay_.empty()) {
|
|
||||||
std::map<gamemap::location, surface>::const_iterator itor = hex_overlay_.find(loc);
|
|
||||||
if(itor != hex_overlay_.end())
|
|
||||||
tile_stack_append(itor->second);
|
|
||||||
}
|
|
||||||
|
|
||||||
// paint selection and mouseover overlays
|
|
||||||
if(loc == selectedHex_ && map_.on_board(selectedHex_) && selected_hex_overlay_ != NULL)
|
|
||||||
tile_stack_append(selected_hex_overlay_);
|
|
||||||
if(loc == mouseoverHex_ && map_.on_board(mouseoverHex_) && mouseover_hex_overlay_ != NULL)
|
|
||||||
tile_stack_append(mouseover_hex_overlay_);
|
|
||||||
|
|
||||||
tile_stack_render(xpos, ypos);
|
|
||||||
|
|
||||||
// perhaps show how many turns it would take to reach this hex
|
|
||||||
if(!is_shrouded && on_map) {
|
|
||||||
draw_movement_info(loc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
surface display::footstep_image(const gamemap::location& loc)
|
surface display::footstep_image(const gamemap::location& loc)
|
||||||
{
|
{
|
||||||
std::vector<gamemap::location>::const_iterator i =
|
std::vector<gamemap::location>::const_iterator i =
|
||||||
|
@ -525,7 +525,6 @@ private:
|
|||||||
display(const display&);
|
display(const display&);
|
||||||
void operator=(const display&);
|
void operator=(const display&);
|
||||||
|
|
||||||
void draw_tile(const gamemap::location &loc, const time_of_day& tod, const time_of_day& tod_at, image::TYPE image_type, const SDL_Rect &clip_rect);
|
|
||||||
void draw_sidebar();
|
void draw_sidebar();
|
||||||
void draw_game_status();
|
void draw_game_status();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user