Freeciv21
Develop your civilization from humble roots to a global empire
multipliers.cpp
Go to the documentation of this file.
1 /*
2 _ ._ Copyright (c) 1996-2021 Freeciv21 and Freeciv contributors.
3  \ | This file is part of Freeciv21. Freeciv21 is free software: you
4  \_| can redistribute it and/or modify it under the terms of the
5  .' '. GNU General Public License as published by the Free
6  :O O: Software Foundation, either version 3 of the License,
7  '/ \' or (at your option) any later version. You should have
8  :X: received a copy of the GNU General Public License along with
9  :X: Freeciv21. If not, see https://www.gnu.org/licenses/.
10  */
11 
12 // utility
13 #include "fcintl.h"
14 
15 // common
16 #include "game.h"
17 
18 #include "multipliers.h"
19 
21 
26 {
27  int i;
28 
29  for (i = 0; i < ARRAY_SIZE(multipliers); i++) {
31  requirement_vector_init(&multipliers[i].reqs);
32  multipliers[i].ruledit_disabled = false;
33  multipliers[i].helptext = nullptr;
34  }
35 }
36 
41 {
43  {
44  requirement_vector_free(&(pmul->reqs));
45  delete pmul->helptext;
46  pmul->helptext = nullptr;
47  }
49 }
50 
55 {
56  fc_assert_ret_val(id >= 0 && id < game.control.num_multipliers, nullptr);
57 
58  return &multipliers[id];
59 }
60 
65 {
66  fc_assert_ret_val(nullptr != pmul, 0);
67 
68  return pmul - multipliers;
69 }
70 
78 {
79  return multiplier_number(pmul);
80 }
81 
86 {
87  return game.control.num_multipliers;
88 }
89 
94 const char *multiplier_name_translation(const struct multiplier *pmul)
95 {
96  return name_translation_get(&pmul->name);
97 }
98 
103 const char *multiplier_rule_name(const struct multiplier *pmul)
104 {
105  return rule_name_get(&pmul->name);
106 }
107 
113 {
114  const char *qs;
115 
116  if (name == nullptr) {
117  return nullptr;
118  }
119 
120  qs = Qn_(name);
121 
122  multipliers_iterate(pmul)
123  {
124  if (!fc_strcasecmp(multiplier_rule_name(pmul), qs)) {
125  return pmul;
126  }
127  }
129 
130  return nullptr;
131 }
132 
137  struct player *pplayer)
138 {
139  return are_reqs_active(pplayer, nullptr, nullptr, nullptr, nullptr,
140  nullptr, nullptr, nullptr, nullptr, nullptr,
141  &pmul->reqs, RPT_CERTAIN);
142 }
struct @19::@20 reqs
@ RPT_CERTAIN
Definition: fc_types.h:568
#define MAX_NUM_MULTIPLIERS
Definition: fc_types.h:49
int Multiplier_type_id
Definition: fc_types.h:303
#define Qn_(String)
Definition: fcintl.h:66
struct civ_game game
Definition: game.cpp:47
const char * name
Definition: inputfile.cpp:118
#define fc_assert_ret_val(condition, val)
Definition: log.h:114
struct multiplier * multiplier_by_number(Multiplier_type_id id)
Returns multiplier associated to given number.
Definition: multipliers.cpp:54
const char * multiplier_rule_name(const struct multiplier *pmul)
Return the (untranslated) rule name of the multiplier.
void multipliers_free()
Free all multipliers.
Definition: multipliers.cpp:40
const char * multiplier_name_translation(const struct multiplier *pmul)
Return the (translated) name of the multiplier.
Definition: multipliers.cpp:94
bool multiplier_can_be_changed(struct multiplier *pmul, struct player *pplayer)
Can player change multiplier value.
Multiplier_type_id multiplier_number(const struct multiplier *pmul)
Returns multiplier number.
Definition: multipliers.cpp:64
static struct multiplier multipliers[MAX_NUM_MULTIPLIERS]
Definition: multipliers.cpp:20
Multiplier_type_id multiplier_count()
Return number of loaded multipliers in the ruleset.
Definition: multipliers.cpp:85
struct multiplier * multiplier_by_rule_name(const char *name)
Returns multiplier matching rule name, or nullptr if there is no multiplier with such a name.
void multipliers_init()
Initialize all multipliers.
Definition: multipliers.cpp:25
Multiplier_type_id multiplier_index(const struct multiplier *pmul)
Returns multiplier index.
Definition: multipliers.cpp:77
#define multipliers_iterate(_mul_)
Definition: multipliers.h:45
#define multipliers_iterate_end
Definition: multipliers.h:51
static const char * rule_name_get(const struct name_translation *ptrans)
static const char * name_translation_get(const struct name_translation *ptrans)
static void name_init(struct name_translation *ptrans)
bool are_reqs_active(const struct player *target_player, const struct player *other_player, const struct city *target_city, const struct impr_type *target_building, const struct tile *target_tile, const struct unit *target_unit, const struct unit_type *target_unittype, const struct output_type *target_output, const struct specialist *target_specialist, const struct action *target_action, const struct requirement_vector *reqs, const enum req_problem_type prob_type, const enum vision_layer vision_layer, const enum national_intelligence nintel)
Checks the requirement(s) to see if they are active on the given target.
#define ARRAY_SIZE(x)
Definition: shared.h:79
struct packet_ruleset_control control
Definition: game.h:74
struct requirement_vector reqs
Definition: multipliers.h:25
QVector< QString > * helptext
Definition: multipliers.h:26
Multiplier_type_id id
Definition: multipliers.h:15
bool ruledit_disabled
Definition: multipliers.h:17
struct name_translation name
Definition: multipliers.h:16
Definition: player.h:231
int fc_strcasecmp(const char *str0, const char *str1)
Compare strings like strcmp(), but ignoring case.
Definition: support.cpp:89