Add extra data fields to Order extended data
This commit is contained in:
@@ -32,6 +32,7 @@ extern OrderListPool _orderlist_pool;
|
|||||||
|
|
||||||
struct OrderExtraInfo {
|
struct OrderExtraInfo {
|
||||||
uint8 cargo_type_flags[NUM_CARGO] = {}; ///< Load/unload types for each cargo type.
|
uint8 cargo_type_flags[NUM_CARGO] = {}; ///< Load/unload types for each cargo type.
|
||||||
|
uint32 xdata = 0; ///< Extra arbitrary data
|
||||||
uint8 xflags = 0; ///< Extra flags
|
uint8 xflags = 0; ///< Extra flags
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -85,6 +86,17 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
inline uint32 GetXData() const
|
||||||
|
{
|
||||||
|
return this->extra != nullptr ? this->extra->xdata : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline uint32 &GetXDataRef()
|
||||||
|
{
|
||||||
|
CheckExtraInfoAlloced();
|
||||||
|
return this->extra->xdata;
|
||||||
|
}
|
||||||
|
|
||||||
Order *next; ///< Pointer to next order. If NULL, end of list
|
Order *next; ///< Pointer to next order. If NULL, end of list
|
||||||
|
|
||||||
Order() : refit_cargo(CT_NO_REFIT), max_speed(UINT16_MAX) {}
|
Order() : refit_cargo(CT_NO_REFIT), max_speed(UINT16_MAX) {}
|
||||||
|
@@ -82,6 +82,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
|||||||
{ XSLFI_TIMETABLE_EXTRA, XSCF_NULL, 1, 1, "timetable_extra", NULL, NULL, "ORDX" },
|
{ XSLFI_TIMETABLE_EXTRA, XSCF_NULL, 1, 1, "timetable_extra", NULL, NULL, "ORDX" },
|
||||||
{ XSLFI_TRAIN_FLAGS_EXTRA, XSCF_NULL, 1, 1, "train_flags_extra", NULL, NULL, NULL },
|
{ XSLFI_TRAIN_FLAGS_EXTRA, XSCF_NULL, 1, 1, "train_flags_extra", NULL, NULL, NULL },
|
||||||
{ XSLFI_TRAIN_THROUGH_LOAD, XSCF_NULL, 1, 1, "train_through_load", NULL, NULL, NULL },
|
{ XSLFI_TRAIN_THROUGH_LOAD, XSCF_NULL, 1, 1, "train_through_load", NULL, NULL, NULL },
|
||||||
|
{ XSLFI_ORDER_EXTRA_DATA, XSCF_NULL, 1, 1, "order_extra_data", NULL, NULL, NULL },
|
||||||
{ XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker
|
{ XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -56,6 +56,7 @@ enum SlXvFeatureIndex {
|
|||||||
XSLFI_TIMETABLE_EXTRA, ///< Vehicle timetable extra fields
|
XSLFI_TIMETABLE_EXTRA, ///< Vehicle timetable extra fields
|
||||||
XSLFI_TRAIN_FLAGS_EXTRA, ///< Train flags field extra size
|
XSLFI_TRAIN_FLAGS_EXTRA, ///< Train flags field extra size
|
||||||
XSLFI_TRAIN_THROUGH_LOAD, ///< Train through load/unload
|
XSLFI_TRAIN_THROUGH_LOAD, ///< Train through load/unload
|
||||||
|
XSLFI_ORDER_EXTRA_DATA, ///< Order extra data field(s)
|
||||||
|
|
||||||
XSLFI_RIFF_HEADER_60_BIT, ///< Size field in RIFF chunk header is 60 bit
|
XSLFI_RIFF_HEADER_60_BIT, ///< Size field in RIFF chunk header is 60 bit
|
||||||
XSLFI_HEIGHT_8_BIT, ///< Map tile height is 8 bit instead of 4 bit, but savegame version may be before this became true in trunk
|
XSLFI_HEIGHT_8_BIT, ///< Map tile height is 8 bit instead of 4 bit, but savegame version may be before this became true in trunk
|
||||||
|
@@ -204,6 +204,7 @@ const SaveLoad *GetOrderExtraInfoDescription()
|
|||||||
static const SaveLoad _order_extra_info_desc[] = {
|
static const SaveLoad _order_extra_info_desc[] = {
|
||||||
SLE_ARR(OrderExtraInfo, cargo_type_flags, SLE_UINT8, NUM_CARGO),
|
SLE_ARR(OrderExtraInfo, cargo_type_flags, SLE_UINT8, NUM_CARGO),
|
||||||
SLE_CONDVAR_X(OrderExtraInfo, xflags, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA)),
|
SLE_CONDVAR_X(OrderExtraInfo, xflags, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TIMETABLE_EXTRA)),
|
||||||
|
SLE_CONDVAR_X(OrderExtraInfo, xdata, SLE_UINT32, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ORDER_EXTRA_DATA)),
|
||||||
SLE_END()
|
SLE_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user