The Battle for Wesnoth 1.21.0-dev
 
Loading...
Searching...
No Matches
unit_palette.cpp
Go to the documentation of this file.
1/*
2 Copyright (C) 2012 - 2025
3 by Fabian Mueller <fabianmueller5@gmx.de>
4 Part of the Battle for Wesnoth Project https://www.wesnoth.org/
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY.
12
13 See the COPYING file for more details.
14*/
15
16/**
17 * Manage the unit-palette in the editor.
18 */
19
20#define GETTEXT_DOMAIN "wesnoth-editor"
21
23
24#include "gettext.hpp"
25
26#include "team.hpp"
27#include "units/types.hpp"
28
29namespace editor {
30
31std::string unit_palette::get_help_string() const {
32 return selected_fg_item().type_name();
33}
34
36{
37 for(const unit_type_data::unit_type_map::value_type &i : unit_types.types()) {
38 if(i.second.do_not_list())
39 continue;
40 item_map_.emplace(i.second.id(), i.second);
41 group_map_[i.second.race_id()].push_back(i.second.id());
42 // Add the unit to the default group
43 group_map_["all"].push_back(i.second.id());
44 }
45
46 for(const race_map::value_type &i : unit_types.races()) {
47 if(group_map_[i.second.id()].empty())
48 continue;
49 config cfg;
50 cfg["id"] = i.second.id();
51 cfg["name"] = i.second.plural_name();
52 cfg["icon"] = i.second.get_icon_path_stem();
53 cfg["core"] = true;
54 groups_.emplace_back(cfg);
55 }
56
57 //TODO
58 //move "invalid" items to the end
59 //std::stable_partition(items.begin(), items.end(), is_valid_terrain);
60
61 select_fg_item(item_map_.begin()->second.id());
62 select_bg_item(item_map_.begin()->second.id());
63
64 // Set the default group
65 set_group(groups_[0].id);
66
67 if(active_group().empty()) {
68 ERR_ED << "No items found.";
69 }
70}
71
73 const unit_type& u,
74 texture& base_image,
75 texture& /*overlay_image*/,
76 std::stringstream& tooltip_text)
77{
78 std::stringstream filename;
79 filename << u.image() << "~RC(" << u.flag_rgb() << '>'
81
82 base_image = image::get_texture(filename.str());
83 if(!base_image) {
84 tooltip_text << "IMAGE NOT FOUND\n";
85 ERR_ED << "image for unit type: '" << filename.str() << "' not found";
87 if(!base_image) {
88 ERR_ED << "Placeholder image not found";
89 return;
90 }
91 }
92
93 tooltip_text << u.type_name();
94}
95
97//TODO avoid magic numbers
98 : editor_palette<const unit_type&>(gui, 36, 4, toolkit)
99 , selected_bg_items_()
100{
101}
102
103const std::string& unit_palette::get_id(const unit_type& u)
104{
105 return u.id();
106}
107
108bool unit_palette::is_selected_bg_item(const std::string& id)
109{
110 return selected_bg_items_.count(id) != 0;
111}
112
113void unit_palette::select_bg_item(const std::string& item_id) {
114
115 if(selected_bg_items_.count(item_id) != 0) {
116 selected_bg_items_.erase(item_id);
117 } else {
118 selected_bg_items_.insert(item_id);
119 }
120
121 set_dirty();
122}
123
124}
A config object defines a single node in a WML file, with access to child nodes.
Definition config.hpp:157
const team & viewing_team() const
Definition display.cpp:337
std::vector< item_group > groups_
The editor_groups as defined in terrain-groups.cfg.
const std::vector< std::string > & active_group()
std::map< std::string, std::vector< std::string > > group_map_
virtual void select_fg_item(const std::string &item_id) override
Select a foreground item.
const const unit_type & & selected_fg_item() const
Return the currently selected foreground/background item.
void set_group(std::size_t index) override
virtual void select_bg_item(const std::string &item_id) override
virtual void setup(const game_config_view &cfg) override
Setup the internal data structure.
virtual const std::string & get_id(const unit_type &terrain) override
virtual bool is_selected_bg_item(const std::string &id) override
virtual std::string get_help_string() const override
virtual void setup_item(const unit_type &item, texture &item_base_image, texture &item_overlay_image, std::stringstream &tooltip) override
std::set< std::string > selected_bg_items_
unit_palette(editor_display &gui, editor_toolkit &toolkit)
A class grating read only view to a vector of config objects, viewed as one config with all children ...
void set_dirty(bool dirty=true)
Definition widget.cpp:180
int side() const
Definition team.hpp:182
static std::string get_side_color_id(unsigned side)
Definition team.cpp:960
Wrapper class to encapsulate creation and management of an SDL_Texture.
Definition texture.hpp:33
const race_map & races() const
Definition types.hpp:408
const unit_type_map & types() const
Definition types.hpp:398
A single unit type that the player may recruit.
Definition types.hpp:43
const std::string & image() const
Definition types.hpp:180
const std::string & flag_rgb() const
Definition types.cpp:676
const t_string & type_name() const
The name of the unit in the current language setting.
Definition types.hpp:142
const std::string & id() const
The id for this unit_type.
Definition types.hpp:145
#define ERR_ED
const config * cfg
Manage the empty-palette in the editor.
Definition action.cpp:31
General purpose widgets.
texture get_texture(const image::locator &i_locator, TYPE type, bool skip_cache)
Returns an image texture suitable for hardware-accelerated rendering.
Definition picture.cpp:955
std::string filename
Filename.
unit_type_data unit_types
Definition types.cpp:1499
#define i