Changeset - r18387:14892a15ab1a
[Not reviewed]
master
0 9 0
michi_cc - 13 years ago 2011-11-15 20:47:53
michi_cc@openttd.org
(svn r23233) -Codechange: Refactor maximum and actually transported cargo amount of towns into a reusable struct.
9 files changed with 110 insertions and 116 deletions:
0 comments (0 inline, 0 general)
src/ai/api/ai_town.cpp
Show inline comments
 
@@ -71,8 +71,8 @@
 
	const Town *t = ::Town::Get(town_id);
 

	
 
	switch (AICargo::GetTownEffect(cargo_id)) {
 
		case AICargo::TE_PASSENGERS: return t->max_pass;
 
		case AICargo::TE_MAIL:       return t->max_mail;
 
		case AICargo::TE_PASSENGERS: return t->pass.old_max;
 
		case AICargo::TE_MAIL:       return t->mail.old_max;
 
		default: return -1;
 
	}
 
}
 
@@ -85,8 +85,8 @@
 
	const Town *t = ::Town::Get(town_id);
 

	
 
	switch (AICargo::GetTownEffect(cargo_id)) {
 
		case AICargo::TE_PASSENGERS: return t->act_pass;
 
		case AICargo::TE_MAIL:       return t->act_mail;
 
		case AICargo::TE_PASSENGERS: return t->pass.old_act;
 
		case AICargo::TE_MAIL:       return t->mail.old_act;
 
		default: return -1;
 
	}
 
}
src/economy.cpp
Show inline comments
 
