Skip to content

Commit 773e3cf

Browse files
committed
building: show preview for temple complex upgrade oracle
1 parent 86f8513 commit 773e3cf

File tree

6 files changed

+69
-14
lines changed

6 files changed

+69
-14
lines changed

src/building/building.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ building_wharf *building::dcast_wharf() { return dcast()->dcast_wharf(); }
241241
building_warship_wharf *building::dcast_warship_wharf() { return dcast()->dcast_warship_wharf(); }
242242
building_temple_complex *building::dcast_temple_complex() { return dcast()->dcast_temple_complex(); }
243243
building_temple_complex_altar *building::dcast_temple_complex_altar() { return dcast()->dcast_temple_complex_altar(); }
244+
building_temple_complex_oracle *building::dcast_temple_complex_oracle() { return dcast()->dcast_temple_complex_oracle(); }
244245

245246
building::building() {
246247
}
@@ -1081,6 +1082,7 @@ void building_impl::static_params::load(archive arch) {
10811082
needs.rock = arch.r_bool("need_rock");
10821083
needs.ore = arch.r_bool("need_ore");
10831084
needs.altar = arch.r_bool("need_altar");
1085+
needs.oracle = arch.r_bool("need_oracle");
10841086

10851087
city_labor_set_category(type, labor_category);
10861088

@@ -1211,6 +1213,7 @@ bool building_impl::static_params::planer_is_need_flag(e_building_flags flag) co
12111213
case e_building_flag::Rock: return needs.rock;
12121214
case e_building_flag::Ore: return needs.ore;
12131215
case e_building_flag::TempleUpgradeAltar: return needs.altar;
1216+
case e_building_flag::TempleUpgradeOracle: return needs.oracle;
12141217
}
12151218

12161219
return false;

src/building/building.h

