Skip to content

Commit ef6f620

Browse files
author
s.kushnirenko
committed
refactor: city data for rectuiter building make as struct
1 parent 68b14ca commit ef6f620

File tree

6 files changed

+47
-43
lines changed

6 files changed

+47
-43
lines changed

src/building/building.cpp

+6-3
Original file line numberDiff line numberDiff line change
@@ -492,8 +492,9 @@ void building::clear_related_data() {
492492
if (type == BUILDING_DOCK)
493493
city_buildings_remove_dock();
494494

495-
if (type == BUILDING_RECRUITER)
495+
if (type == BUILDING_RECRUITER) {
496496
city_buildings_remove_recruiter(this);
497+
}
497498

498499
if (type == BUILDING_DISTRIBUTION_CENTER_UNUSED)
499500
city_buildings_remove_distribution_center(this);
@@ -799,11 +800,13 @@ bool building_is_education(e_building_type type) {
799800
}
800801

801802
bool building_is_military(int type) {
802-
if (building_is_fort(type) || type == BUILDING_FORT_GROUND)
803+
if (building_is_fort(type)) {
803804
return true;
805+
}
804806

805-
if (type == BUILDING_MILITARY_ACADEMY || type == BUILDING_RECRUITER)
807+
if (building_type_any_of(BUILDING_MILITARY_ACADEMY, BUILDING_RECRUITER, BUILDING_FORT_GROUND)) {
806808
return true;
809+
}
807810

808811
return false;
809812
}

src/building/building.h

+1
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,7 @@ class building_impl {
404404

405405
virtual bool is_workshop() const { return false; }
406406
virtual bool is_administration() const { return false; }
407+
virtual bool is_unique_building() const { return false; }
407408

408409
using resources_vec = std::array<e_resource, 4>;
409410
virtual resources_vec required_resource() const { return {}; }

src/building/construction/build_planner.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -1920,6 +1920,7 @@ void BuildPlanner::construction_update(tile2i tile) {
19201920

19211921
total_cost = current_cost;
19221922
}
1923+
19231924
void BuildPlanner::construction_finalize() { // confirm final placement
19241925
in_progress = false;
19251926

@@ -1976,9 +1977,11 @@ void BuildPlanner::construction_finalize() { // confirm final placement
19761977
case BUILDING_DYNASTY_MANSION:
19771978
city_buildings_add_mansion(last_created_building);
19781979
break;
1980+
19791981
case BUILDING_RECRUITER:
19801982
city_buildings_add_recruiter(last_created_building);
19811983
break;
1984+
19821985
case BUILDING_FERRY:
19831986
should_recalc_ferry_routes = true;
19841987
break;

src/city/buildings.cpp

+14-22
Original file line numberDiff line numberDiff line change
@@ -51,46 +51,41 @@ void city_buildings_add_mansion(building* mansion) {
5151
}
5252

5353
void city_buildings_remove_mansion(building* mansion) {
54-
if (mansion->tile.grid_offset() == city_data.building.mansion.grid_offset()) {
54+
if (mansion->tile == city_data.building.mansion) {
5555
city_data.building.mansion.set(0);
5656
city_data.building.mansion_placed = 0;
5757
}
5858
}
5959

6060
bool city_buildings_has_recruiter() {
61-
return city_data.building.barracks_placed;
61+
return city_data.building.recruiter.placed;
6262
}
6363

6464
void city_buildings_add_recruiter(building* recruiter) {
65-
city_data.building.barracks_placed = 1;
66-
if (!city_data.building.barracks.grid_offset()) {
67-
city_data.building.barracks_building_id = recruiter->id;
68-
city_data.building.barracks.set(recruiter->tile.grid_offset());
69-
// city_data.building.barracks.x = recruiter->x;
70-
// city_data.building.barracks.y = recruiter->y;
71-
// city_data.building.barracks.grid_offset() = recruiter->grid_offset;
65+
city_data.building.recruiter.placed = true;
66+
if (!city_data.building.recruiter.tile.grid_offset()) {
67+
city_data.building.recruiter.building_id = recruiter->id;
68+
city_data.building.recruiter.tile = recruiter->tile;
7269
}
7370
}
7471

7572
void city_buildings_remove_recruiter(building* recruiter) {
76-
if (recruiter->tile.grid_offset() == city_data.building.barracks.grid_offset()) {
77-
city_data.building.barracks.set(0);
78-
// city_data.building.barracks.grid_offset() = 0;
79-
// city_data.building.barracks.x = 0;
80-
// city_data.building.barracks.y = 0;
81-
city_data.building.barracks_placed = 0;
73+
city_data.building.recruiter.placed = false;
74+
if (recruiter->tile == city_data.building.recruiter.tile) {
75+
city_data.building.recruiter.tile.set(0);
76+
city_data.building.recruiter.placed = 0;
8277
}
8378
}
8479

85-
int city_buildings_get_recruiter(void) {
86-
return city_data.building.barracks_building_id;
80+
int city_buildings_get_recruiter() {
81+
return city_data.building.recruiter.building_id;
8782
}
8883

8984
void city_buildings_set_recruiter(int building_id) {
90-
city_data.building.barracks_building_id = building_id;
85+
city_data.building.recruiter.building_id = building_id;
9186
}
9287

93-
bool city_buildings_has_distribution_center(void) {
88+
bool city_buildings_has_distribution_center() {
9489
return city_data.building.distribution_center_placed;
9590
}
9691

@@ -99,9 +94,6 @@ void city_buildings_add_distribution_center(building* center) {
9994
if (!city_data.building.distribution_center.grid_offset()) {
10095
city_data.building.distribution_center_building_id = center->id;
10196
city_data.building.distribution_center.set(center->tile.grid_offset());
102-
// city_data.building.distribution_center.x = center->x;
103-
// city_data.building.distribution_center.y = center->y;
104-
// city_data.building.distribution_center.grid_offset() = center->grid_offset;
10597
}
10698
}
10799

src/city/city_data.cpp

+9-6
Original file line numberDiff line numberDiff line change
@@ -458,13 +458,16 @@ io_buffer* iob_city_data = new io_buffer([](io_buffer* iob, size_t version) {
458458
iob->bind(BIND_SIGNATURE_INT32, &city_data.emperor.debt_state);
459459
iob->bind(BIND_SIGNATURE_INT32, &city_data.emperor.months_in_debt);
460460
iob->bind(BIND_SIGNATURE_INT32, &city_data.finance.cheated_money);
461-
iob->bind(BIND_SIGNATURE_INT8, city_data.building.barracks.private_access(_X));
462-
iob->bind(BIND_SIGNATURE_INT8, city_data.building.barracks.private_access(_Y));
463-
iob->bind(BIND_SIGNATURE_INT16, city_data.building.barracks.private_access(_GRID_OFFSET));
464-
iob->bind(BIND_SIGNATURE_INT32, &city_data.building.barracks_building_id);
465-
iob->bind(BIND_SIGNATURE_INT32, &city_data.building.barracks_placed);
466-
for (int i = 0; i < 5; i++)
461+
iob->bind(BIND_SIGNATURE_INT8, city_data.building.recruiter.tile.private_access(_X));
462+
iob->bind(BIND_SIGNATURE_INT8, city_data.building.recruiter.tile.private_access(_Y));
463+
iob->bind(BIND_SIGNATURE_INT16, city_data.building.recruiter.tile.private_access(_GRID_OFFSET));
464+
iob->bind(BIND_SIGNATURE_INT32, &city_data.building.recruiter.building_id);
465+
iob->bind(BIND_SIGNATURE_INT32, &city_data.building.recruiter.placed);
466+
467+
for (int i = 0; i < 5; i++) {
467468
iob->bind(BIND_SIGNATURE_INT32, &city_data.unused.unknown_43d8[i]);
469+
}
470+
468471
iob->bind(BIND_SIGNATURE_INT32, &city_data.population.lost_troop_request);
469472
iob->bind(BIND_SIGNATURE_INT32, &city_data.unused.unknown_43f0);
470473
iob->bind(BIND_SIGNATURE_INT32, &city_data.mission.has_won);

src/city/data_private.h

+14-12
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,27 @@ struct city_data_t {
1414
struct {
1515
bool palace_placed;
1616
int32_t palace_building_id;
17-
map_point palace_point;
17+
tile2i palace_point;
1818

1919
bool festival_square_placed;
2020
int32_t festival_building_id;
21-
map_point festival_square;
21+
tile2i festival_square;
2222

2323
bool mansion_placed;
2424
int32_t mansion_building_id;
25-
map_point mansion;
25+
tile2i mansion;
2626

2727
int32_t hippodrome_placed;
2828

29-
bool barracks_placed;
30-
int32_t barracks_building_id;
31-
map_point barracks;
29+
struct {
30+
bool placed;
31+
int32_t building_id;
32+
tile2i tile;
33+
} recruiter;
3234

3335
bool distribution_center_placed;
3436
int32_t distribution_center_building_id;
35-
map_point distribution_center;
37+
tile2i distribution_center;
3638

3739
int32_t trade_center_building_id;
3840
int8_t triumphal_arches_available;
@@ -43,7 +45,7 @@ struct city_data_t {
4345
int16_t working_dock_ids[10];
4446
int16_t working_shipyards;
4547
int32_t mission_post_operational;
46-
map_point main_native_meeting;
48+
tile2i main_native_meeting;
4749
int8_t unknown_value;
4850

4951
bool temple_complex_placed;
@@ -391,10 +393,10 @@ struct city_data_t {
391393
e_resource docker_export_resource;
392394
} trade;
393395
struct {
394-
map_point entry_point;
395-
map_point exit_point;
396-
map_point entry_flag;
397-
map_point exit_flag;
396+
tile2i entry_point;
397+
tile2i exit_point;
398+
tile2i entry_flag;
399+
tile2i exit_flag;
398400
struct {
399401
int32_t id;
400402
int32_t size;

0 commit comments

Comments
 (0)