From 2e4ac325e2171074edcbe32a741737f11fd93547 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 21 Apr 2018 18:57:22 +0100 Subject: [PATCH] Add extra data fields to Order extended data --- src/order_base.h | 12 ++++++++++++ src/saveload/extended_ver_sl.cpp | 1 + src/saveload/extended_ver_sl.h | 1 + src/saveload/order_sl.cpp | 1 + 4 files changed, 15 insertions(+) diff --git a/src/order_base.h b/src/order_base.h index 6601f52f17..90b9f1af75 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -32,6 +32,7 @@ extern OrderListPool _orderlist_pool; struct OrderExtraInfo { uint8 cargo_type_flags[NUM_CARGO] = {}; ///< Load/unload types for each cargo type. + uint32 xdata = 0; ///< Extra arbitrary data uint8 xflags = 0; ///< Extra flags }; @@ -85,6 +86,17 @@ private: } 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() : refit_cargo(CT_NO_REFIT), max_speed(UINT16_MAX) {} diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp index 0c62b33172..cd8f262a42 100644 --- a/src/saveload/extended_ver_sl.cpp +++ b/src/saveload/extended_ver_sl.cpp @@ -82,6 +82,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = { { 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_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 }; diff --git a/src/saveload/extended_ver_sl.h b/src/saveload/extended_ver_sl.h index c0d618203d..60c6ba42e9 100644 --- a/src/saveload/extended_ver_sl.h +++ b/src/saveload/extended_ver_sl.h @@ -56,6 +56,7 @@ enum SlXvFeatureIndex { XSLFI_TIMETABLE_EXTRA, ///< Vehicle timetable extra fields XSLFI_TRAIN_FLAGS_EXTRA, ///< Train flags field extra size 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_HEIGHT_8_BIT, ///< Map tile height is 8 bit instead of 4 bit, but savegame version may be before this became true in trunk diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp index 53926a9a92..23ffe6725a 100644 --- a/src/saveload/order_sl.cpp +++ b/src/saveload/order_sl.cpp @@ -204,6 +204,7 @@ const SaveLoad *GetOrderExtraInfoDescription() static const SaveLoad _order_extra_info_desc[] = { 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, xdata, SLE_UINT32, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_ORDER_EXTRA_DATA)), SLE_END() };