@@ -990,8 +990,8 @@ static Money DeliverGoods(int num_pieces
 

	
 
	/* Increase town's counter for some special goods types */
 
	const CargoSpec *cs = CargoSpec::Get(cargo_type);
 
	if (cs->town_effect == TE_FOOD) st->town->new_act_food += accepted;
 
	if (cs->town_effect == TE_WATER) st->town->new_act_water += accepted;
 
	if (cs->town_effect == TE_FOOD) st->town->food.new_act += accepted;
 
	if (cs->town_effect == TE_WATER) st->town->water.new_act += accepted;
 

	
 
	/* Determine profit */
 
	Money profit = GetTransportedGoodsIncome(accepted, DistanceManhattan(source_tile, st->xy), days_in_transit, cargo_type);
src/newgrf_town.cpp
Show inline comments
 
@@ -91,32 +91,32 @@ uint32 TownGetVariable(byte variable, ui
 
		case 0xB2: return t->statues;
 
		case 0xB6: return ClampToU16(t->num_houses);
 
		case 0xB9: return t->growth_rate;
 
		case 0xBA: return ClampToU16(t->new_max_pass);
 
		case 0xBB: return GB(ClampToU16(t->new_max_pass), 8, 8);
 
		case 0xBC: return ClampToU16(t->new_max_mail);
 
		case 0xBD: return GB(ClampToU16(t->new_max_mail), 8, 8);
 
		case 0xBE: return ClampToU16(t->new_act_pass);
 
		case 0xBF: return GB(ClampToU16(t->new_act_pass), 8, 8);
 
		case 0xC0: return ClampToU16(t->new_act_mail);
 
		case 0xC1: return GB(ClampToU16(t->new_act_mail), 8, 8);
 
		case 0xC2: return ClampToU16(t->max_pass);
 
		case 0xC3: return GB(ClampToU16(t->max_pass), 8, 8);
 
		case 0xC4: return ClampToU16(t->max_mail);
 
		case 0xC5: return GB(ClampToU16(t->max_mail), 8, 8);
 
		case 0xC6: return ClampToU16(t->act_pass);
 
		case 0xC7: return GB(ClampToU16(t->act_pass), 8, 8);
 
		case 0xC8: return ClampToU16(t->act_mail);
 
		case 0xC9: return GB(ClampToU16(t->act_mail), 8, 8);
 
		case 0xBA: return ClampToU16(t->pass.new_max);
 
		case 0xBB: return GB(ClampToU16(t->pass.new_max), 8, 8);
 
		case 0xBC: return ClampToU16(t->mail.new_max);
 
		case 0xBD: return GB(ClampToU16(t->mail.new_max), 8, 8);
 
		case 0xBE: return ClampToU16(t->pass.new_act);
 
		case 0xBF: return GB(ClampToU16(t->pass.new_act), 8, 8);
 
		case 0xC0: return ClampToU16(t->mail.new_act);
 
		case 0xC1: return GB(ClampToU16(t->mail.new_act), 8, 8);
 
		case 0xC2: return ClampToU16(t->pass.old_max);
 
		case 0xC3: return GB(ClampToU16(t->pass.old_max), 8, 8);
 
		case 0xC4: return ClampToU16(t->mail.old_max);
 
		case 0xC5: return GB(ClampToU16(t->mail.old_max), 8, 8);
 
		case 0xC6: return ClampToU16(t->pass.old_act);
 
		case 0xC7: return GB(ClampToU16(t->pass.old_act), 8, 8);
 
		case 0xC8: return ClampToU16(t->mail.old_act);
 
		case 0xC9: return GB(ClampToU16(t->mail.old_act), 8, 8);
 
		case 0xCA: return t->GetPercentPassTransported();
 
		case 0xCB: return t->GetPercentMailTransported();
 
		case 0xCC: return t->new_act_food;
 
		case 0xCD: return GB(t->new_act_food, 8, 8);
 
		case 0xCE: return t->new_act_water;
 
		case 0xCF: return GB(t->new_act_water, 8, 8);
 
		case 0xD0: return t->act_food;
 
		case 0xD1: return GB(t->act_food, 8, 8);
 
		case 0xD2: return t->act_water;
 
		case 0xD3: return GB(t->act_water, 8, 8);
 
		case 0xCC: return t->food.new_act;
 
		case 0xCD: return GB(t->food.new_act, 8, 8);
 
		case 0xCE: return t->water.new_act;
 
		case 0xCF: return GB(t->water.new_act, 8, 8);
 
		case 0xD0: return t->food.old_act;
 
		case 0xD1: return GB(t->food.old_act, 8, 8);
 
		case 0xD2: return t->water.old_act;
 
		case 0xD3: return GB(t->water.old_act, 8, 8);
 
		case 0xD4: return t->road_build_months;
 
		case 0xD5: return t->fund_buildings_months;
 
	}
src/saveload/oldloader_sl.cpp
Show inline comments
 
@@ -568,21 +568,21 @@ static const OldChunks town_chunk[] = {
 
	OCL_SVAR(  OC_FILE_U8 | OC_VAR_U16, Town, time_until_rebuild ),
 
	OCL_SVAR(  OC_FILE_U8 | OC_VAR_I16, Town, growth_rate ),
 

	
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, new_max_pass ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, new_max_mail ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, new_act_pass ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, new_act_mail ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, max_pass ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, max_mail ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, act_pass ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, act_mail ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, pass.new_max ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, mail.new_max ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, pass.new_act ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, mail.new_act ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, pass.old_max ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, mail.old_max ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, pass.old_act ),
 
	OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Town, mail.old_act ),
 

	
 
	OCL_NULL( 2 ),         ///< pct_pass_transported / pct_mail_transported, now computed on the fly
 

	
 
	OCL_SVAR( OC_TTD | OC_UINT16, Town, new_act_food ),
 
	OCL_SVAR( OC_TTD | OC_UINT16, Town, new_act_water ),
 
	OCL_SVAR( OC_TTD | OC_UINT16, Town, act_food ),
 
	OCL_SVAR( OC_TTD | OC_UINT16, Town, act_water ),
 
	OCL_SVAR( OC_TTD | OC_UINT16, Town, food.new_act ),
 
	OCL_SVAR( OC_TTD | OC_UINT16, Town, water.new_act ),
 
	OCL_SVAR( OC_TTD | OC_UINT16, Town, food.old_act ),
 
	OCL_SVAR( OC_TTD | OC_UINT16, Town, water.old_act ),
 

	
 
	OCL_SVAR(  OC_UINT8, Town, road_build_months ),
 
	OCL_SVAR(  OC_UINT8, Town, fund_buildings_months ),
src/saveload/town_sl.cpp
Show inline comments
 
