# ai_order.hpp

Go to the documentation of this file.

    00001 /* $Id: ai_order.hpp 16511 2009-06-03 18:55:45Z rubidium $ */
    00002
    00005 #ifndef AI_ORDER_HPP
    00006 #define AI_ORDER_HPP
    00007
    00008 #include "ai_object.hpp"
    00009 #include "ai_error.hpp"
    00010
    00014 class AIOrder : public AIObject {
    00015 public:
    00016   static const char *GetClassName() { return "AIOrder"; }
    00017
    00021   enum ErrorMessages {
    00023     ERR_ORDER_BASE = AIError::ERR_CAT_ORDER << AIError::ERR_CAT_BIT_SIZE,
    00024
    00026     ERR_ORDER_TOO_MANY,                                  // [STR_8831_NO_MORE_SPACE_FOR_ORDERS]
    00027
    00029     ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION,    // [STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO]
    00030   };
    00031
    00035   enum AIOrderFlags {
    00037     AIOF_NONE              = 0,
    00038
    00040     AIOF_NON_STOP_INTERMEDIATE = 1 << 0,
    00042     AIOF_NON_STOP_DESTINATION  = 1 << 1,
    00043
    00045     AIOF_UNLOAD            = 1 << 2,
    00047     AIOF_TRANSFER          = 1 << 3,
    00049     AIOF_NO_UNLOAD         = 1 << 4,
    00050
    00052     AIOF_FULL_LOAD         = 2 << 5,
    00054     AIOF_FULL_LOAD_ANY     = 3 << 5,
    00056     AIOF_NO_LOAD           = 1 << 7,
    00057
    00059     AIOF_SERVICE_IF_NEEDED = 1 << 2,
    00061     AIOF_STOP_IN_DEPOT     = 1 << 3,
    00062
    00064     AIOF_NON_STOP_FLAGS    = AIOF_NON_STOP_INTERMEDIATE | AIOF_NON_STOP_DESTINATION,
    00066     AIOF_UNLOAD_FLAGS      = AIOF_TRANSFER | AIOF_UNLOAD | AIOF_NO_UNLOAD,
    00068     AIOF_LOAD_FLAGS        = AIOF_FULL_LOAD | AIOF_FULL_LOAD_ANY | AIOF_NO_LOAD,
    00070     AIOF_DEPOT_FLAGS       = AIOF_SERVICE_IF_NEEDED | AIOF_STOP_IN_DEPOT,
    00071
    00073     AIOF_INVALID           = 0xFFFF,
    00074   };
    00075
    00079   enum OrderCondition {
    00080     /* Order _is_ important, as it's based on OrderConditionVariable in order_type.h. */
    00081     OC_LOAD_PERCENTAGE,
    00082     OC_RELIABILITY,
    00083     OC_MAX_SPEED,
    00084     OC_AGE,
    00085     OC_REQUIRES_SERVICE,
    00086     OC_UNCONDITIONALLY,
    00087     OC_INVALID = -1,
    00088   };
    00089
    00093   enum CompareFunction {
    00094     /* Order _is_ important, as it's based on OrderConditionComparator in order_type.h. */
    00095     CF_EQUALS,
    00096     CF_NOT_EQUALS,
    00097     CF_LESS_THAN,
    00098     CF_LESS_EQUALS,
    00099     CF_MORE_THAN,
    00100     CF_MORE_EQUALS,
    00101     CF_IS_TRUE,
    00102     CF_IS_FALSE,
    00103     CF_INVALID = -1,
    00104   };
    00105
    00107   enum OrderPosition {
    00108     ORDER_CURRENT = 0xFF,
    00109     ORDER_INVALID = -1,
    00110   };
    00111
    00119   static bool IsValidVehicleOrder(VehicleID vehicle_id, OrderPosition order_position);
    00120
    00128   static bool IsGotoStationOrder(VehicleID vehicle_id, OrderPosition order_position);
    00129
    00137   static bool IsGotoDepotOrder(VehicleID vehicle_id, OrderPosition order_position);
    00138
    00146   static bool IsGotoWaypointOrder(VehicleID vehicle_id, OrderPosition order_position);
    00147
    00155   static bool IsConditionalOrder(VehicleID vehicle_id, OrderPosition order_position);
    00156
    00166   static bool IsCurrentOrderPartOfOrderList(VehicleID vehicle_id);
    00167
    00178   static OrderPosition ResolveOrderPosition(VehicleID vehicle_id, OrderPosition order_position);
    00179
    00186   static bool AreOrderFlagsValid(TileIndex destination, AIOrderFlags order_flags);
    00187
    00194   static bool IsValidConditionalOrder(OrderCondition condition, CompareFunction compare);
    00195
    00203   static int32 GetOrderCount(VehicleID vehicle_id);
    00204
    00218   static TileIndex GetOrderDestination(VehicleID vehicle_id, OrderPosition order_position);
    00219
    00233   static AIOrderFlags GetOrderFlags(VehicleID vehicle_id, OrderPosition order_position);
    00234
    00243   static OrderPosition GetOrderJumpTo(VehicleID vehicle_id, OrderPosition order_position);
    00244
    00253   static OrderCondition GetOrderCondition(VehicleID vehicle_id, OrderPosition order_position);
    00254
    00263   static CompareFunction GetOrderCompareFunction(VehicleID vehicle_id, OrderPosition order_position);
    00264
    00273   static int32 GetOrderCompareValue(VehicleID vehicle_id, OrderPosition order_position);
    00274
    00285   static bool SetOrderJumpTo(VehicleID vehicle_id, OrderPosition order_position, OrderPosition jump_to);
    00286
    00297   static bool SetOrderCondition(VehicleID vehicle_id, OrderPosition order_position, OrderCondition condition);
    00298
    00309   static bool SetOrderCompareFunction(VehicleID vehicle_id, OrderPosition order_position, CompareFunction compare);
    00310
    00321   static bool SetOrderCompareValue(VehicleID vehicle_id, OrderPosition order_position, int32 value);
    00322
    00335   static bool AppendOrder(VehicleID vehicle_id, TileIndex destination, AIOrderFlags order_flags);
    00336
    00347   static bool AppendConditionalOrder(VehicleID vehicle_id, OrderPosition jump_to);
    00348
    00362   static bool InsertOrder(VehicleID vehicle_id, OrderPosition order_position, TileIndex destination, AIOrderFlags order_flags);
    00363
    00375   static bool InsertConditionalOrder(VehicleID vehicle_id, OrderPosition order_position, OrderPosition jump_to);
    00376
    00385   static bool RemoveOrder(VehicleID vehicle_id, OrderPosition order_position);
    00386
    00387 #ifndef DOXYGEN_SKIP
    00388
    00391   static bool _SetOrderFlags();
    00392 #endif /* DOXYGEN_SKIP */
    00393
    00404   static bool SetOrderFlags(VehicleID vehicle_id, OrderPosition order_position, AIOrderFlags order_flags);
    00405
    00409   static bool ChangeOrder(VehicleID vehicle_id, OrderPosition order_position, AIOrderFlags order_flags);
    00410
    00425   static bool MoveOrder(VehicleID vehicle_id, OrderPosition order_position_move, OrderPosition order_position_target);
    00426
    00435   static bool SkipToOrder(VehicleID vehicle_id, OrderPosition next_order);
    00436
    00448   static bool CopyOrders(VehicleID vehicle_id, VehicleID main_vehicle_id);
    00449
    00460   static bool ShareOrders(VehicleID vehicle_id, VehicleID main_vehicle_id);
    00461
    00468   static bool UnshareOrders(VehicleID vehicle_id);
    00469 };
    00470 DECLARE_ENUM_AS_BIT_SET(AIOrder::AIOrderFlags);
    00471
    00472 #endif /* AI_ORDER_HPP */