Skip to content

Commit 82d0226

Browse files
committed
routing: ferry now based from building_routeblock
1 parent 954e160 commit 82d0226

10 files changed

+47
-33
lines changed

src/building/building.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ building_storage *building::dcast_storage() { return dcast()->dcast_storage(); }
276276
building_temple *building::dcast_temple() { return dcast()->dcast_temple(); }
277277
building_tax_collector *building::dcast_tax_collector() { return dcast()->dcast_tax_collector(); }
278278
building_roadblock *building::dcast_roadblock() { return dcast()->dcast_roadblock(); }
279+
building_routeblock *building::dcast_routeblock() { return dcast()->dcast_routeblock(); }
279280
building_mine *building::dcast_mine() { return dcast()->dcast_mine(); }
280281
building_quarry *building::dcast_quarry() { return dcast()->dcast_quarry(); }
281282
building_palace *building::dcast_palace() { return dcast()->dcast_palace(); }

src/building/building.h

+3
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class building_quarry;
6868
class building_palace;
6969
class building_festival_square;
7070
class building_bandstand;
71+
class building_routeblock;
7172
struct tooltip_context;
7273
struct object_info;
7374
struct painter;
@@ -439,6 +440,7 @@ class building {
439440
building_temple *dcast_temple();
440441
building_tax_collector *dcast_tax_collector();
441442
building_roadblock *dcast_roadblock();
443+
building_routeblock *dcast_routeblock();
442444
building_mine *dcast_mine();
443445
building_quarry *dcast_quarry();
444446
building_palace *dcast_palace();
@@ -568,6 +570,7 @@ class building_impl {
568570
virtual building_palace *dcast_palace() { return nullptr; }
569571
virtual building_festival_square *dcast_festival_square() { return nullptr; }
570572
virtual building_bandstand *dcast_bandstand() { return nullptr; }
573+
virtual building_routeblock *dcast_routeblock() { return nullptr; }
571574

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

src/building/building_ferry.h

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
#pragma once
22

3-
#include "building/building.h"
3+
#include "building/building_roadblock.h"
44
#include "window/window_building_info.h"
55

6-
class building_ferry : public building_impl {
6+
class building_ferry : public building_routeblock {
77
public:
88
BUILDING_METAINFO(BUILDING_FERRY, building_ferry)
99

10-
building_ferry(building &b) : building_impl(b) {}
10+
building_ferry(building &b) : building_routeblock(b) {}
1111
virtual building_ferry *dcast_ferry() override { return this; }
12+
virtual building_routeblock *dcast_routeblock() override { return this; }
1213

1314
virtual void on_create(int orientation) override;
1415
virtual void on_place_update_tiles(int orientation, int variant) override;
1516
virtual void update_map_orientation(int orientation) override;
1617
virtual bool force_draw_height_tile(painter &ctx, tile2i tile, vec2i pixel, color mask) override;
1718
virtual bool force_draw_top_tile(painter &ctx, tile2i tile, vec2i pixel, color mask) override;
1819
virtual void highlight_waypoints() override;
20+
21+
virtual bool get_permission(e_permission p) override { return false; }
1922
};
2023

2124
struct info_window_ferry : public building_info_window_t<info_window_ferry> {

src/building/building_roadblock.cpp

+3-8
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,6 @@
99

1010
buildings::model_t<building_roadblock> roadblock_m;
1111

12-
ANK_REGISTER_CONFIG_ITERATOR(config_load_building_roadblock);
13-
void config_load_building_roadblock() {
14-
roadblock_m.load();
15-
}
16-
1712
void building_roadblock::on_place_checks() {
1813
/*nothing*/
1914
}
@@ -24,11 +19,11 @@ bool building_roadblock::force_draw_flat_tile(painter &ctx, tile2i tile, vec2i p
2419
}
2520

2621
void building_roadblock::set_permission(e_permission p) {
27-
int permission_bit = 1 << p;
22+
const int permission_bit = 1 << p;
2823
base.subtype.roadblock_exceptions ^= permission_bit;
2924
}
3025

31-
int building_roadblock::get_permission(e_permission p) {
32-
int permission_bit = 1 << p;
26+
bool building_roadblock::get_permission(e_permission p) {
27+
const int permission_bit = 1 << p;
3328
return (base.subtype.roadblock_exceptions & permission_bit);
3429
}

src/building/building_roadblock.h

+14-14
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
#pragma once
22

33
#include "building/building.h"
4+
#include "city/constants.h"
5+
6+
class building_routeblock : public building_impl {
7+
public:
8+
building_routeblock(building &b) : building_impl(b) {}
9+
10+
virtual building_routeblock *dcast_routeblock() override { return this; }
11+
12+
virtual void set_permission(e_permission) {}
13+
virtual bool get_permission(e_permission) { return false; }
414

5-
enum e_permission {
6-
epermission_none = 0,
7-
epermission_maintenance = 1,
8-
epermission_priest = 2,
9-
epermission_market = 3,
10-
epermission_entertainer = 4,
11-
epermission_education = 5,
12-
epermission_medicine = 6,
13-
epermission_tax_collector = 7
1415
};
1516

16-
class building_roadblock : public building_impl {
17+
class building_roadblock : public building_routeblock {
1718
public:
1819
BUILDING_METAINFO(BUILDING_ROADBLOCK, building_roadblock)
19-
building_roadblock(building &b) : building_impl(b) {}
20+
building_roadblock(building &b) : building_routeblock(b) {}
2021

2122
virtual building_roadblock *dcast_roadblock() override { return this; }
2223

2324
virtual void on_place_checks() override;
2425
virtual bool force_draw_flat_tile(painter &ctx, tile2i tile, vec2i pixel, color mask) override;
2526

26-
void set_permission(e_permission p);
27-
int get_permission(e_permission p);
28-
27+
virtual void set_permission(e_permission p) override;
28+
virtual bool get_permission(e_permission p) override;
2929
};

src/city/constants.h

+11
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,15 @@ enum e_availability {
4949
NOT_AVAILABLE_YET = -1,
5050
NOT_AVAILABLE = 0,
5151
AVAILABLE = 1,
52+
};
53+
54+
enum e_permission {
55+
epermission_none = 0,
56+
epermission_maintenance = 1,
57+
epermission_priest = 2,
58+
epermission_market = 3,
59+
epermission_entertainer = 4,
60+
epermission_education = 5,
61+
epermission_medicine = 6,
62+
epermission_tax_collector = 7
5263
};

src/figure/figure.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ class figure {
337337
void advance_figure_tick();
338338
void set_target_height_bridge();
339339
void set_target_height_building();
340-
int get_permission_for_figure();
340+
e_permission get_permission_for_figure();
341341
void move_to_next_tile();
342342
void set_next_tile_and_direction();
343343
void advance_route_tile(int roaming_enabled);

src/figure/movement.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ void figure::set_target_height_building() {
8080
target_height = map_building_height_at(tile.grid_offset());
8181
}
8282

83-
int figure::get_permission_for_figure() {
83+
e_permission figure::get_permission_for_figure() {
8484
switch (type) {
8585
case FIGURE_ARCHITECT:
8686
case FIGURE_FIREMAN:
@@ -469,7 +469,7 @@ int figure::roam_ticks(int num_ticks) {
469469

470470
int came_from_direction = (previous_tile_direction + 4) % 8;
471471
int road_tiles[8];
472-
int permission = get_permission_for_figure();
472+
e_permission permission = get_permission_for_figure();
473473
int adjacent_road_tiles = map_get_adjacent_road_tiles_for_roaming(tile.grid_offset(), road_tiles, permission);
474474
if (adjacent_road_tiles == 3 && map_get_diagonal_road_tiles_for_roaming(tile.grid_offset(), road_tiles) >= 5) {
475475
// go in the straight direction of a double-wide road

src/grid/road_access.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ static int terrain_is_road_like(int grid_offset) {
431431
return map_terrain_is(grid_offset, TERRAIN_ROAD | TERRAIN_ACCESS_RAMP) ? 1 : 0;
432432
}
433433

434-
static bool is_adjacent_road_tile_for_roaming(int grid_offset, int perm) {
434+
static bool is_adjacent_road_tile_for_roaming(int grid_offset, e_permission perm) {
435435
if (map_terrain_is(grid_offset, TERRAIN_WATER) && map_terrain_is(grid_offset, TERRAIN_FLOODPLAIN)) {
436436
return 0;
437437
}
@@ -446,8 +446,8 @@ static bool is_adjacent_road_tile_for_roaming(int grid_offset, int perm) {
446446
return false;
447447
}
448448

449-
building_roadblock *roadblock = b->dcast_roadblock();
450-
if (roadblock && !roadblock->get_permission((e_permission)perm)) {
449+
building_routeblock *roadblock = b->dcast_roadblock();
450+
if (roadblock && !roadblock->get_permission(perm)) {
451451
return false;
452452
}
453453

@@ -476,7 +476,7 @@ static bool is_adjacent_road_tile_for_roaming(int grid_offset, int perm) {
476476
return is_road;
477477
}
478478

479-
int map_get_adjacent_road_tiles_for_roaming(int grid_offset, int* road_tiles, int perm) {
479+
int map_get_adjacent_road_tiles_for_roaming(int grid_offset, int* road_tiles, e_permission perm) {
480480
road_tiles[1] = road_tiles[3] = road_tiles[5] = road_tiles[7] = 0;
481481

482482
road_tiles[0] = is_adjacent_road_tile_for_roaming(grid_offset + GRID_OFFSET(0, -1), perm);

src/grid/road_access.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include "grid/point.h"
4+
#include "city/constants.h"
45
class building;
56

67
bool map_has_road_access(tile2i tile, int size);
@@ -15,7 +16,7 @@ bool map_reachable_road_within_radius(tile2i tile, int size, int radius, tile2i
1516
tile2i map_road_to_largest_network_rotation(int rotation, tile2i tile, int size, bool closest);
1617
tile2i map_road_to_largest_network(tile2i tile, int size, bool closest);
1718
int map_road_to_largest_network_hippodrome(int x, int y, int* x_road, int* y_road);
18-
int map_get_adjacent_road_tiles_for_roaming(int grid_offset, int* road_tiles, int p);
19+
int map_get_adjacent_road_tiles_for_roaming(int grid_offset, int* road_tiles, e_permission permission);
1920
int map_get_diagonal_road_tiles_for_roaming(int grid_offset, int* road_tiles);
2021
inline int map_get_diagonal_road_tiles_for_roaming(tile2i tile, int *road_tiles) { return map_get_diagonal_road_tiles_for_roaming(tile.grid_offset(), road_tiles); }
2122
int map_has_adjacent_road_tiles(int grid_offset);

0 commit comments

Comments
 (0)