/* $Id$ */
/** @file ai_types.hpp Defines all the types of the game, like IDs of various objects.
*
* IDs are used to identify certain objects. They are only unique within the object type, so for example a vehicle may have VehicleID 2009,
* while a station has StationID 2009 at the same time. Also IDs are assigned arbitrary, you cannot assume them to be consecutive.
* Also note, that some IDs are static and never change, while others are allocated dynamically and might be
* reused for other objects once they are released. So be careful, which IDs you store for which purpose and whether they stay valid all the time.
*
*
* type | object |
* acquired |
* released |
* reused |
* #BridgeID | bridge type |
* introduction \ref newgrf_changes "(1)" |
* never \ref newgrf_changes "(1)" |
* no \ref newgrf_changes "(1)" |
* #CargoID | cargo type |
* game start \ref newgrf_changes "(1)" |
* never \ref newgrf_changes "(1)" |
* no \ref newgrf_changes "(1)" |
* #EngineID | engine type |
* introduction, preview \ref dynamic_engines "(2)" |
* engines retires \ref dynamic_engines "(2)" |
* no \ref dynamic_engines "(2)" |
* #GroupID | vehicle group |
* creation |
* deletion |
* yes |
* #IndustyID | industry |
* construction |
* closure |
* yes |
* #IndustyType | industry type |
* game start \ref newgrf_changes "(1)" |
* never \ref newgrf_changes "(1)" |
* no |
* #SignID | sign |
* construction |
* deletion |
* yes |
* #StationID | station |
* construction |
* expiration of 'grey' station sign after deletion |
* yes |
* #SubsidyID | subsidy |
* offer announcement |
* (offer) expiration |
* yes |
* #TileIndex | tile on map |
* game start |
* never |
* no |
* #TownID | town |
* game start |
* never |
* no |
* #VehicleID | vehicle |
* construction, autorenew, autoreplace |
* destruction, autorenew, autoreplace |
* yes |
* #WaypointID | waypoint |
* construction |
* destruction |
* yes |
*
*
* @remarks
* \li \anchor newgrf_changes (1) in-game changes of newgrfs may reassign/invalidate IDs (will also cause other trouble though).
* \li \anchor dynamic_engines (2) engine IDs are reassigned/invalidated on changing 'allow multiple newgrf engine sets' (only allowed as long as no vehicles are built).
*/
#ifndef AI_TYPES_HPP
#define AI_TYPES_HPP
#include "../../core/overflowsafe_type.hpp"
#include "../../company_type.h"
#include "../../script/fake_squirrel_types.hpp"
/* Define all types here, so we don't have to include the whole _type.h maze */
typedef uint BridgeType; //!< Internal name, not of any use for you.
typedef byte CargoID; //!< The ID of a cargo.
class CommandCost; //!< The cost of a command.
typedef uint16 EngineID; //!< The ID of an engine.
typedef uint16 GroupID; //!< The ID of a group.
typedef uint16 IndustryID; //!< The ID of an industry.
typedef uint8 IndustryType; //!< The ID of an industry-type.
typedef OverflowSafeInt64 Money; //!< Money, stored in a 32bit/64bit safe way. For AIs money is always in pounds.
typedef uint16 SignID; //!< The ID of a sign.
typedef uint16 StationID; //!< The ID of a station.
typedef uint16 StringID; //!< The ID of a string.
typedef uint32 TileIndex; //!< The ID of a tile (just named differently).
typedef uint16 TownID; //!< The ID of a town.
typedef uint16 VehicleID; //!< The ID of a vehicle.
typedef uint16 WaypointID; //!< The ID of a waypoint.
/* Types we defined ourself, as the OpenTTD core doesn't have them (yet) */
typedef uint AIErrorType; //!< The types of errors inside the NoAI framework.
typedef BridgeType BridgeID; //!< The ID of a bridge.
typedef uint16 SubsidyID; //!< The ID of a subsidy.
#endif /* AI_TYPES_HPP */