Skip to content

Commit 5b9e357

Browse files
author
s.kushnirenko
committed
buildings: create copper mine class, moved config to js
1 parent 4bf4cbd commit 5b9e357

File tree

10 files changed

+128
-84
lines changed

10 files changed

+128
-84
lines changed

src/building/building.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,9 +216,6 @@ static void building_new_fill_in_data_for_type(building* b, e_building_type type
216216
case BUILDING_GRANITE_QUARRY:
217217
b->output_resource_first_id = RESOURCE_GRANITE;
218218
break;
219-
case BUILDING_COPPER_MINE:
220-
b->output_resource_first_id = RESOURCE_COPPER;
221-
break;
222219
case BUILDING_SANDSTONE_QUARRY:
223220
b->output_resource_first_id = RESOURCE_SANDSTONE;
224221
break;
@@ -325,6 +322,7 @@ building_impl *building::dcast() {
325322
case BUILDING_CONSERVATORY: _ptr = new building_conservatory(*this); break;
326323
case BUILDING_PHYSICIAN: _ptr = new building_physician(*this); break;
327324
case BUILDING_GEMSTONE_MINE: _ptr = new building_mine_gems(*this); break;
325+
case BUILDING_COPPER_MINE: _ptr = new building_mine_copper(*this); break;
328326

329327
case BUILDING_VILLAGE_PALACE:
330328
case BUILDING_TOWN_PALACE:

src/building/building_raw_material.cpp

Lines changed: 39 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -23,49 +23,39 @@
2323

2424
namespace 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

5042
ANK_REGISTER_CONFIG_ITERATOR(config_load_building_raw_materials);
5143
void 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

7161
static 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) {
114104
void 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+
120108
void 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

141136
int 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

156148
void 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

164156
void 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

168160
void 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

172164
int 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-
}

src/building/building_raw_material.h

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55
void building_marble_quarry_draw_info(object_info& c);
66
void building_limestone_quarry_draw_info(object_info& c);
77
void building_timber_yard_draw_info(object_info& c);
8-
void building_copper_mine_draw_info(object_info &c);
98
void building_reed_gatherer_draw_info(object_info& c);
109
void building_sandstone_quarry_draw_info(object_info &c);
1110
void building_granite_quarry_draw_info(object_info &c);
1211

12+
namespace model {
13+
struct raw_building_t;
14+
}
15+
1316
class building_clay_pit : public building_impl {
1417
public:
1518
building_clay_pit(building &b) : building_impl(b) {}
@@ -20,22 +23,27 @@ class building_clay_pit : public building_impl {
2023
virtual bool draw_ornaments_and_animations_height(painter &ctx, vec2i point, tile2i tile, color color_mask) override;
2124
};
2225

23-
class building_mine_gold : public building_impl {
26+
class building_mine : public building_impl {
2427
public:
25-
building_mine_gold(building &b) : building_impl(b) {}
28+
building_mine(building &b) : building_impl(b) {}
2629
virtual void on_create() override;
30+
virtual const model::raw_building_t &params() const = 0;
2731
virtual void window_info_background(object_info &c) override;
28-
virtual int get_produce_uptick_per_day() const override;
2932
virtual bool draw_ornaments_and_animations_height(painter &ctx, vec2i point, tile2i tile, color color_mask) override;
3033
};
3134

32-
class building_mine_gems : public building_impl {
35+
class building_mine_gold : public building_mine {
3336
public:
34-
building_mine_gems(building &b) : building_impl(b) {}
35-
virtual void on_create() override;
36-
virtual void window_info_background(object_info &c) override;
37+
building_mine_gold(building &b) : building_mine(b) {}
38+
virtual const model::raw_building_t &params() const override;
3739
virtual int get_produce_uptick_per_day() const override;
38-
virtual bool draw_ornaments_and_animations_height(painter &ctx, vec2i point, tile2i tile, color color_mask) override;
40+
};
41+
42+
class building_mine_gems : public building_mine {
43+
public:
44+
building_mine_gems(building &b) : building_mine(b) {}
45+
virtual const model::raw_building_t &params() const override;
46+
virtual int get_produce_uptick_per_day() const override { return base.num_workers / 10.f; }
3947
};
4048

4149
class building_quarry_stone : public building_impl {
@@ -45,3 +53,10 @@ class building_quarry_stone : public building_impl {
4553
virtual void window_info_background(object_info &c) override;
4654
virtual int get_produce_uptick_per_day() const override { return base.num_workers / 2.f; }
4755
};
56+
57+
class building_mine_copper : public building_mine {
58+
public:
59+
building_mine_copper(building &b) : building_mine(b) {}
60+
virtual const model::raw_building_t &params() const override;
61+
virtual int get_produce_uptick_per_day() const override { return base.num_workers / 2.f; }
62+
};

src/js/js.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ void js_reset_vm_state() {
242242
js_register_city_images(vm.J);
243243
js_register_collection_images(vm.J);
244244
js_register_ui_fonts(vm.J);
245+
js_register_city_resources(vm.J);
245246

246247
int ok = js_vm_load_file_and_exec(":modules.js");
247248
if (ok) {

src/js/js_constants.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,49 @@ void js_register_city_overlays(js_State *J) {
187187
REGISTER_GLOBAL_CONSTANT(J, OVERLAY_HEALTH);
188188
REGISTER_GLOBAL_CONSTANT(J, OVERLAY_LABOR);
189189
REGISTER_GLOBAL_CONSTANT(J, OVERLAY_COUTHOUSE);
190+
}
191+
192+
void js_register_city_resources(js_State *J) {
193+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_NONE);
194+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_MIN);
195+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_FOOD_MIN);
196+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_GRAIN);
197+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_MEAT);
198+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_LETTUCE);
199+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_CHICKPEAS);
200+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_POMEGRANATES);
201+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_FIGS);
202+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_FISH);
203+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_GAMEMEAT);
204+
REGISTER_GLOBAL_CONSTANT(J, RESOURCES_FOODS_MAX);
205+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_STRAW);
206+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_WEAPONS);
207+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_CLAY);
208+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_BRICKS);
209+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_POTTERY);
210+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_BARLEY);
211+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_BEER);
212+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_FLAX);
213+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_LINEN);
214+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_GEMS);
215+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_LUXURY_GOODS);
216+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_TIMBER);
217+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_GOLD);
218+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_REEDS);
219+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_PAPYRUS);
220+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_STONE);
221+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_LIMESTONE);
222+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_GRANITE);
223+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_UNUSED12);
224+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_CHARIOTS);
225+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_COPPER);
226+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_SANDSTONE);
227+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_OIL);
228+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_HENNA);
229+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_PAINT);
230+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_LAMPS);
231+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_MARBLE);
232+
REGISTER_GLOBAL_CONSTANT(J, RESOURCES_MAX);
233+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_DEBEN);
234+
REGISTER_GLOBAL_CONSTANT(J, RESOURCE_TROOPS);
190235
}

