1 #ifndef _CommonParams_h_
2 #define _CommonParams_h_
3 
4 
5 #include <map>
6 #include <memory>
7 #include <set>
8 #include <string>
9 #include <vector>
10 
11 #include "EnumsFwd.h"
12 
13 #include "../util/Export.h"
14 
15 
16 namespace Condition {
17     struct Condition;
18 }
19 namespace Effect {
20     class EffectsGroup;
21 }
22 namespace ValueRef {
23     template <typename T>
24     struct ValueRef;
25 }
26 
27 template <typename T>
28 using ConsumptionMap = std::map<T, std::pair<std::unique_ptr<ValueRef::ValueRef<double>>,
29                                              std::unique_ptr<Condition::Condition>>>;
30 
31 //! Common parameters for ShipPart, ShipHull, and BuildingType constructors.
32 //!
33 //! Used as temporary storage for parsing to reduce number of sub-items parsed
34 //! per item.
35 struct FO_COMMON_API CommonParams {
36     CommonParams();
37     CommonParams(std::unique_ptr<ValueRef::ValueRef<double>>&& production_cost_,
38                  std::unique_ptr<ValueRef::ValueRef<int>>&& production_time_,
39                  bool producible_,
40                  const std::set<std::string>& tags_,
41                  std::unique_ptr<Condition::Condition>&& location_,
42                  std::vector<std::unique_ptr<Effect::EffectsGroup>>&& effects_,
43                  ConsumptionMap<MeterType>&& production_meter_consumption_,
44                  ConsumptionMap<std::string>&& production_special_consumption_,
45                  std::unique_ptr<Condition::Condition>&& enqueue_location_);
46     ~CommonParams();
47 
48     std::unique_ptr<ValueRef::ValueRef<double>>         production_cost;
49     std::unique_ptr<ValueRef::ValueRef<int>>            production_time;
50     bool                                                producible = true;
51     std::set<std::string>                               tags;
52     ConsumptionMap<MeterType>                           production_meter_consumption;
53     ConsumptionMap<std::string>                         production_special_consumption;
54     std::unique_ptr<Condition::Condition>               location;
55     std::unique_ptr<Condition::Condition>               enqueue_location;
56     std::vector<std::unique_ptr<Effect::EffectsGroup>>  effects;
57 };
58 
59 struct MoreCommonParams {
MoreCommonParamsMoreCommonParams60     MoreCommonParams() :
61         name(),
62         description(),
63         exclusions()
64     {}
MoreCommonParamsMoreCommonParams65     MoreCommonParams(const std::string& name_, const std::string& description_,
66                      const std::set<std::string>& exclusions_) :
67         name(name_),
68         description(description_),
69         exclusions(exclusions_)
70     {}
71     std::string             name;
72     std::string             description;
73     std::set<std::string>   exclusions;
74 };
75 
76 #endif // _CommonParams_h_
77