/* $Id: ai_types.hpp 15060 2009-01-13 15:44:36Z smatz $ */

/** @file ai_types.hpp Defines all the types of the game, like VehicleID, .... */

#ifndef AI_TYPES_HPP
#define AI_TYPES_HPP

#include "../../core/overflowsafe_type.hpp"
#include "../../company_type.h"

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

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

#ifndef _SQUIRREL_H_
/* Life becomes easier when we can tell about a function it needs the VM, but
 *  without really including 'squirrel.h'. */
typedef struct SQVM *HSQUIRRELVM;  //!< Pointer to Squirrel Virtual Machine.
typedef int SQInteger;             //!< Squirrel Integer.
typedef struct SQObject HSQOBJECT; //!< Squirrel Object (fake declare)
#endif

#endif /* AI_TYPES_HPP */