src/js/js_constants.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ void js_register_city_walkers(js_State *J);
99
void js_register_city_images(js_State *J);
1010
void js_register_city_labor_category(js_State *J);
1111
void js_register_collection_images(js_State *J);
12-
void js_register_ui_fonts(js_State *J);
12+
void js_register_ui_fonts(js_State *J);
13+
void js_register_city_resources(js_State *J);

src/scripts/building_info.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,20 +84,35 @@ building_clay_pit = {
8484
animations : {
8585
work : { pos : [-1, -1], anim_id: IMG_CLAY_PIT }
8686
},
87+
output_resource : RESOURCE_CLAY,
88+
meta_id : "clay_pit",
89+
labor_category : LABOR_CATEGORY_INDUSTRY_COMMERCE,
90+
}
91+
92+
building_copper_mine = {
93+
animations : {
94+
work : { pos : [54, 15], anim_id: ANIM_GOLD_MINE, max_frames: 16 }
95+
},
96+
output_resource : RESOURCE_COPPER,
97+
meta_id : "copper_mine",
8798
labor_category : LABOR_CATEGORY_INDUSTRY_COMMERCE,
8899
}
89100

90101
building_gems_mine = {
91102
animations : {
92103
work : { pos : [54, 15], anim_id: ANIM_GOLD_MINE, max_frames: 16 }
93104
},
105+
output_resource : RESOURCE_GEMS,
106+
meta_id : "gems_mine",
94107
labor_category : LABOR_CATEGORY_INDUSTRY_COMMERCE,
95108
}
96109

97110
building_gold_mine = {
98111
animations : {
99112
work : { pos : [54, 15], anim_id: ANIM_GOLD_MINE, max_frames: 16 }
100113
},
114+
output_resource : RESOURCE_GOLD,
115+
meta_id : "gold_mine",
101116
labor_category : LABOR_CATEGORY_INDUSTRY_COMMERCE,
102117
}
103118

src/scripts/common.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ var medium_statue_images = []
2222
var big_statue_images = []
2323
var top_menu_bar = {}
2424
var main_menu_window = {}
25+
var building_copper_mine = {}
2526
var building_gems_mine = {}
2627
var building_physician = {}
2728
var building_small_statue = {}

src/widget/city/ornaments.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -295,10 +295,6 @@ void draw_ornaments_and_animations_height(vec2i point, tile2i tile, painter &ctx
295295
draw_water_lift_anim(ctx, b, point.x, point.y, color_mask);
296296
break;
297297

298-
case BUILDING_COPPER_MINE:
299-
building_draw_normal_anim(ctx, point + vec2i{54, 15}, b, tile, image_group(ANIM_GOLD_MINE) - 1, color_mask);
300-
break;
301-
302298
case BUILDING_STONE_QUARRY:
303299
case BUILDING_LIMESTONE_QUARRY:
304300
case BUILDING_GRANITE_QUARRY:

src/window/window_building_info.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -545,7 +545,6 @@ static void draw_refresh_background() {
545545
case BUILDING_LIMESTONE_QUARRY: building_limestone_quarry_draw_info(context); break;
546546
case BUILDING_WOOD_CUTTERS: building_timber_yard_draw_info(context); break;
547547
case BUILDING_REED_GATHERER: building_reed_gatherer_draw_info(context); break;
548-
case BUILDING_COPPER_MINE: building_copper_mine_draw_info(context); break;
549548
case BUILDING_SANDSTONE_QUARRY: building_sandstone_quarry_draw_info(context); break;
550549
case BUILDING_GRANITE_QUARRY: building_granite_quarry_draw_info(context); break;;
551550
case BUILDING_WEAVER_WORKSHOP: building_flax_workshop_draw_info(context); break;

0 commit comments

Comments
 (0)