diff --git a/src/order_base.h b/src/order_base.h --- a/src/order_base.h +++ b/src/order_base.h @@ -9,8 +9,10 @@ #include "oldpool.h" #include "core/bitmath_func.hpp" #include "cargo_type.h" +#include "depot_type.h" #include "station_type.h" #include "vehicle_type.h" +#include "waypoint_type.h" DECLARE_OLD_POOL(Order, Order, 6, 1000) @@ -20,9 +22,20 @@ DECLARE_OLD_POOL(Order, Order, 6, 1000) * - REF_ORDER (all REFs are currently limited to 16 bits!!) */ struct Order : PoolItem { +private: + friend const struct SaveLoad *GetVehicleDescription(VehicleType vt); ///< Saving and loading the current order of vehicles. + friend void Load_VEHS(); ///< Loading of ancient vehicles. + friend const struct SaveLoad *GetOrderDescription(); ///< Saving and loading of orders. + friend uint32 PackOrder(const Order *order); ///< 'Compressing' an order. + friend Order UnpackOrder(uint32 packed); ///< 'Uncompressing' an order. + friend Order UnpackOldOrder(uint16 packed); ///< 'Uncompressing' a loaded old order. + friend Order UnpackVersion4Order(uint16 packed); ///< 'Uncompressing' a loaded ancient order. + + OrderTypeByte type; + +public: Order *next; ///< Pointer to next order. If NULL, end of list - OrderTypeByte type; uint8 flags; DestinationID dest; ///< The destionation of the order. @@ -37,16 +50,64 @@ struct Order : PoolItemtype != OT_NOTHING; } /** + * Check whether this order is of the given type. + * @param type the type to check against. + * @return true if the order matches. + */ + inline bool IsType(OrderType type) const { return this->type == type; } + + /** + * Get the type of order of this order. + * @return the order type. + */ + inline OrderType GetType() const { return this->type; } + + /** * 'Free' the order * @note ONLY use on "current_order" vehicle orders! */ void Free(); /** + * Makes this order a Go To Station order. + * @param destsination the station to go to. + */ + void MakeGoToStation(StationID destination); + + /** + * Makes this order a Go To Depot order. + * @param destination the depot to go to. + * @param order is this order a 'default' order, or an overriden vehicle order? + */ + void MakeGoToDepot(DepotID destination, bool order); + + /** + * Makes this order a Go To Waypoint order. + * @param destination the waypoint to go to. + */ + void MakeGoToWaypoint(WaypointID destination); + + /** + * Makes this order a Loading order. + */ + void MakeLoading(); + + /** + * Makes this order a Leave Station order. + */ + void MakeLeaveStation(); + + /** + * Makes this order a Dummy order. + */ + void MakeDummy(); + + /** * Free a complete order chain. * @note do not use on "current_order" vehicle orders! */