@@ -128,30 +128,30 @@ static const SaveLoad _town_desc[] = {
 
	SLE_CONDARR(Town, unwanted,              SLE_INT8,  8,               4, 103),
 
	SLE_CONDARR(Town, unwanted,              SLE_INT8,  MAX_COMPANIES, 104, SL_MAX_VERSION),
 

	
 
	SLE_CONDVAR(Town, max_pass,              SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, max_mail,              SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, new_max_pass,          SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, new_max_mail,          SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, act_pass,              SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, act_mail,              SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, new_act_pass,          SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, new_act_mail,          SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, pass.old_max,          SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, mail.old_max,          SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, pass.new_max,          SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, mail.new_max,          SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, pass.old_act,          SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, mail.old_act,          SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, pass.new_act,          SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 
	SLE_CONDVAR(Town, mail.new_act,          SLE_FILE_U16 | SLE_VAR_U32, 0, 8),
 

	
 
	SLE_CONDVAR(Town, max_pass,              SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, max_mail,              SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, new_max_pass,          SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, new_max_mail,          SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, act_pass,              SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, act_mail,              SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, new_act_pass,          SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, new_act_mail,          SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, pass.old_max,          SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, mail.old_max,          SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, pass.new_max,          SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, mail.new_max,          SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, pass.old_act,          SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, mail.old_act,          SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, pass.new_act,          SLE_UINT32,                 9, SL_MAX_VERSION),
 
	SLE_CONDVAR(Town, mail.new_act,          SLE_UINT32,                 9, SL_MAX_VERSION),
 

	
 
	SLE_CONDNULL(2, 0, 163),                 ///< pct_pass_transported / pct_mail_transported, now computed on the fly
 

	
 
	    SLE_VAR(Town, act_food,              SLE_UINT16),
 
	    SLE_VAR(Town, act_water,             SLE_UINT16),
 
	    SLE_VAR(Town, new_act_food,          SLE_UINT16),
 
	    SLE_VAR(Town, new_act_water,         SLE_UINT16),
 
	    SLE_VAR(Town, food.old_act,          SLE_UINT16),
 
	    SLE_VAR(Town, water.old_act,         SLE_UINT16),
 
	    SLE_VAR(Town, food.new_act,          SLE_UINT16),
 
	    SLE_VAR(Town, water.new_act,         SLE_UINT16),
 

	
 
	SLE_CONDVAR(Town, time_until_rebuild,    SLE_FILE_U8 | SLE_VAR_U16,  0, 53),
 
	SLE_CONDVAR(Town, grow_counter,          SLE_FILE_U8 | SLE_VAR_U16,  0, 53),
src/town.h
Show inline comments
 
@@ -66,25 +66,16 @@ struct Town : TownPool::PoolItem<&_town_
 
	uint8 exclusive_counter;       ///< months till the exclusivity expires
 
	int16 ratings[MAX_COMPANIES];  ///< ratings of each company for this town
 

	
 
	uint32 max_pass;               ///< maximum amount of passengers that can be transported
 
	uint32 max_mail;               ///< maximum amount of mail that can be transported
 
	uint32 new_max_pass;
 
	uint32 new_max_mail;
 
	uint32 act_pass;
 
	uint32 act_mail;
 
	uint32 new_act_pass;
 
	uint32 new_act_mail;
 
	TransportedCargoStat<uint32> pass;  ///< Passenger cargo statistics.
 
	TransportedCargoStat<uint32> mail;  ///< Mail cargo statistics.
 
	TransportedCargoStat<uint16> food;  ///< Food cargo statistics.
 
	TransportedCargoStat<uint16> water; ///< Water cargo statistics.
 

	
 
	/** Percentage of passengers transported last month (0xFF=100%) */
 
	inline byte GetPercentPassTransported() const { return this->act_pass * 256 / (this->max_pass + 1); }
 
	inline byte GetPercentPassTransported() const { return this->pass.old_act * 256 / (this->pass.old_max + 1); }
 

	
 
	/** Percentage of mail transported last month (0xFF=100%) */
 
	inline byte GetPercentMailTransported() const { return this->act_mail * 256 / (this->max_mail + 1); }
 

	
 
	uint16 act_food;               ///< amount of food that was transported
 
	uint16 act_water;              ///< amount of water that was transported
 
	uint16 new_act_food;
 
	uint16 new_act_water;
 
	inline byte GetPercentMailTransported() const { return this->mail.old_act * 256 / (this->mail.old_max + 1); }
 

	
 
	uint16 time_until_rebuild;     ///< time until we rebuild a house
 

	
src/town_cmd.cpp
Show inline comments
 
@@ -487,13 +487,13 @@ static void TileLoop_Town(TileIndex tile
 
			const CargoSpec *cs = CargoSpec::Get(cargo);
 
			switch (cs->town_effect) {
 
				case TE_PASSENGERS:
 
					t->new_max_pass += amt;
 
					t->new_act_pass += moved;
 
					t->pass.new_max += amt;
 
					t->pass.new_act += moved;
 
					break;
 

	
 
				case TE_MAIL:
 
					t->new_max_mail += amt;
 
					t->new_act_mail += moved;
 
					t->mail.new_max += amt;
 
					t->mail.new_act += moved;
 
					break;
 

	
 
				default:
 
@@ -505,16 +505,16 @@ static void TileLoop_Town(TileIndex tile
 
			uint amt = GB(r, 0, 8) / 8 + 1;
 

	
 
			if (EconomyIsInRecession()) amt = (amt + 1) >> 1;
 
			t->new_max_pass += amt;
 
			t->new_act_pass += MoveGoodsToStation(CT_PASSENGERS, amt, ST_TOWN, t->index, stations.GetStations());
 
			t->pass.new_max += amt;
 
			t->pass.new_act += MoveGoodsToStation(CT_PASSENGERS, amt, ST_TOWN, t->index, stations.GetStations());
 
		}
 

	
 
		if (GB(r, 8, 8) < hs->mail_generation) {
 
			uint amt = GB(r, 8, 8) / 8 + 1;
 

	
 
			if (EconomyIsInRecession()) amt = (amt + 1) >> 1;
 
			t->new_max_mail += amt;
 
			t->new_act_mail += MoveGoodsToStation(CT_MAIL, amt, ST_TOWN, t->index, stations.GetStations());
 
			t->mail.new_max += amt;
 
			t->mail.new_act += MoveGoodsToStation(CT_MAIL, amt, ST_TOWN, t->index, stations.GetStations());
 
		}
 
	}
 

	
 
@@ -1401,8 +1401,8 @@ void UpdateTownRadius(Town *t)
 

	
 
void UpdateTownMaxPass(Town *t)
 
{
 
	t->max_pass = t->population >> 3;
 
	t->max_mail = t->population >> 4;
 
	t->pass.old_max = t->population >> 3;
 
	t->mail.old_max = t->population >> 4;
 
}
 

	
 
/**
 
@@ -1426,20 +1426,8 @@ static void DoCreateTown(Town *t, TileIn
 
	t->population = 0;
 
	t->grow_counter = 0;
 
	t->growth_rate = 250;
 
	t->new_max_pass = 0;
 
	t->new_max_mail = 0;
 
	t->new_act_pass = 0;
 
	t->new_act_mail = 0;
 
	t->max_pass = 0;
 
	t->max_mail = 0;
 
	t->act_pass = 0;
 
	t->act_mail = 0;
 

	
 
	t->fund_buildings_months = 0;
 
	t->new_act_food = 0;
 
	t->new_act_water = 0;
 
	t->act_food = 0;
 
	t->act_water = 0;
 

	
 
	for (uint i = 0; i != MAX_COMPANIES; i++) t->ratings[i] = RATING_INITIAL;
 

	
 
@@ -2783,10 +2771,10 @@ static void UpdateTownGrowRate(Town *t)
 
	}
 

	
 
	if (_settings_game.game_creation.landscape == LT_ARCTIC) {
 
		if (TileHeight(t->xy) >= GetSnowLine() && t->act_food == 0 && t->population > 90) return;
 
		if (TileHeight(t->xy) >= GetSnowLine() && t->food.old_act == 0 && t->population > 90) return;
 

	
 
	} else if (_settings_game.game_creation.landscape == LT_TROPIC) {
 
		if (GetTropicZone(t->xy) == TROPICZONE_DESERT && (t->act_food == 0 || t->act_water == 0) && t->population > 60) return;
 
		if (GetTropicZone(t->xy) == TROPICZONE_DESERT && (t->food.old_act == 0 || t->water.old_act == 0) && t->population > 60) return;
 
	}
 

	
 
	/* Use the normal growth rate values if new buildings have been funded in
 
@@ -2806,13 +2794,10 @@ static void UpdateTownGrowRate(Town *t)
 

	
 
static void UpdateTownAmounts(Town *t)
 
{
 
	t->max_pass = t->new_max_pass; t->new_max_pass = 0;
 
	t->act_pass = t->new_act_pass; t->new_act_pass = 0;
 
	t->act_food = t->new_act_food; t->new_act_food = 0;
 
	t->act_water = t->new_act_water; t->new_act_water = 0;
 

	
 
	t->max_mail = t->new_max_mail; t->new_max_mail = 0;
 
	t->act_mail = t->new_act_mail; t->new_act_mail = 0;
 
	t->pass.NewMonth();
 
	t->mail.NewMonth();
 
	t->food.NewMonth();
 
	t->water.NewMonth();
 

	
 
	SetWindowDirty(WC_TOWN_VIEW, t->index);
 
}
src/town_gui.cpp
Show inline comments
 
@@ -368,12 +368,12 @@ public:
 
		SetDParam(1, this->town->num_houses);
 
		DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_LEFT, y, STR_TOWN_VIEW_POPULATION_HOUSES);
 

	
 
		SetDParam(0, this->town->act_pass);
 
		SetDParam(1, this->town->max_pass);
 
		SetDParam(0, this->town->pass.old_act);
 
		SetDParam(1, this->town->pass.old_max);
 
		DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_LEFT, y += FONT_HEIGHT_NORMAL, STR_TOWN_VIEW_PASSENGERS_LAST_MONTH_MAX);
 

	
 
		SetDParam(0, this->town->act_mail);
 
		SetDParam(1, this->town->max_mail);
 
		SetDParam(0, this->town->mail.old_act);
 
		SetDParam(1, this->town->mail.old_max);
 
		DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_LEFT, y += FONT_HEIGHT_NORMAL, STR_TOWN_VIEW_MAIL_LAST_MONTH_MAX);
 

	
 
		StringID required_text = STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED;
 
@@ -406,9 +406,9 @@ public:
 
			CargoID first_water_cargo = (water != NULL) ? water->Index() : (CargoID)CT_INVALID;
 
			StringID water_name       = (water != NULL) ? water->name    : STR_CARGO_PLURAL_WATER;
 

	
 
			if (first_food_cargo != CT_INVALID && this->town->act_food > 0) {
 
			if (first_food_cargo != CT_INVALID && this->town->food.old_act > 0) {
 
				SetDParam(0, first_food_cargo);
 
				SetDParam(1, this->town->act_food);
 
				SetDParam(1, this->town->food.old_act);
 
				DrawString(cargo_text_left, cargo_text_right, y += FONT_HEIGHT_NORMAL, STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_LAST_MONTH);
 
			} else {
 
				SetDParam(0, food_name);
 
@@ -416,9 +416,9 @@ public:
 
			}
 

	
 
			if (cargo_needed_for_growth > 1) {
 
				if (first_water_cargo != CT_INVALID && this->town->act_water > 0) {
 
				if (first_water_cargo != CT_INVALID && this->town->water.old_act > 0) {
 
					SetDParam(0, first_water_cargo);
 
					SetDParam(1, this->town->act_water);
 
					SetDParam(1, this->town->water.old_act);
 
					DrawString(cargo_text_left, cargo_text_right, y += FONT_HEIGHT_NORMAL, STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_LAST_MONTH);
 
				} else {
 
					SetDParam(0, water_name);
src/town_type.h
Show inline comments
 
@@ -107,4 +107,22 @@ typedef SimpleTinyEnumT<TownFounding, by
 

	
 
static const uint MAX_LENGTH_TOWN_NAME_CHARS = 32; ///< The maximum length of a town name in characters including '\0'
 

	
 
/** Store the maximum and actually transported cargo amount for the current and the last month. */
 
template <typename Tstorage>
 
struct TransportedCargoStat {
 
	Tstorage old_max;  ///< Maximum amount last month
 
	Tstorage new_max;  ///< Maximum amount this month
 
	Tstorage old_act;  ///< Actually transported last month
 
	Tstorage new_act;  ///< Actually transported this month
 

	
 
	TransportedCargoStat() : old_max(0), new_max(0), old_act(0), new_act(0) {}
 

	
 
	/** Update stats for a new month. */
 
	void NewMonth()
 
	{
 
		this->old_max = this->new_max; this->new_max = 0;
 
		this->old_act = this->new_act; this->new_act = 0;
 
	}
 
};
 

	
 
#endif /* TOWN_TYPE_H */
0 comments (0 inline, 0 general)