summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralberth <alberth@openttd.org>2010-11-13 15:13:14 +0000
committeralberth <alberth@openttd.org>2010-11-13 15:13:14 +0000
commit4d419b9f3e058be20f62e494829e8ae1b167e82b (patch)
tree7d941886dab023347474b25e71d88e9e98904e5e
parent67549a206c438dee83f7a5c3cca86cef316edad6 (diff)
downloadopenttd-4d419b9f3e058be20f62e494829e8ae1b167e82b.tar.xz
(svn r21170) -Codechange: Store industry management data in the save game (some of it is used in the very near future).
-rw-r--r--src/industry.h4
-rw-r--r--src/saveload/industry_sl.cpp52
2 files changed, 53 insertions, 3 deletions
diff --git a/src/industry.h b/src/industry.h
index 9ff0e5403..c65c65b48 100644
--- a/src/industry.h
+++ b/src/industry.h
@@ -146,7 +146,10 @@ void ReleaseDisastersTargetingIndustry(IndustryID);
/** Data for managing the number of industries of a single industry type. */
struct IndustryTypeBuildData {
uint32 probability; ///< Relative probability of building this industry.
+ byte min_number; ///< Smallest number of industries that should exist (either \c 0 or \c 1).
uint16 target_count; ///< Desired number of industries of this type.
+ uint16 max_wait; ///< Starting number of turns to wait (copied to #wait_count).
+ uint16 wait_count; ///< Number of turns to wait before trying to build again.
void GetIndustryTypeData(IndustryType it);
};
@@ -156,6 +159,7 @@ struct IndustryTypeBuildData {
*/
struct IndustryBuildData {
IndustryTypeBuildData builddata[NUM_INDUSTRYTYPES]; ///< Industry build data for every industry type.
+ uint32 wanted_inds; ///< Number of wanted industries (bits 31-16), and a fraction (bits 15-0).
void SetupTargetCount();
void TryBuildNewIndustry();
diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp
index e3c9ff438..2ba07a1a6 100644
--- a/src/saveload/industry_sl.cpp
+++ b/src/saveload/industry_sl.cpp
@@ -113,8 +113,54 @@ static void Ptrs_INDY()
}
}
+/** Description of the data to save and load in #IndustryBuildData. */
+static const SaveLoad _industry_builder_desc[] = {
+ SLEG_VAR(_industry_builder.wanted_inds, SLE_UINT32),
+ SLEG_END()
+};
+
+/** Load/save industry builder. */
+static void LoadSave_IBLD()
+{
+ SlGlobList(_industry_builder_desc);
+}
+
+/** Description of the data to save and load in #IndustryTypeBuildData. */
+static const SaveLoad _industrytype_builder_desc[] = {
+ SLE_VAR(IndustryTypeBuildData, probability, SLE_UINT32),
+ SLE_VAR(IndustryTypeBuildData, min_number, SLE_UINT8),
+ SLE_VAR(IndustryTypeBuildData, target_count, SLE_UINT16),
+ SLE_VAR(IndustryTypeBuildData, max_wait, SLE_UINT16),
+ SLE_VAR(IndustryTypeBuildData, wait_count, SLE_UINT16),
+ SLE_END()
+};
+
+/** Save industry-type build data. */
+static void Save_ITBL()
+{
+ for (int i = 0; i < NUM_INDUSTRYTYPES; i++) {
+ SlSetArrayIndex(i);
+ SlObject(_industry_builder.builddata + i, _industrytype_builder_desc);
+ }
+}
+
+/** Load industry-type build data. */
+static void Load_ITBL()
+{
+ int index;
+ for (int i = 0; i < NUM_INDUSTRYTYPES; i++) {
+ index = SlIterateArray();
+ assert(index == i);
+ SlObject(_industry_builder.builddata + i, _industrytype_builder_desc);
+ }
+ index = SlIterateArray();
+ assert(index == -1);
+}
+
extern const ChunkHandler _industry_chunk_handlers[] = {
- { 'INDY', Save_INDY, Load_INDY, Ptrs_INDY, NULL, CH_ARRAY},
- { 'IIDS', Save_IIDS, Load_IIDS, NULL, NULL, CH_ARRAY},
- { 'TIDS', Save_TIDS, Load_TIDS, NULL, NULL, CH_ARRAY | CH_LAST},
+ { 'INDY', Save_INDY, Load_INDY, Ptrs_INDY, NULL, CH_ARRAY},
+ { 'IIDS', Save_IIDS, Load_IIDS, NULL, NULL, CH_ARRAY},
+ { 'TIDS', Save_TIDS, Load_TIDS, NULL, NULL, CH_ARRAY},
+ { 'IBLD', LoadSave_IBLD, LoadSave_IBLD, NULL, NULL, CH_RIFF},
+ { 'ITBL', Save_ITBL, Load_ITBL, NULL, NULL, CH_ARRAY | CH_LAST},
};