46 #define ERR_DP LOG_STREAM(err, log_display)
47 #define LOG_DP LOG_STREAM(info, log_display)
48 #define DBG_DP LOG_STREAM(debug, log_display)
51 #define ERR_NG LOG_STREAM(err, log_engine)
64 std::weak_ptr<wb::manager>
wb,
66 const std::string& theme_id,
70 , attack_indicator_src_()
71 , attack_indicator_dst_()
78 , needs_rebuild_(false)
176 if (std::shared_ptr<wb::manager>
w =
wb_.lock()) {
192 if (std::shared_ptr<wb::manager>
w =
wb_.lock()) {
216 const std::string mouseover_normal_top =
"misc/hover-hex-top.png~RC(magenta>gold)";
217 const std::string mouseover_normal_bot =
"misc/hover-hex-bottom.png~RC(magenta>gold)";
219 const std::string mouseover_enemy_top =
"misc/hover-hex-enemy-top.png~RC(magenta>red)";
220 const std::string mouseover_enemy_bot =
"misc/hover-hex-enemy-bottom.png~RC(magenta>red)";
222 const std::string mouseover_self_top =
"misc/hover-hex-top.png~RC(magenta>green)";
223 const std::string mouseover_self_bot =
"misc/hover-hex-bottom.png~RC(magenta>green)";
225 const std::string mouseover_ally_top =
"misc/hover-hex-top.png~RC(magenta>lightblue)";
226 const std::string mouseover_ally_bot =
"misc/hover-hex-bottom.png~RC(magenta>lightblue)";
248 const std::string* mo_top_path;
249 const std::string* mo_bot_path;
252 mo_top_path = &mouseover_normal_top;
253 mo_bot_path = &mouseover_normal_bot;
255 mo_top_path = &mouseover_enemy_top;
256 mo_bot_path = &mouseover_enemy_bot;
258 mo_top_path = &mouseover_self_top;
259 mo_bot_path = &mouseover_self_bot;
261 mo_top_path = &mouseover_ally_top;
262 mo_bot_path = &mouseover_ally_bot;
280 if(std::shared_ptr<wb::manager>
w =
wb_.lock()) {
283 if(!(
w->is_active() &&
w->has_temp_move())) {
285 if(!footstepImages.empty()) {
330 std::string txt = std::to_string(debugH);
381 std::shared_ptr<wb::manager>
wb =
wb_.lock();
387 (
wb &&
wb->get_temp_move_unit().valid()) ?
394 std::stringstream def_text;
395 def_text << def <<
"%";
400 int def_font =
w->second.turns > 0 ? 18 : 16;
404 [inv =
w->second.invisible, zoc =
w->second.zoc, cap =
w->second.capture](
const rect& dest) {
406 draw::blit(image::get_texture(image::locator{
"misc/hidden.png"}, image::HEXED), dest);
410 draw::blit(image::get_texture(image::locator{
"misc/zoc.png"},
image::HEXED), dest);
419 if (
w->second.turns > 1 || (
w->second.turns == 1 && loc !=
route_.
steps.back())) {
420 std::stringstream turns_text;
421 turns_text <<
w->second.turns;
430 else if (selectedHex_.valid() && loc == mouseoverHex_)
434 if(selectedUnit != dc_->units().end() && mouseoveredUnit == dc_->units().end()) {
436 int move_cost = selectedUnit->movement_cost(get_map().get_terrain(loc));
438 0 : 100 - selectedUnit->defense_modifier(get_map().get_terrain(loc)));
439 std::stringstream def_text;
440 def_text << def <<
"%";
450 if (!reach_map_.empty()) {
452 if (reach != reach_map_.end() && reach->second > 1) {
453 const std::string num = std::to_string(reach->second);
461 std::vector<texture> res;
463 if (
route_.steps.size() < 2) {
467 std::vector<map_location>::const_iterator
i =
481 if (image_number < 1) {
490 const int first_half = (
i ==
route_.steps.begin()) ? 1 : 0;
492 const int second_half = (
i+1 ==
route_.steps.end()) ? 0 : 1;
494 for (
int h = first_half;
h <= second_half; ++
h) {
495 const std::string sense(
h==0 ?
"-in" :
"-out" );
498 std::string teleport_image =
510 dir =
i->get_opposite_dir(dir);
511 rotate =
"~FL(horiz)~FL(vert)";
515 + sense +
"-" +
i->write_direction(dir)
522 if (teleport !=
nullptr) res.push_back(teleport);
546 const map_location enemy_unit_location = path_to_goal[0];
565 for(std::vector<map_location>::const_iterator
i =
route_.
steps.begin();
575 if(route !=
nullptr) {
const std::vector< map_location > & route_
A config object defines a single node in a WML file, with access to child nodes.
Abstract class for exposing game data that doesn't depend on the GUI, however which for historical re...
const unit * get_visible_unit(const map_location &loc, const team ¤t_team, bool see_all=false) const
virtual const gamemap & map() const =0
virtual const unit_map & units() const =0
Sort-of-Singleton that many classes, both GUI and non-GUI, use to access the game data.
const team & viewing_team() const
bool map_screenshot_
Used to indicate to drawing functions that we are doing a map screenshot.
void draw_text_in_hex(const map_location &loc, const drawing_layer layer, const std::string &text, std::size_t font_size, color_t color, double x_in_hex=0.5, double y_in_hex=0.5)
Draw text on a hex.
std::map< map_location, std::vector< overlay > > overlay_map
map_location selectedHex_
void recalculate_minimap()
Schedule the minimap for recalculation.
virtual void render() override
Update offscreen render buffers.
void fade_tod_mask(const std::string &old, const std::string &new_)
ToD mask smooth fade.
bool invalidate(const map_location &loc)
Function to invalidate a specific tile for redrawing.
double turbo_speed() const
int get_location_x(const map_location &loc) const
Functions to get the on-screen positions of hexes.
static double get_zoom_factor()
Returns the current zoom factor.
void invalidate_game_status()
Function to invalidate the game status displayed on the sidebar.
void rebuild_all()
Rebuild all dynamic terrain.
virtual void layout() override
Finalize screen layout.
virtual void highlight_hex(map_location hex)
void update_tod(const time_of_day *tod_override=nullptr)
Applies r,g,b coloring to the map.
void process_reachmap_changes()
void scroll_to_tile(const map_location &loc, SCROLL_TYPE scroll_type=ONSCREEN, bool check_fogged=true, bool force=true)
Scroll such that location loc is on-screen.
map_location mouseoverHex_
bool fogged(const map_location &loc) const
Returns true if location (x,y) is covered in fog.
const gamemap & get_map() const
void invalidate_all()
Function to invalidate all tiles.
void drawing_buffer_add(const drawing_layer layer, const map_location &loc, decltype(draw_helper::do_draw) draw_func)
Add an item to the drawing buffer.
exclusive_unit_draw_requests_t exclusive_unit_draw_requests_
map of hexes where only one unit should be drawn, the one identified by the associated id string
std::set< map_location > invalidated_
bool invalidateGameStatus_
virtual void draw_invalidated()
Only called when there's actual redrawing to do.
reports * reports_object_
virtual void update() override
Update animations and internal state.
int get_location_y(const map_location &loc) const
virtual void draw_hex(const map_location &loc)
Redraws a single gamemap location.
const std::unique_ptr< fake_unit_manager > fake_unit_man_
const display_context * dc_
static unsigned int zoom_
The current zoom, in pixels (on screen) per 72 pixels (in the graphic assets), i.e....
bool shrouded(const map_location &loc) const
Returns true if location (x,y) is covered in shroud.
void refresh_report(const std::string &report_name, const config *new_cfg=nullptr)
Update the given report.
std::weak_ptr< wb::manager > wb_
virtual void select_hex(map_location hex)
void set_move(double xmove, double ymove)
void set_lifetime(int lifetime, int fadeout=100)
void set_position(double xpos, double ypos)
void set_color(const color_t &color)
void set_scroll_mode(LABEL_SCROLL_MODE scroll)
void set_font_size(int font_size)
unit_map::iterator find_visible_unit(const map_location &loc, const team ¤t_team, bool see_all=false)
std::string current_team_name() const
virtual void draw_invalidated() override
Only called when there's actual redrawing to do.
void draw_movement_info(const map_location &loc)
Draws the movement info (turns available) for a given location.
void display_unit_hex(map_location hex)
Change the unit to be displayed in the sidebar.
void invalidate_unit_after_move(const map_location &src, const map_location &dst)
Same as invalidate_unit() if moving the displayed unit.
std::string attack_indicator_direction() const
Function to get attack direction suffix.
virtual void highlight_hex(map_location hex) override
Function to highlight a location.
map_location displayedUnitHex_
void scroll_to_leader(int side, SCROLL_TYPE scroll_type=ONSCREEN, bool force=true)
Scrolls to the leader of a certain side.
void set_game_mode(const game_mode mode)
virtual void draw_hex(const map_location &loc) override
Redraws a single gamemap location.
static std::map< map_location, int > debugHighlights_
void set_attack_indicator(const map_location &src, const map_location &dst)
Set the attack direction indicator.
static int & debug_highlight(const map_location &loc)
annotate hex with number, useful for debugging or UI prototype
const std::unique_ptr< display_chat_manager > chat_man_
pathfind::marked_route route_
virtual void render() override
TLD render() override.
void set_route(const pathfind::marked_route *route)
Sets the route along which footsteps are drawn to show movement of a unit.
virtual overlay_map & get_overlays() override
Inherited from display.
std::set< map_location > units_that_can_reach_goal_
void invalidate_unit()
Function to invalidate that unit status displayed on the sidebar.
virtual void select_hex(map_location hex) override
Function to display a location as selected.
void highlight_reach(const pathfind::paths &paths_list)
Sets the paths that are currently displayed as available for the unit to move along.
void new_turn()
Update lighting settings.
void clear_attack_indicator()
virtual const time_of_day & get_time_of_day(const map_location &loc) const override
void highlight_another_reach(const pathfind::paths &paths_list, const map_location &goal=map_location::null_location())
Add more paths to highlight.
map_location attack_indicator_dst_
game_mode
Sets the linger mode for the display.
@ RUNNING
no linger overlay, show fog and shroud.
bool unhighlight_reach()
Reset highlighting of paths.
void needs_rebuild(bool b)
Sets whether the screen (map visuals) needs to be rebuilt.
bool maybe_rebuild()
Rebuilds the screen if needs_rebuild(true) was previously called, and resets the flag.
virtual void layout() override
TLD layout() override.
virtual bool has_time_area() const override
game_display(game_board &board, std::weak_ptr< wb::manager > wb, reports &reports_object, const std::string &theme_id, const config &level)
virtual void update() override
TLD update() override.
map_location attack_indicator_src_
void float_label(const map_location &loc, const std::string &text, const color_t &color)
Function to float a label above a tile.
terrain_code get_terrain(const map_location &loc) const
Looks up terrain at a particular location.
bool on_board(const map_location &loc) const
Tell if a location is on the map.
Generic locator abstracting the location of an image.
static const int UNREACHABLE
Magic value that signifies a hex is unreachable.
const std::set< std::string > & report_list()
const std::string & team_name() const
Wrapper class to encapsulate creation and management of an SDL_Texture.
bool has_time_area() const
const time_of_day & get_time_of_day(int for_turn=0) const
Returns global time of day for the passed turn.
const time_of_day & get_previous_time_of_day() const
void redraw_unit(const unit &u) const
draw a unit.
std::size_t count(const map_location &loc) const
unit_iterator find(std::size_t id)
unit_iterator find_leader(int side)
This class represents a single unit of a specific type.
Drawing functions, for drawing things on the screen.
@ linger_overlay
The overlay used for the linger mode.
@ reachmap
Overlay on unreachable hexes.
@ footsteps
Footsteps showing path from unit to mouse.
@ attack_indicator
Layer which holds the attack indicator.
@ mouseover_top
Top half of image following the mouse.
@ mouseover_bottom
Bottom half of image following the mouse.
@ move_info
Movement info (defense%, etc...)
@ selected_hex
Image on the selected unit.
static lg::log_domain log_engine("engine")
std::vector< texture > footsteps_images(const map_location &loc, const pathfind::marked_route &route_, const display_context *dc_)
Function to return 2 half-hex footsteps images for the given location.
static lg::log_domain log_display("display")
int side() const
The side this unit belongs to.
bool tiles_adjacent(const map_location &a, const map_location &b)
Function which tells if two locations are adjacent.
Standard logging facilities (interface).
bool is_shrouded(const display *disp, const map_location &loc)
Our definition of map labels being obscured is if the tile is obscured, or the tile below is obscured...
void blit(const texture &tex, const SDL_Rect &dst)
Draws a texture, or part of a texture, at the given location.
const int SIZE_FLOAT_LABEL
const color_t YELLOW_COLOR
int add_floating_label(const floating_label &flabel)
add a label floating on the screen above everything else.
const color_t NORMAL_COLOR
std::string foot_teleport_enter
std::vector< std::string > foot_speed_prefix
std::string foot_teleport_exit
color_t red_to_green(double val, bool for_text)
Return a color corresponding to the value val red for val=0.0 to green for val=100....
Functions to load and save images from/to disk.
@ HEXED
Standard hexagonal tile mask applied, removing portions that don't fit.
@ TOD_COLORED
Same as HEXED, but with Time of Day color tint applied.
texture get_texture(const image::locator &i_locator, TYPE type, bool skip_cache)
Returns an image texture suitable for hardware-accelerated rendering.
Unit and team statistics.
::tod_manager * tod_manager
std::size_t size(const std::string &str)
Length in characters of a UTF-8 string.
std::string get_unknown_exception_type()
Utility function for finding the type of thing caught with catch(...).
std::string::const_iterator iterator
rect dst
Location on the final composed sheet.
rect src
Non-transparent portion of the surface to compose.
The basic class for representing 8-bit RGB or RGBA colour values.
Encapsulates the map of the game.
DIRECTION
Valid directions which can be moved in our hexagonal world.
static const map_location & null_location()
Structure which holds a single route and marks for special events.
std::vector< map_location > & steps
std::vector< map_location > get_path(const const_iterator &) const
Returns the path going from the source point (included) to the destination point j (excluded).
bool contains(const map_location &) const
const_iterator find(const map_location &) const
Object which contains all the possible locations a unit can move to, with associated best routes to t...
An abstract description of a rectangle with integer coordinates.
Object which defines a time of day with associated bonuses, image, sounds etc.
std::string image_mask
The image that is to be laid over all images while this time of day lasts.
Applies the planned unit map for the duration of the struct's life.