Skip to content

Commit 3d6a1f7

Browse files
committed
gardens: moved gardens logic to own files, add terrain flag that mark planer future tiles
1 parent 2b1e5d5 commit 3d6a1f7

14 files changed

+66
-44
lines changed

src/building/building_entertainment.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "grid/terrain.h"
55
#include "grid/tiles.h"
66
#include "grid/image.h"
7+
#include "grid/gardens.h"
78
#include "grid/building_tiles.h"
89
#include "graphics/view/view.h"
910

@@ -82,7 +83,7 @@ void building_entertainment::place_latch_on_venue(e_building_type type, int dx,
8283
switch (type) {
8384
case BUILDING_GARDENS:
8485
map_terrain_add(point, TERRAIN_GARDEN);
85-
map_tiles_update_all_gardens();
86+
map_tiles_gardens_update_all();
8687
break;
8788

8889
case BUILDING_BOOTH:

src/building/building_garden.cpp

+15-13
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "grid/terrain.h"
1717
#include "grid/property.h"
1818
#include "grid/image.h"
19+
#include "grid/gardens.h"
1920
#include "grid/random.h"
2021
#include "grid/building_tiles.h"
2122
#include "figure/formation_herd.h"
@@ -26,42 +27,43 @@
2627

2728
building_garden::static_params garden_m;
2829

29-
int building_garden::static_params::place_impl(tile2i start, tile2i end) const {
30+
int building_garden::static_params::place_impl(tile2i start, tile2i end, bool place) const {
3031
game_undo_restore_map(1);
3132

3233
grid_area area = map_grid_get_area(start, end);
3334

3435
int items_placed = 0;
35-
map_grid_area_foreach(area.tmin, area.tmax, [&] (tile2i tile) {
36-
int grid_offset = tile.grid_offset();
37-
if (map_terrain_is(grid_offset, TERRAIN_NOT_CLEAR)) {
36+
map_grid_area_foreach(area.tmin, area.tmax, [&] (tile2i rtile) {
37+
if (map_terrain_is(rtile, TERRAIN_NOT_CLEAR)) {
3838
return;
3939
}
4040

41-
if (map_terrain_exists_tile_in_radius_with_type(tile, 1, 1, TERRAIN_FLOODPLAIN)) {
41+
if (map_terrain_exists_tile_in_radius_with_type(rtile, 1, 1, TERRAIN_FLOODPLAIN)) {
4242
return;
4343
}
4444

45-
if (formation_herd_breeding_ground_at(tile, 1)) {
45+
if (formation_herd_breeding_ground_at(rtile, 1)) {
4646
map_property_clear_constructing_and_deleted();
4747
city_warning_show(WARNING_HERD_BREEDING_GROUNDS);
48-
} else {
49-
items_placed++;
50-
map_terrain_add(grid_offset, TERRAIN_GARDEN);
51-
}
48+
return;
49+
}
50+
51+
items_placed++;
52+
int addition_flag = place ? 0 : TERRAIN_PLANER_FUTURE;
53+
map_terrain_add(rtile, TERRAIN_GARDEN| addition_flag);
5254
});
53-
map_tiles_update_all_gardens();
55+
map_tiles_gardens_update_all();
5456

5557
return items_placed;
5658
}
5759

5860
int building_garden::static_params::planer_construction_update(build_planner &planer, tile2i start, tile2i end) const {
59-
return place_impl(start, end);
61+
return place_impl(start, end, false);
6062
}
6163

6264
int building_garden::static_params::planer_construction_place(build_planner &planer, tile2i start, tile2i end, int orientation, int variant) const {
6365
planer.should_update_land_routing = true;
64-
return place_impl(start, end);
66+
return place_impl(start, end, true);
6567
}
6668

6769
void building_garden::on_place_checks() { /*nothing*/ }

src/building/building_garden.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class building_garden : public building_impl {
1010
virtual building_garden *dcast_garden() override { return this; }
1111

1212
struct static_params : public buildings::model_t<building_garden> {
13-
int place_impl(tile2i start, tile2i end) const;
13+
int place_impl(tile2i start, tile2i end, bool place) const;
1414
virtual int planer_construction_update(build_planner &planer, tile2i start, tile2i end) const override;
1515
virtual int planer_construction_place(build_planner &planer, tile2i start, tile2i end, int orientation, int variant) const override;
1616
};

src/building/building_house.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "grid/grid.h"
1919
#include "grid/tiles.h"
2020
#include "grid/image.h"
21+
#include "grid/gardens.h"
2122
#include "grid/random.h"
2223
#include "grid/terrain.h"
2324
#include "config/config.h"
@@ -1020,7 +1021,7 @@ bool building_house_spacious_apartment::evolve(house_demands* demands) {
10201021
if (can_expand(4)) {
10211022
base.house_is_merged = 0;
10221023
expand_to_common_residence();
1023-
map_tiles_update_all_gardens();
1024+
map_tiles_gardens_update_all();
10241025
return true;
10251026
}
10261027
} else if (status == e_house_decay) {
@@ -1091,7 +1092,7 @@ bool building_house_fancy_residence::evolve(house_demands* demands) {
10911092
if (status == e_house_evolve) {
10921093
if (can_expand(9)) {
10931094
expand_to_common_manor();
1094-
map_tiles_update_all_gardens();
1095+
map_tiles_gardens_update_all();
10951096
return true;
10961097
}
10971098
} else if (status == e_house_decay) {
@@ -1159,7 +1160,7 @@ bool building_house_stately_manor::evolve(house_demands* demands) {
11591160
if (status == e_house_evolve) {
11601161
if (can_expand(16)) {
11611162
expand_to_modest_estate();
1162-
map_tiles_update_all_gardens();
1163+
map_tiles_gardens_update_all();
11631164
return true;
11641165
}
11651166
} else if (status == e_house_decay) {

src/building/construction/clear.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "graphics/window.h"
1111
#include "grid/canals.h"
1212
#include "grid/bridge.h"
13+
#include "grid/gardens.h"
1314
#include "grid/building.h"
1415
#include "grid/building_tiles.h"
1516
#include "grid/grid.h"
@@ -166,7 +167,7 @@ static int clear_land_confirmed(bool measure_only, clear_confirm_t confirm) {
166167
map_tiles_update_region_empty_land(true, area.tmin, area.tmax);
167168
map_tiles_update_region_meadow(x_min, y_min, x_max, y_max);
168169
map_tiles_update_region_rubble(x_min, y_min, x_max, y_max);
169-
map_tiles_update_all_gardens();
170+
map_tiles_gardens_update_all();
170171
map_tiles_update_area_roads(x_min, y_min, radius);
171172
map_tiles_update_all_plazas();
172173
map_tiles_update_area_walls(area.tmin, radius);

src/grid/gardens.cpp

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include "grid/gardens.h"
2+
3+
#include "grid/tiles.h"
4+
#include "grid/terrain.h"
5+
#include "grid/image.h"
6+
#include "grid/property.h"
7+
#include "building/building_garden.h"
8+
9+
void map_tiles_gardens_clear_garden_image(int grid_offset) {
10+
const bool is_garden = map_terrain_is(grid_offset, TERRAIN_GARDEN);
11+
const bool is_elevation = map_terrain_is(grid_offset, TERRAIN_ELEVATION | TERRAIN_ACCESS_RAMP);
12+
if (is_garden && !is_elevation) {
13+
map_image_set(grid_offset, 0);
14+
map_property_set_multi_tile_size(grid_offset, 1);
15+
map_property_mark_draw_tile(grid_offset);
16+
}
17+
}
18+
19+
void map_tiles_gardens_update_all() {
20+
map_tiles_foreach_map_tile(map_tiles_gardens_clear_garden_image);
21+
map_tiles_foreach_map_tile(building_garden::set_image);
22+
}
23+
24+
void map_tiles_gardens_determine() {
25+
map_tiles_foreach_map_tile(building_garden::determine_tile);
26+
}

src/grid/gardens.h

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#pragma once
2+
3+
void map_tiles_gardens_update_all();
4+
void map_tiles_gardens_determine();

src/grid/orientation.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "grid/grid.h"
2020
#include "grid/trees.h"
2121
#include "grid/property.h"
22+
#include "grid/gardens.h"
2223
#include "grid/routing/routing_terrain.h"
2324
#include "grid/terrain.h"
2425
#include "grid/tiles.h"
@@ -54,7 +55,7 @@ void map_orientation_change(int counter_clockwise) {
5455
map_tiles_river_refresh_entire();
5556
map_tiles_update_all_earthquake();
5657
map_tiles_update_all_rocks();
57-
map_tiles_update_all_gardens();
58+
map_tiles_gardens_update_all();
5859

5960
map_tiles_add_entry_exit_flags();
6061

src/grid/terrain.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ enum e_terrain : uint32_t {
3838
TERRAIN_DUNE = 0x2000000,
3939
TERRAIN_DEEPWATER = 0x4000000,
4040
TERRAIN_SUBMERGED_ROAD = 0x8000000,
41-
TERRAIN_UNK_07 = 0x10000000,
41+
TERRAIN_PLANER_FUTURE = 0x10000000,
4242
TERRAIN_UNK_08 = 0x20000000,
4343
TERRAIN_UNK_09 = 0x40000000,
4444
TERRAIN_SHORE = 0x80000000,

src/grid/tiles.cpp

-18
Original file line numberDiff line numberDiff line change
@@ -230,24 +230,6 @@ void map_tiles_update_region_shrub(int x_min, int y_min, int x_max, int y_max) {
230230
map_tiles_foreach_region_tile(tile2i(x_min, y_min), tile2i(x_max, y_max), set_shrub_image);
231231
}
232232

233-
static void clear_garden_image(int grid_offset) {
234-
if (map_terrain_is(grid_offset, TERRAIN_GARDEN)
235-
&& !map_terrain_is(grid_offset, TERRAIN_ELEVATION | TERRAIN_ACCESS_RAMP)) {
236-
map_image_set(grid_offset, 0);
237-
map_property_set_multi_tile_size(grid_offset, 1);
238-
map_property_mark_draw_tile(grid_offset);
239-
}
240-
}
241-
242-
void map_tiles_update_all_gardens(void) {
243-
map_tiles_foreach_map_tile(clear_garden_image);
244-
map_tiles_foreach_map_tile(building_garden::set_image);
245-
}
246-
247-
void map_tiles_determine_gardens(void) {
248-
map_tiles_foreach_map_tile(building_garden::determine_tile);
249-
}
250-
251233
static void remove_plaza_below_building(int grid_offset) {
252234
if (map_terrain_is(grid_offset, TERRAIN_ROAD) && map_property_is_plaza_or_earthquake(grid_offset)) {
253235
if (map_terrain_is(grid_offset, TERRAIN_BUILDING))

src/grid/tiles.h

-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ void map_tiles_update_all_rocks(void);
77

88
void map_tiles_update_region_shrub(int x_min, int y_min, int x_max, int y_max);
99

10-
void map_tiles_update_all_gardens(void);
11-
void map_tiles_determine_gardens(void);
12-
1310
void map_tiles_set_canal_image(int grid_offset);
1411

1512
void map_tiles_update_all_plazas(void);

src/io/gamestate/boilerplate.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "grid/elevation.h"
3636
#include "grid/figure.h"
3737
#include "grid/image.h"
38+
#include "grid/gardens.h"
3839
#include "grid/image_context.h"
3940
#include "grid/orientation.h"
4041
#include "grid/property.h"
@@ -741,7 +742,7 @@ void GamestateIO::start_loaded_file() {
741742
map_water_rebuild_shores();
742743
map_tiles_update_floodplain_images();
743744
map_tiles_river_refresh_entire();
744-
map_tiles_determine_gardens();
745+
map_tiles_gardens_determine();
745746
map_tiles_upadte_all_marshland_tiles();
746747
map_tree_update_all_tiles();
747748
map_building_update_all_tiles();

src/scenario/earthquake.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "grid/building.h"
1313
#include "grid/grid.h"
1414
#include "grid/image.h"
15+
#include "grid/gardens.h"
1516
#include "grid/property.h"
1617
#include "grid/routing/routing_terrain.h"
1718
#include "grid/terrain.h"
@@ -85,7 +86,7 @@ static void advance_earthquake_to_tile(int x, int y) {
8586
}
8687
map_terrain_set(grid_offset, 0);
8788
map_tiles_set_earthquake(x, y);
88-
map_tiles_update_all_gardens();
89+
map_tiles_gardens_update_all();
8990
map_tiles_update_all_roads();
9091
map_tiles_update_all_plazas();
9192

src/widget/city/tile_draw.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,11 @@ void draw_isometric_flat(vec2i pixel, tile2i tile, painter &ctx) {
250250
image_id = image_id_from_group(GROUP_TERRAIN_OVERLAY_FLAT);
251251
}
252252

253+
const bool is_green_tile = map_terrain_is(grid_offset, TERRAIN_PLANER_FUTURE);
254+
if (is_green_tile && (color_mask == COLOR_MASK_NONE)) {
255+
color_mask = COLOR_MASK_GREEN;
256+
}
257+
253258
const image_t *img = ImageDraw::isometric_from_drawtile(ctx, image_id, pixel, color_mask);
254259
if (!img) {
255260
return;

0 commit comments

Comments
 (0)