Files @ r26193:4bc7915a2156
Branch filter:

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

Michael Lutz
Fix #9837, 46bd2f1c: Road build with wrong half-tile ends.
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r23327:f24bbe7824fa
r10546:a4ec290c1c46
r8776:03fed455b086
r8771:b6e9d5dbdc1b
r10573:2a7f1f002c6b
r10573:2a7f1f002c6b
r10573:2a7f1f002c6b
r10573:2a7f1f002c6b
r8771:b6e9d5dbdc1b
r10573:2a7f1f002c6b
r23327:f24bbe7824fa
r8771:b6e9d5dbdc1b
r20697:fc53d36f2fd5
r20697:fc53d36f2fd5
r20697:fc53d36f2fd5
r20697:fc53d36f2fd5
r20697:fc53d36f2fd5
r20697:fc53d36f2fd5
r23672:e547c22419a6
r23672:e547c22419a6
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8900:dfe0b94b8d96
r23672:e547c22419a6
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8855:a884f435767d
r8855:a884f435767d
r8855:a884f435767d
r8855:a884f435767d
r8855:a884f435767d
r8881:c1ed3a9d37b7
r8881:c1ed3a9d37b7
r8876:489205daecc7
r8855:a884f435767d
r8771:b6e9d5dbdc1b
r8855:a884f435767d
r8855:a884f435767d
r8855:a884f435767d
r8855:a884f435767d
r8855:a884f435767d
r19821:021f5f9159cc
r19821:021f5f9159cc
r8883:d4a834db67ba
r8848:6bd9c22eb5ec
r8771:b6e9d5dbdc1b
r8848:6bd9c22eb5ec
r8848:6bd9c22eb5ec
r8848:6bd9c22eb5ec
r8848:6bd9c22eb5ec
r8855:a884f435767d
r8855:a884f435767d
r8855:a884f435767d
r8855:a884f435767d
r8869:e2e8b17142d9
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8853:c56f6dec859b
r11652:5c73940aeb94
r11652:5c73940aeb94
r11652:5c73940aeb94
r11652:5c73940aeb94
r11652:5c73940aeb94
r11652:5c73940aeb94
r11652:5c73940aeb94
r11652:5c73940aeb94
r11652:5c73940aeb94
r11652:5c73940aeb94
r8853:c56f6dec859b
r8853:c56f6dec859b
r8853:c56f6dec859b
r10207:a1fc2f2a33db
r8881:c1ed3a9d37b7
r8853:c56f6dec859b
r8853:c56f6dec859b
r8853:c56f6dec859b
r8853:c56f6dec859b
r8853:c56f6dec859b
r8853:c56f6dec859b
r8853:c56f6dec859b
r8853:c56f6dec859b
r8881:c1ed3a9d37b7
r8894:9a9fa8db264e
r8853:c56f6dec859b
r14900:c679fdaeebe6
r8853:c56f6dec859b
r8855:a884f435767d
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r18033:53f0ab8989eb
r18033:53f0ab8989eb
r18033:53f0ab8989eb
r18033:53f0ab8989eb
r18033:53f0ab8989eb
r18033:53f0ab8989eb
r18033:53f0ab8989eb
r23112:aaeff71c383e
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r19821:021f5f9159cc
r8771:b6e9d5dbdc1b
r26109:9d7a08d936b2
r11652:5c73940aeb94
r11652:5c73940aeb94
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r10285:43923f0738a2
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r8900:dfe0b94b8d96
r9665:f312055347cc
r8900:dfe0b94b8d96
r8771:b6e9d5dbdc1b
r15027:bb71fdfcc554
r8771:b6e9d5dbdc1b
r10285:43923f0738a2
r19821:021f5f9159cc
r10285:43923f0738a2
r10285:43923f0738a2
r10285:43923f0738a2
r10285:43923f0738a2
r10285:43923f0738a2
r10285:43923f0738a2
r10285:43923f0738a2
r10285:43923f0738a2
r19078:1939682c5ebf
r19821:021f5f9159cc
r19078:1939682c5ebf
r26110:91f9ab113048
r19078:1939682c5ebf
r19078:1939682c5ebf
r19079:a1a4921bfd39
r19078:1939682c5ebf
r19078:1939682c5ebf
r19078:1939682c5ebf
r19078:1939682c5ebf
r8771:b6e9d5dbdc1b
r19821:021f5f9159cc
r26109:9d7a08d936b2
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
r10546:a4ec290c1c46
r8771:b6e9d5dbdc1b
r8771:b6e9d5dbdc1b
/*
 * 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 order_type.h Types related to orders. */

