Files @ r26179:ad5479cbfaa1
Branch filter:

Location: cpp/openttd-patchpack/source/src/town_type.h - annotation

dP
Change: Deliver cargo to the closest industry first (#9536)
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r11012:e1373ff6cc04
r26116:c6706853a5ab
r14872:dfad0b6fd384
r14872:dfad0b6fd384
r14872:dfad0b6fd384
r14872:dfad0b6fd384
r14873:15b9b1a863e0
r14873:15b9b1a863e0
r8213:466402e95092
r15027:bb71fdfcc554
r8213:466402e95092
r15173:a59afd6301a6
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8814:8b2b17bb64fc
r8814:8b2b17bb64fc
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r10208:ef8fcc3dc4ca
r8814:8b2b17bb64fc
r10208:ef8fcc3dc4ca
r23140:4e420922ab96
r8814:8b2b17bb64fc
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r8213:466402e95092
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r23664:6060dcf415e4
r23664:6060dcf415e4
r11000:d03bad32156f
r11000:d03bad32156f
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8796:7940548db691
r8796:7940548db691
r8213:466402e95092
r8213:466402e95092
r15027:bb71fdfcc554
r8213:466402e95092
r23663:3430a8f404c0
r23663:3430a8f404c0
r13746:3eeb0ceed378
r13746:3eeb0ceed378
r13746:3eeb0ceed378
r13746:3eeb0ceed378
r13746:3eeb0ceed378
r13746:3eeb0ceed378
r13746:3eeb0ceed378
r23403:d1046b8440da
r23403:d1046b8440da
r23403:d1046b8440da
r23403:d1046b8440da
r23403:d1046b8440da
r23403:d1046b8440da
r23403:d1046b8440da
r23403:d1046b8440da
r17569:79cc833a8f35
r9913:5ef437117969
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r8213:466402e95092
/*
 * This file is part of OpenTTD.
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 */

/** @file town_type.h Types related to towns. */

#ifndef TOWN_TYPE_H
#define TOWN_TYPE_H

#include "core/enum_type.hpp"

typedef uint16 TownID;
struct Town;

/** Supported initial town sizes */
enum TownSize : byte {
	TSZ_SMALL,  ///< Small town.
	TSZ_MEDIUM, ///< Medium town.
	TSZ_LARGE,  ///< Large town.
	TSZ_RANDOM, ///< Random size, bigger than small, smaller than large.

	TSZ_END,    ///< Number of available town sizes.
};
template <> struct EnumPropsT<TownSize> : MakeEnumPropsT<TownSize, byte, TSZ_SMALL, TSZ_END, TSZ_END, 2> {};

enum Ratings {
	/* These refer to the maximums, so Appalling is -1000 to -400
	 * MAXIMUM RATINGS BOUNDARIES */
	RATING_MINIMUM     = -1000,
	RATING_APPALLING   =  -400,
	RATING_VERYPOOR    =  -200,
	RATING_POOR        =     0,
	RATING_MEDIOCRE    =   200,
	RATING_GOOD        =   400,
	RATING_VERYGOOD    =   600,
	RATING_EXCELLENT   =   800,
	RATING_OUTSTANDING =  1000,         ///< OUTSTANDING

	RATING_MAXIMUM = RATING_OUTSTANDING,

	RATING_INITIAL = 500, ///< initial rating

	/* RATINGS AFFECTING NUMBERS */
	RATING_TREE_DOWN_STEP = -35,
	RATING_TREE_MINIMUM   = RATING_MINIMUM,
	RATING_TREE_UP_STEP   = 7,
	RATING_TREE_MAXIMUM   = 220,

	RATING_GROWTH_UP_STEP    =   5, ///< when a town grows, all companies have rating increased a bit ...
	RATING_GROWTH_MAXIMUM    = RATING_MEDIOCRE, ///< ... up to RATING_MEDIOCRE
	RATING_STATION_UP_STEP   =  12, ///< when a town grows, company gains reputation for all well serviced stations ...
	RATING_STATION_DOWN_STEP = -15, ///< ... but loses for badly serviced stations

	RATING_TUNNEL_BRIDGE_DOWN_STEP = -250, ///< penalty for removing town owned tunnel or bridge
	RATING_TUNNEL_BRIDGE_MINIMUM   =    0, ///< minimum rating after removing tunnel or bridge
	RATING_TUNNEL_BRIDGE_NEEDED_PERMISSIVE = 144, ///< rating needed, "Permissive" difficulty settings
	RATING_TUNNEL_BRIDGE_NEEDED_NEUTRAL    = 208, ///< "Neutral"
	RATING_TUNNEL_BRIDGE_NEEDED_HOSTILE    = 400, ///< "Hostile"

	RATING_ROAD_DOWN_STEP_INNER =  -50, ///< removing a roadpiece in the middle
	RATING_ROAD_DOWN_STEP_EDGE  =  -18, ///< removing a roadpiece at the edge
	RATING_ROAD_MINIMUM         = -100, ///< minimum rating after removing town owned road
	RATING_ROAD_NEEDED_PERMISSIVE =  16, ///< rating needed, "Permissive" difficulty settings
	RATING_ROAD_NEEDED_NEUTRAL    =  64, ///< "Neutral"
	RATING_ROAD_NEEDED_HOSTILE    = 112, ///< "Hostile"

	RATING_HOUSE_MINIMUM  = RATING_MINIMUM,

	RATING_BRIBE_UP_STEP = 200,
	RATING_BRIBE_MAXIMUM = 800,
	RATING_BRIBE_DOWN_TO = -50        // XXX SHOULD BE SOMETHING LOWER?
};

/** Town Layouts. It needs to be 8bits, because we save and load it as such */
enum TownLayout : byte {
	TL_BEGIN = 0,
	TL_ORIGINAL = 0,     ///< Original algorithm (min. 1 distance between roads)
	TL_BETTER_ROADS,     ///< Extended original algorithm (min. 2 distance between roads)
	TL_2X2_GRID,         ///< Geometric 2x2 grid algorithm
	TL_3X3_GRID,         ///< Geometric 3x3 grid algorithm

	TL_RANDOM,           ///< Random town layout

	NUM_TLS,             ///< Number of town layouts
};
template <> struct EnumPropsT<TownLayout> : MakeEnumPropsT<TownLayout, byte, TL_BEGIN, NUM_TLS, NUM_TLS, 3> {};

/** Town founding setting values. It needs to be 8bits, because we save and load it as such */
enum TownFounding : byte {
	TF_BEGIN = 0,     ///< Used for iterations and limit testing
	TF_FORBIDDEN = 0, ///< Forbidden
	TF_ALLOWED,       ///< Allowed
	TF_CUSTOM_LAYOUT, ///< Allowed, with custom town layout
	TF_END,           ///< Used for iterations and limit testing
};

/** Town cargo generation modes */
enum TownCargoGenMode : byte {
	TCGM_BEGIN = 0,
	TCGM_ORIGINAL = 0,  ///< Original algorithm (quadratic cargo by population)
	TCGM_BITCOUNT,      ///< Bit-counted algorithm (normal distribution from individual house population)
	TCGM_END,
};

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 */