Changeset - r24345:d35de6ba4d03
[Not reviewed]
master
0 1 0
dP - 4 years ago 2020-09-05 22:57:42
dp@dpointer.org
Fix 380fd8c: Only check houses for cargo when generating subsidies with towns
1 file changed with 18 insertions and 2 deletions:
0 comments (0 inline, 0 general)
src/subsidy.cpp
Show inline comments
 
@@ -20,12 +20,13 @@
 
#include "subsidy_func.h"
 
#include "core/pool_func.hpp"
 
#include "core/random_func.hpp"
 
#include "game/game.hpp"
 
#include "command_func.h"
 
#include "string_func.h"
 
#include "tile_cmd.h"
 

	
 
#include "table/strings.h"
 

	
 
#include "safeguards.h"
 

	
 
SubsidyPool _subsidy_pool("Subsidy"); ///< Pool for the subsidies.
 
@@ -325,13 +326,20 @@ bool FindSubsidyTownCargoRoute()
 
	SourceType src_type = ST_TOWN;
 

	
 
	/* Select a random town. */
 
	const Town *src_town = Town::GetRandom();
 
	if (src_town->cache.population < SUBSIDY_CARGO_MIN_POPULATION) return false;
 

	
 
	CargoArray town_cargo_produced = GetProductionAroundTiles(src_town->xy, 1, 1, SUBSIDY_TOWN_CARGO_RADIUS);
 
	/* Calculate the produced cargo of houses around town center. */
 
	CargoArray town_cargo_produced;
 
	TileArea ta = TileArea(src_town->xy, 1, 1).Expand(SUBSIDY_TOWN_CARGO_RADIUS);
 
	TILE_AREA_LOOP(tile, ta) {
 
		if (IsTileType(tile, MP_HOUSE)) {
 
			AddProducedCargo(tile, town_cargo_produced);
 
		}
 
	}
 

	
 
	/* Passenger subsidies are not handled here. */
 
	town_cargo_produced[CT_PASSENGERS] = 0;
 

	
 
	uint8 cargo_count = 0;
 
	for (CargoID i = 0; i < NUM_CARGO; i++) {
 
@@ -428,13 +436,21 @@ bool FindSubsidyCargoDestination(CargoID
 

	
 
	SourceID dst;
 
	switch (dst_type) {
 
		case ST_TOWN: {
 
			/* Select a random town. */
 
			const Town *dst_town = Town::GetRandom();
 
			CargoArray town_cargo_accepted = GetAcceptanceAroundTiles(dst_town->xy, 1, 1, SUBSIDY_TOWN_CARGO_RADIUS);
 

	
 
			/* Calculate cargo acceptance of houses around town center. */
 
			CargoArray town_cargo_accepted;
 
			TileArea ta = TileArea(dst_town->xy, 1, 1).Expand(SUBSIDY_TOWN_CARGO_RADIUS);
 
			TILE_AREA_LOOP(tile, ta) {
 
				if (IsTileType(tile, MP_HOUSE)) {
 
					AddAcceptedCargo(tile, town_cargo_accepted, nullptr);
 
				}
 
			}
 

	
 
			/* Check if the town can accept this cargo. */
 
			if (town_cargo_accepted[cid] < 8) return false;
 

	
 
			dst = dst_town->index;
 
			break;
0 comments (0 inline, 0 general)