2323
2424namespace model {
2525
26- struct clay_pit_t {
27- static constexpr e_building_type type = BUILDING_CLAY_PIT;
26+ struct raw_building_t {
27+ const e_building_type type;
28+ const pcstr name;
29+ bstring64 meta_id;
30+ e_resource output_resource;
2831 e_labor_category labor_category;
2932 animations_t anim;
3033};
3134
32- struct gold_mine_t {
33- static constexpr e_building_type type = BUILDING_GOLD_MINE;
34- e_labor_category labor_category;
35- animations_t anim;
36- };
37-
38- struct gems_mine_t {
39- static constexpr e_building_type type = BUILDING_GEMSTONE_MINE;
40- e_labor_category labor_category;
41- animations_t anim;
42- };
43-
44- clay_pit_t clay_pit;
45- gold_mine_t gold_mine;
46- gems_mine_t gems_mine;
35+ raw_building_t clay_pit{BUILDING_CLAY_PIT, " building_clay_pit" };
36+ raw_building_t gold_mine{BUILDING_GOLD_MINE, " building_gold_mine" };
37+ raw_building_t gems_mine{BUILDING_GEMSTONE_MINE, " building_gems_mine" };
38+ raw_building_t copper_mine{BUILDING_COPPER_MINE, " building_copper_mine" };
4739
4840}
4941
5042ANK_REGISTER_CONFIG_ITERATOR (config_load_building_raw_materials);
5143void config_load_building_raw_materials () {
52- g_config_arch.r_section (" building_clay_pit" , [] (archive arch) {
53- model::clay_pit.labor_category = arch.r_type <e_labor_category>(" labor_category" );
54- model::clay_pit.anim .load (arch);
55- city_labor_set_category (model::clay_pit);
56- });
44+ auto load_raw_material_model = [] (model::raw_building_t &model) {
45+ g_config_arch.r_section (model.name , [&model] (archive arch) {
46+ model.labor_category = arch.r_type <e_labor_category>(" labor_category" );
47+ model.output_resource = arch.r_type <e_resource>(" output_resource" );
48+ model.meta_id = arch.r_string (" meta_id" );
49+ model.anim .load (arch);
50+ city_labor_set_category (model);
51+ });
5752
58- g_config_arch.r_section (" building_gold_mine" , [] (archive arch) {
59- model::gold_mine.labor_category = arch.r_type <e_labor_category>(" labor_category" );
60- model::gold_mine.anim .load (arch);
61- city_labor_set_category (model::gold_mine);
62- });
53+ };
6354
64- g_config_arch.r_section (" building_gems_mine" , [] (archive arch) {
65- model::gems_mine.labor_category = arch.r_type <e_labor_category>(" labor_category" );
66- model::gems_mine.anim .load (arch);
67- city_labor_set_category (model::gems_mine);
68- });
55+ load_raw_material_model (model::clay_pit);
56+ load_raw_material_model (model::gold_mine);
57+ load_raw_material_model (model::gems_mine);
58+ load_raw_material_model (model::copper_mine);
6959}
7060
7161static void building_raw_material_draw_info (object_info& c, const char * type, e_resource resource) {
@@ -114,9 +104,7 @@ void building_marble_quarry_draw_info(object_info& c) {
114104void building_limestone_quarry_draw_info (object_info& c) {
115105 building_raw_material_draw_info (c, " limestone_quarry" , RESOURCE_LIMESTONE);
116106}
117- void building_copper_mine_draw_info (object_info& c) {
118- building_raw_material_draw_info (c, " copper_mine" , RESOURCE_COPPER);
119- }
107+
120108void building_timber_yard_draw_info (object_info& c) {
121109 building_raw_material_draw_info (c, " timber_yard" , RESOURCE_TIMBER);
122110}
@@ -130,12 +118,19 @@ void building_granite_quarry_draw_info(object_info& c) {
130118 building_raw_material_draw_info (c, " granite_quarry" , RESOURCE_SANDSTONE);
131119}
132120
133- void building_mine_gold::on_create () {
134- base.output_resource_first_id = RESOURCE_GOLD;
121+ void building_mine::on_create () {
122+ base.output_resource_first_id = params ().output_resource ;
123+ }
124+
125+ void building_mine::window_info_background (object_info &c) {
126+ building_raw_material_draw_info (c, params ().meta_id .c_str (), params ().output_resource );
135127}
136128
137- void building_mine_gold::window_info_background (object_info &c) {
138- building_raw_material_draw_info (c, " gold_mine" , RESOURCE_GOLD);
129+ bool building_mine::draw_ornaments_and_animations_height (painter &ctx, vec2i point, tile2i tile, color color_mask) {
130+ const animation_t &anim = params ().anim [" work" ];
131+ building_draw_normal_anim (ctx, point, &base, tile, anim, color_mask);
132+
133+ return true ;
139134}
140135
141136int building_mine_gold::get_produce_uptick_per_day () const {
@@ -146,12 +141,9 @@ int building_mine_gold::get_produce_uptick_per_day() const {
146141 }
147142}
148143
149- bool building_mine_gold::draw_ornaments_and_animations_height (painter &ctx, vec2i point, tile2i tile, color color_mask) {
150- const animation_t &anim = model::gold_mine.anim [" work" ];
151- building_draw_normal_anim (ctx, point, &base, tile, anim, color_mask);
152-
153- return true ;
154- }
144+ const model::raw_building_t &building_mine_gold::params () const { return model::gold_mine; }
145+ const model::raw_building_t &building_mine_copper::params () const { return model::copper_mine; }
146+ const model::raw_building_t &building_mine_gems::params () const { return model::gems_mine; }
155147
156148void building_quarry_stone::on_create () {
157149 base.output_resource_first_id = RESOURCE_STONE;
@@ -162,11 +154,11 @@ void building_quarry_stone::window_info_background(object_info &c) {
162154}
163155
164156void building_clay_pit::on_create () {
165- base.output_resource_first_id = RESOURCE_CLAY ;
157+ base.output_resource_first_id = model::clay_pit. output_resource ;
166158}
167159
168160void building_clay_pit::window_info_background (object_info &c) {
169- building_raw_material_draw_info (c, " clay_pit" , RESOURCE_CLAY );
161+ building_raw_material_draw_info (c, model:: clay_pit. meta_id , model::clay_pit. output_resource );
170162}
171163
172164int building_clay_pit::get_fire_risk (int value) const {
@@ -183,22 +175,3 @@ bool building_clay_pit::draw_ornaments_and_animations_height(painter &ctx, vec2i
183175
184176 return true ;
185177}
186-
187- void building_mine_gems::on_create () {
188- base.output_resource_first_id = RESOURCE_GEMS;
189- }
190-
191- int building_mine_gems::get_produce_uptick_per_day () const {
192- return base.num_workers / 10 .f ;
193- }
194-
195- void building_mine_gems::window_info_background (object_info &c) {
196- building_raw_material_draw_info (c, " gems_mine" , RESOURCE_GEMS);
197- }
198-
199- bool building_mine_gems::draw_ornaments_and_animations_height (painter &ctx, vec2i point, tile2i tile, color color_mask) {
200- const animation_t &anim = model::gold_mine.anim [" work" ];
201- building_draw_normal_anim (ctx, point, &base, tile, anim, color_mask);
202-
203- return true ;
204- }
0 commit comments