Freeciv21
Develop your civilization from humble roots to a global empire
layer_abstract_activities.cpp
Go to the documentation of this file.
1 // SPDX-License-Identifier: GPLv3-or-later
2 // SPDX-FileCopyrightText: Freeciv authors
3 // SPDX-FileCopyrightText: Freeciv21 authors
4 // SPDX-FileCopyrightText: Louis Moureaux <m_louis30@yahoo.com>
5 
7 
8 #include "tilespec.h"
9 
10 namespace freeciv {
11 
21 {
22  m_activities[ACTIVITY_MINE] = load_sprite({"unit.plant"}, true);
23  m_activities[ACTIVITY_PLANT] = m_activities[ACTIVITY_MINE];
24  m_activities[ACTIVITY_IRRIGATE] = load_sprite({"unit.irrigate"}, true);
25  m_activities[ACTIVITY_CULTIVATE] = m_activities[ACTIVITY_IRRIGATE];
26  m_activities[ACTIVITY_PILLAGE] = load_sprite({"unit.pillage"}, true);
27  m_activities[ACTIVITY_FORTIFIED] = load_sprite({"unit.fortified"}, true);
28  m_activities[ACTIVITY_FORTIFYING] = load_sprite({"unit.fortifying"}, true);
29  m_activities[ACTIVITY_SENTRY] = load_sprite({"unit.sentry"}, true);
30  m_activities[ACTIVITY_GOTO] = load_sprite({"unit.goto"}, true);
31  m_activities[ACTIVITY_TRANSFORM] = load_sprite({"unit.transform"}, true);
32  m_activities[ACTIVITY_CONVERT] = load_sprite({"unit.convert"}, true);
33 }
34 
39  const QString &tag,
40  extrastyle_id style)
41 {
42  fc_assert(extra->id == m_extra_activities.size());
43 
44  if (!fc_strcasecmp(extra->activity_gfx, "none")) {
45  m_extra_activities.push_back(nullptr);
46  } else {
47  QStringList tags = {
48  extra->activity_gfx,
49  extra->act_gfx_alt,
50  extra->act_gfx_alt2,
51  };
52  m_extra_activities.push_back(load_sprite(tags, true));
53  }
54 
55  if (!fc_strcasecmp(extra->rmact_gfx, "none")) {
56  m_extra_rm_activities.push_back(nullptr);
57  } else {
58  QStringList tags = {
59  extra->rmact_gfx,
60  extra->rmact_gfx_alt,
61  };
62  m_extra_rm_activities.push_back(load_sprite(tags, true));
63  }
64 }
65 
70 {
71  m_extra_activities.clear();
72  m_extra_rm_activities.clear();
73 }
74 
78 QPixmap *
80  const extra_type *target) const
81 {
82  // Nicely inconsistent
83  switch (activity) {
84  case ACTIVITY_POLLUTION:
85  case ACTIVITY_FALLOUT:
86  return m_extra_rm_activities[extra_index(target)];
87  break;
88  case ACTIVITY_BASE:
89  case ACTIVITY_GEN_ROAD:
90  return m_extra_activities[extra_index(target)];
91  break;
92  default:
93  break;
94  }
95 
96  return target ? m_extra_activities[extra_index(target)]
97  : m_activities[activity];
98 }
99 
100 } // namespace freeciv
void reset_ruleset() override
Resets data about extras.
std::vector< QPixmap * > m_extra_rm_activities
std::array< QPixmap *, ACTIVITY_LAST > m_activities
void load_sprites() override
Loads the sprites in memory.
void initialize_extra(const extra_type *extra, const QString &tag, extrastyle_id style) override
Loads the extra activity and remove activity sprites.
QPixmap * activity_sprite(unit_activity id, const extra_type *extra) const
Returns the sprite used to represent a given activity on the map.
QPixmap * load_sprite(const QStringList &possible_names, bool required=false, bool verbose=true) const
Shortcut to load a sprite from the tileset.
Definition: layer.cpp:79
#define extra_index(_e_)
Definition: extras.h:163
#define fc_assert(condition)
Definition: log.h:89
Definition: path.cpp:10
char rmact_gfx[MAX_LEN_NAME]
Definition: extras.h:87
char act_gfx_alt[MAX_LEN_NAME]
Definition: extras.h:85
char rmact_gfx_alt[MAX_LEN_NAME]
Definition: extras.h:88
int id
Definition: extras.h:75
char activity_gfx[MAX_LEN_NAME]
Definition: extras.h:84
char act_gfx_alt2[MAX_LEN_NAME]
Definition: extras.h:86
int fc_strcasecmp(const char *str0, const char *str1)
Compare strings like strcmp(), but ignoring case.
Definition: support.cpp:89