#ifndef ORDER_TYPE_H
#define ORDER_TYPE_H

#include "core/enum_type.hpp"

typedef byte VehicleOrderID;  ///< The index of an order within its current vehicle (not pool related)
typedef uint32 OrderID;
typedef uint16 OrderListID;
typedef uint16 DestinationID;

/** Invalid vehicle order index (sentinel) */
static const VehicleOrderID INVALID_VEH_ORDER_ID = 0xFF;
/** Last valid VehicleOrderID. */
static const VehicleOrderID MAX_VEH_ORDER_ID     = INVALID_VEH_ORDER_ID - 1;

/** Invalid order (sentinel) */
static const OrderID INVALID_ORDER = 0xFFFFFF;

/**
 * Maximum number of orders in implicit-only lists before we start searching
 * harder for duplicates.
 */
static const uint IMPLICIT_ORDER_ONLY_CAP = 32;

/** Order types. It needs to be 8bits, because we save and load it as such */
enum OrderType : byte {
	OT_BEGIN         = 0,
	OT_NOTHING       = 0,
	OT_GOTO_STATION  = 1,
	OT_GOTO_DEPOT    = 2,
	OT_LOADING       = 3,
	OT_LEAVESTATION  = 4,
	OT_DUMMY         = 5,
	OT_GOTO_WAYPOINT = 6,
	OT_CONDITIONAL   = 7,
	OT_IMPLICIT      = 8,
	OT_END
};

/**
 * Flags related to the unloading order.
 */
enum OrderUnloadFlags {
	OUF_UNLOAD_IF_POSSIBLE = 0,      ///< Unload all cargo that the station accepts.
	OUFB_UNLOAD            = 1 << 0, ///< Force unloading all cargo onto the platform, possibly not getting paid.
	OUFB_TRANSFER          = 1 << 1, ///< Transfer all cargo onto the platform.
	OUFB_NO_UNLOAD         = 1 << 2, ///< Totally no unloading will be done.
};

/**
 * Flags related to the loading order.
 */
enum OrderLoadFlags {
	OLF_LOAD_IF_POSSIBLE = 0,      ///< Load as long as there is cargo that fits in the train.
	OLFB_FULL_LOAD       = 1 << 1, ///< Full load all cargoes of the consist.
	OLF_FULL_LOAD_ANY    = 3,      ///< Full load a single cargo of the consist.
	OLFB_NO_LOAD         = 4,      ///< Do not load anything.
};

/**
 * Non-stop order flags.
 */
enum OrderNonStopFlags {
	ONSF_STOP_EVERYWHERE                  = 0, ///< The vehicle will stop at any station it passes and the destination.
	ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS = 1, ///< The vehicle will not stop at any stations it passes except the destination.
	ONSF_NO_STOP_AT_DESTINATION_STATION   = 2, ///< The vehicle will stop at any station it passes except the destination.
	ONSF_NO_STOP_AT_ANY_STATION           = 3, ///< The vehicle will not stop at any stations it passes including the destination.
	ONSF_END
};

/**
 * Where to stop the trains.
 */
enum OrderStopLocation {
	OSL_PLATFORM_NEAR_END = 0, ///< Stop at the near end of the platform
	OSL_PLATFORM_MIDDLE   = 1, ///< Stop at the middle of the platform
	OSL_PLATFORM_FAR_END  = 2, ///< Stop at the far end of the platform
	OSL_END
};

/**
 * Reasons that could cause us to go to the depot.
 */
enum OrderDepotTypeFlags {
	ODTF_MANUAL          = 0,      ///< Manually initiated order.
	ODTFB_SERVICE        = 1 << 0, ///< This depot order is because of the servicing limit.
	ODTFB_PART_OF_ORDERS = 1 << 1, ///< This depot order is because of a regular order.
};