+4
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class building_shrine;
8181
class building_transport_wharf;
8282
class building_temple_complex;
8383
class building_temple_complex_altar;
84+
class building_temple_complex_oracle;
8485
struct tooltip_context;
8586
struct object_info;
8687
struct painter;
@@ -493,6 +494,7 @@ class building {
493494
building_warship_wharf *dcast_warship_wharf();
494495
building_temple_complex *dcast_temple_complex();
495496
building_temple_complex_altar *dcast_temple_complex_altar();
497+
building_temple_complex_oracle *dcast_temple_complex_oracle();
496498

497499
bool spawn_noble(bool spawned);
498500
void set_water_supply_graphic();
@@ -557,6 +559,7 @@ class building_impl {
557559
bool rock;
558560
bool ore;
559561
bool altar;
562+
bool oracle;
560563
} needs;
561564

562565
void load(archive arch);
@@ -674,6 +677,7 @@ class building_impl {
674677
virtual building_transport_wharf *dcast_transport_wharf() { return nullptr; }
675678
virtual building_temple_complex *dcast_temple_complex() { return nullptr; }
676679
virtual building_temple_complex_altar *dcast_temple_complex_altar() { return nullptr; }
680+
virtual building_temple_complex_oracle *dcast_temple_complex_oracle() { return nullptr; }
677681

678682
inline building_impl *next() { return base.next()->dcast(); }
679683
inline building_impl *main() { return base.main()->dcast(); }

src/building/building_temple_complex.cpp

+26-5
Original file line numberDiff line numberDiff line change
@@ -160,13 +160,21 @@ void building_temple_complex::static_params_t<T>::planer_setup_preview_graphics(
160160
}
161161
}
162162

163-
void building_temple_complex_altar::static_params::planer_ghost_preview(build_planner &planer, painter &ctx, tile2i tile, tile2i end, vec2i pixel) const {
163+
template<typename T>
164+
void building_temple_complex_upgrade::static_params_t<T>::planer_ghost_preview(build_planner &planer, painter &ctx, tile2i tile, tile2i end, vec2i pixel) const {
164165
int city_orientation = city_view_orientation() / 2;
165166
int orientation = (1 + building_rotation_global_rotation() + city_orientation) % 2;
166-
int image_id = anim[animkeys().base].first_img() + orientation;
167+
int image_id = this->anim[animkeys().base].first_img() + orientation;
167168
auto complex = building_at_ex<building_temple_complex>(end);
168169
if (complex) {
169-
building *altar = complex->get_altar();
170+
building *upgrade_base = nullptr;
171+
if (this->TYPE == BUILDING_TEMPLE_COMPLEX_ALTAR) {
172+
upgrade_base = complex->get_altar();
173+
} else if (this->TYPE == BUILDING_TEMPLE_COMPLEX_ORACLE) {
174+
upgrade_base = complex->get_oracle();
175+
} else {
176+
upgrade_base = &complex->main()->base;
177+
}
170178

171179
tile2i offset = { 0, 0 };
172180
int bsize = building_size - 1;
@@ -177,8 +185,8 @@ void building_temple_complex_altar::static_params::planer_ghost_preview(build_pl
177185
case 3: offset = { bsize, bsize }; break;
178186
}
179187

180-
vec2i pixel_altar = tile_to_pixel(altar->tile.shifted(offset));
181-
planer.draw_building_ghost(ctx, image_id, pixel_altar);
188+
vec2i pixel_upgrade = tile_to_pixel(upgrade_base->tile.shifted(offset));
189+
planer.draw_building_ghost(ctx, image_id, pixel_upgrade);
182190
}
183191
}
184192

@@ -188,6 +196,7 @@ building_temple_complex_ptah::static_params building_temple_complex_ptah_m;
188196
building_temple_complex_seth::static_params building_temple_complex_seth_m;
189197
building_temple_complex_bast::static_params building_temple_complex_bast_m;
190198
building_temple_complex_altar::static_params building_temple_complex_altar_m;
199+
building_temple_complex_oracle::static_params building_temple_complex_oracle_m;
191200

192201
void building_temple_complex::on_create(int orientation) {
193202
data.monuments.variant = (10 - (2 * orientation)) % 8; // ugh!
@@ -249,6 +258,18 @@ building *building_temple_complex::get_altar() const {
249258
return next;
250259
}
251260

261+
building *building_temple_complex::get_oracle() const {
262+
building *next = base.next();
263+
while (next) {
264+
if (next->type == BUILDING_TEMPLE_COMPLEX_ORACLE) {
265+
break;
266+
}
267+
next = next->next();
268+
}
269+
270+
return next;
271+
}
272+
252273
void building_temple_complex::update_count() const {
253274
const bool is_active = num_workers() > 0;
254275
g_city.buildings.track_building(base, is_active);

src/building/building_temple_complex.h

+23-4
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,41 @@ class building_temple_complex : public building_impl {
3535
void set_attachement(e_temple_compex_attachement a) { data.monuments.temple_complex_attachments |= a; }
3636

3737
building *get_altar() const;
38+
building *get_oracle() const;
3839

3940
virtual e_sound_channel_city sound_channel() const override { return SOUND_CHANNEL_CITY_NONE; }
4041
};
4142

42-
class building_temple_complex_altar : public building_impl {
43+
class building_temple_complex_upgrade : public building_impl {
4344
public:
44-
BUILDING_METAINFO(BUILDING_TEMPLE_COMPLEX_ALTAR, building_temple_complex_altar)
45-
building_temple_complex_altar(building &b) : building_impl(b) {}
45+
building_temple_complex_upgrade(building &b) : building_impl(b) {}
4646

47-
struct static_params : public buildings::model_t<building_temple_complex_altar> {
47+
template<typename T>
48+
struct static_params_t : public buildings::model_t<T> {
4849
virtual void planer_ghost_preview(build_planner &p, painter &ctx, tile2i tile, tile2i end, vec2i pixel) const override;
4950
};
51+
};
52+
53+
class building_temple_complex_altar : public building_temple_complex_upgrade {
54+
public:
55+
BUILDING_METAINFO(BUILDING_TEMPLE_COMPLEX_ALTAR, building_temple_complex_altar)
56+
building_temple_complex_altar(building &b) : building_temple_complex_upgrade(b) {}
57+
58+
using static_params = static_params_t<building_temple_complex_altar>;
5059

5160
virtual building_temple_complex_altar *dcast_temple_complex_altar() override { return this; }
5261
};
5362

63+
class building_temple_complex_oracle : public building_temple_complex_upgrade {
64+
public:
65+
BUILDING_METAINFO(BUILDING_TEMPLE_COMPLEX_ORACLE, building_temple_complex_oracle)
66+
building_temple_complex_oracle(building &b) : building_temple_complex_upgrade(b) {}
67+
68+
using static_params = static_params_t<building_temple_complex_oracle>;
69+
70+
virtual building_temple_complex_oracle *dcast_temple_complex_oracle() override { return this; }
71+
};
72+
5473
class building_temple_complex_osiris : public building_temple_complex {
5574
public:
5675
BUILDING_METAINFO(BUILDING_TEMPLE_COMPLEX_OSIRIS, building_temple_complex_osiris)

src/building/construction/build_planner.cpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,8 @@ void build_planner::setup_build(e_building_type type) { // select building for c
467467
void build_planner::setup_build_flags() {
468468
const auto &params = building_impl::params(build_type);
469469

470-
const e_building_flag flags[] = { e_building_flag::Meadow, e_building_flag::Rock, e_building_flag::Ore, e_building_flag::TempleUpgradeAltar };
470+
const e_building_flag flags[] = { e_building_flag::Meadow, e_building_flag::Rock, e_building_flag::Ore, e_building_flag::TempleUpgradeAltar,
471+
e_building_flag::TempleUpgradeOracle, };
471472

472473
for (const auto flag: flags) {
473474
const bool is_need = params.planer_is_need_flag(flag);
@@ -565,10 +566,6 @@ void build_planner::setup_build_flags() {
565566
case BUILDING_CLEAR_LAND:
566567
set_flag(e_building_flag::IgnoreNearbyEnemy);
567568
break;
568-
569-
case BUILDING_TEMPLE_COMPLEX_ORACLE:
570-
set_flag(e_building_flag::TempleUpgradeOracle);
571-
break;
572569
}
573570

574571
if (building_is_draggable(build_type)) {

src/scripts/buildings.js

+11
Original file line numberDiff line numberDiff line change
@@ -1956,6 +1956,17 @@ building building_temple_complex_altar = {
19561956
need_altar : true,
19571957
}
19581958

1959+
building building_temple_complex_oracle = {
1960+
animations : {
1961+
preview : { pack:PACK_TEMPLE_NILE, id:7, offset:2},
1962+
base : { pack:PACK_TEMPLE_NILE, id:7, offset:2},
1963+
},
1964+
1965+
building_size : 3,
1966+
labor_category : LABOR_CATEGORY_RELIGION,
1967+
need_oracle : true,
1968+
}
1969+
19591970
building building_temple_complex_altar_ra = {
19601971
animations : {
19611972
preview : { pack:PACK_GENERAL, id:42},

0 commit comments

Comments
 (0)