/**
 * Actions that can be performed when the vehicle enters the depot.
 */
enum OrderDepotActionFlags {
	ODATF_SERVICE_ONLY   = 0,      ///< Only service the vehicle.
	ODATFB_HALT          = 1 << 0, ///< Service the vehicle and then halt it.
	ODATFB_NEAREST_DEPOT = 1 << 1, ///< Send the vehicle to the nearest depot.
};
DECLARE_ENUM_AS_BIT_SET(OrderDepotActionFlags)

/**
 * Variables (of a vehicle) to 'cause' skipping on.
 */
enum OrderConditionVariable {
	OCV_LOAD_PERCENTAGE,    ///< Skip based on the amount of load
	OCV_RELIABILITY,        ///< Skip based on the reliability
	OCV_MAX_SPEED,          ///< Skip based on the maximum speed
	OCV_AGE,                ///< Skip based on the age
	OCV_REQUIRES_SERVICE,   ///< Skip when the vehicle requires service
	OCV_UNCONDITIONALLY,    ///< Always skip
	OCV_REMAINING_LIFETIME, ///< Skip based on the remaining lifetime
	OCV_MAX_RELIABILITY,    ///< Skip based on the maximum reliability
	OCV_END
};

/**
 * Comparator for the skip reasoning.
 */
enum OrderConditionComparator {
	OCC_EQUALS,      ///< Skip if both values are equal
	OCC_NOT_EQUALS,  ///< Skip if both values are not equal
	OCC_LESS_THAN,   ///< Skip if the value is less than the limit
	OCC_LESS_EQUALS, ///< Skip if the value is less or equal to the limit
	OCC_MORE_THAN,   ///< Skip if the value is more than the limit
	OCC_MORE_EQUALS, ///< Skip if the value is more or equal to the limit
	OCC_IS_TRUE,     ///< Skip if the variable is true
	OCC_IS_FALSE,    ///< Skip if the variable is false
	OCC_END
};


/**
 * Enumeration for the data to set in #CmdModifyOrder.
 */
enum ModifyOrderFlags : byte {
	MOF_NON_STOP,        ///< Passes an OrderNonStopFlags.
	MOF_STOP_LOCATION,   ///< Passes an OrderStopLocation.
	MOF_UNLOAD,          ///< Passes an OrderUnloadType.
	MOF_LOAD,            ///< Passes an OrderLoadType
	MOF_DEPOT_ACTION,    ///< Selects the OrderDepotAction
	MOF_COND_VARIABLE,   ///< A conditional variable changes.
	MOF_COND_COMPARATOR, ///< A comparator changes.
	MOF_COND_VALUE,      ///< The value to set the condition to.
	MOF_COND_DESTINATION,///< Change the destination of a conditional order.
	MOF_END
};
template <> struct EnumPropsT<ModifyOrderFlags> : MakeEnumPropsT<ModifyOrderFlags, byte, MOF_NON_STOP, MOF_END, MOF_END, 4> {};

/**
 * Depot action to switch to when doing a #MOF_DEPOT_ACTION.
 */
enum OrderDepotAction {
	DA_ALWAYS_GO, ///< Always go to the depot
	DA_SERVICE,   ///< Service only if needed
	DA_STOP,      ///< Go to the depot and stop there
	DA_END
};

/**
 * Enumeration for the data to set in #CmdChangeTimetable.
 */
enum ModifyTimetableFlags : byte {
	MTF_WAIT_TIME,    ///< Set wait time.
	MTF_TRAVEL_TIME,  ///< Set travel time.
	MTF_TRAVEL_SPEED, ///< Set max travel speed.
	MTF_END
};
template <> struct EnumPropsT<ModifyTimetableFlags> : MakeEnumPropsT<ModifyTimetableFlags, byte, MTF_WAIT_TIME, MTF_END, MTF_END, 2> {};


/** Clone actions. */
enum CloneOptions : byte {
	CO_SHARE   = 0,
	CO_COPY    = 1,
	CO_UNSHARE = 2
};

struct Order;
struct OrderList;

#endif /* ORDER_TYPE_H */