# industry_sl.cpp

Go to the documentation of this file.

    00001 /* $Id$ */
    00002
    00003 /*
    00004  * This file is part of OpenTTD.
    00005  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
    00006  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    00007  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
    00008  */
    00009
    00012 #include "../stdafx.h"
    00013 #include "../industry.h"
    00014
    00015 #include "saveload.h"
    00016 #include "newgrf_sl.h"
    00017
    00018 static const SaveLoad _industry_desc[] = {
    00019   SLE_CONDVAR(Industry, location.tile,              SLE_FILE_U16 | SLE_VAR_U32,  0, 5),
    00020   SLE_CONDVAR(Industry, location.tile,              SLE_UINT32,                  6, SL_MAX_VERSION),
    00021       SLE_VAR(Industry, location.w,                 SLE_FILE_U8 | SLE_VAR_U16),
    00022       SLE_VAR(Industry, location.h,                 SLE_FILE_U8 | SLE_VAR_U16),
    00023       SLE_REF(Industry, town,                       REF_TOWN),
    00024   SLE_CONDNULL( 2, 0, 60),
    00025   SLE_CONDARR(Industry, produced_cargo,             SLE_UINT8,  2,              78, SL_MAX_VERSION),
    00026   SLE_CONDARR(Industry, incoming_cargo_waiting,     SLE_UINT16, 3,              70, SL_MAX_VERSION),
    00027       SLE_ARR(Industry, produced_cargo_waiting,     SLE_UINT16, 2),
    00028       SLE_ARR(Industry, production_rate,            SLE_UINT8,  2),
    00029   SLE_CONDNULL( 3, 0, 60),
    00030   SLE_CONDARR(Industry, accepts_cargo,              SLE_UINT8,  3,              78, SL_MAX_VERSION),
    00031       SLE_VAR(Industry, prod_level,                 SLE_UINT8),
    00032       SLE_ARR(Industry, this_month_production,      SLE_UINT16, 2),
    00033       SLE_ARR(Industry, this_month_transported,     SLE_UINT16, 2),
    00034       SLE_ARR(Industry, last_month_pct_transported, SLE_UINT8,  2),
    00035       SLE_ARR(Industry, last_month_production,      SLE_UINT16, 2),
    00036       SLE_ARR(Industry, last_month_transported,     SLE_UINT16, 2),
    00037
    00038       SLE_VAR(Industry, counter,                    SLE_UINT16),
    00039
    00040       SLE_VAR(Industry, type,                       SLE_UINT8),
    00041       SLE_VAR(Industry, owner,                      SLE_UINT8),
    00042       SLE_VAR(Industry, random_colour,              SLE_UINT8),
    00043   SLE_CONDVAR(Industry, last_prod_year,             SLE_FILE_U8 | SLE_VAR_I32,  0, 30),
    00044   SLE_CONDVAR(Industry, last_prod_year,             SLE_INT32,                 31, SL_MAX_VERSION),
    00045       SLE_VAR(Industry, was_cargo_delivered,        SLE_UINT8),
    00046
    00047   SLE_CONDVAR(Industry, founder,                    SLE_UINT8,                 70, SL_MAX_VERSION),
    00048   SLE_CONDVAR(Industry, construction_date,          SLE_INT32,                 70, SL_MAX_VERSION),
    00049   SLE_CONDVAR(Industry, construction_type,          SLE_UINT8,                 70, SL_MAX_VERSION),
    00050   SLE_CONDVAR(Industry, last_cargo_accepted_at,     SLE_INT32,                 70, SL_MAX_VERSION),
    00051   SLE_CONDVAR(Industry, selected_layout,            SLE_UINT8,                 73, SL_MAX_VERSION),
    00052
    00053   SLE_CONDARR(Industry, psa.storage,                SLE_UINT32, 16,            76, SL_MAX_VERSION),
    00054
    00055   SLE_CONDVAR(Industry, random_triggers,            SLE_UINT8,                 82, SL_MAX_VERSION),
    00056   SLE_CONDVAR(Industry, random,                     SLE_UINT16,                82, SL_MAX_VERSION),
    00057
    00058   SLE_CONDNULL(32, 2, 143), // old reserved space
    00059
    00060   SLE_END()
    00061 };
    00062
    00063 static void Save_INDY()
    00064 {
    00065   Industry *ind;
    00066
    00067   /* Write the industries */
    00068   FOR_ALL_INDUSTRIES(ind) {
    00069     SlSetArrayIndex(ind->index);
    00070     SlObject(ind, _industry_desc);
    00071   }
    00072 }
    00073
    00074 static void Save_IIDS()
    00075 {
    00076   Save_NewGRFMapping(_industry_mngr);
    00077 }
    00078
    00079 static void Save_TIDS()
    00080 {
    00081   Save_NewGRFMapping(_industile_mngr);
    00082 }
    00083
    00084 static void Load_INDY()
    00085 {
    00086   int index;
    00087
    00088   Industry::ResetIndustryCounts();
    00089
    00090   while ((index = SlIterateArray()) != -1) {
    00091     Industry *i = new (index) Industry();
    00092     SlObject(i, _industry_desc);
    00093     Industry::IncIndustryTypeCount(i->type);
    00094   }
    00095 }
    00096
    00097 static void Load_IIDS()
    00098 {
    00099   Load_NewGRFMapping(_industry_mngr);
    00100 }
    00101
    00102 static void Load_TIDS()
    00103 {
    00104   Load_NewGRFMapping(_industile_mngr);
    00105 }
    00106
    00107 static void Ptrs_INDY()
    00108 {
    00109   Industry *i;
    00110
    00111   FOR_ALL_INDUSTRIES(i) {
    00112     SlObject(i, _industry_desc);
    00113   }
    00114 }
    00115
    00117 static const SaveLoad _industry_builder_desc[] = {
    00118   SLEG_VAR(_industry_builder.wanted_inds, SLE_UINT32),
    00119   SLEG_END()
    00120 };
    00121
    00123 static void LoadSave_IBLD()
    00124 {
    00125   SlGlobList(_industry_builder_desc);
    00126 }
    00127
    00129 static const SaveLoad _industrytype_builder_desc[] = {
    00130   SLE_VAR(IndustryTypeBuildData, probability,  SLE_UINT32),
    00131   SLE_VAR(IndustryTypeBuildData, min_number,   SLE_UINT8),
    00132   SLE_VAR(IndustryTypeBuildData, target_count, SLE_UINT16),
    00133   SLE_VAR(IndustryTypeBuildData, max_wait,     SLE_UINT16),
    00134   SLE_VAR(IndustryTypeBuildData, wait_count,   SLE_UINT16),
    00135   SLE_END()
    00136 };
    00137
    00139 static void Save_ITBL()
    00140 {
    00141   for (int i = 0; i < NUM_INDUSTRYTYPES; i++) {
    00142     SlSetArrayIndex(i);
    00143     SlObject(_industry_builder.builddata + i, _industrytype_builder_desc);
    00144   }
    00145 }
    00146
    00148 static void Load_ITBL()
    00149 {
    00150   int index;
    00151   for (int i = 0; i < NUM_INDUSTRYTYPES; i++) {
    00152     index = SlIterateArray();
    00153     assert(index == i);
    00154     SlObject(_industry_builder.builddata + i, _industrytype_builder_desc);
    00155   }
    00156   index = SlIterateArray();
    00157   assert(index == -1);
    00158 }
    00159
    00160 extern const ChunkHandler _industry_chunk_handlers[] = {
    00161   { 'INDY', Save_INDY,     Load_INDY,     Ptrs_INDY, NULL, CH_ARRAY},
    00162   { 'IIDS', Save_IIDS,     Load_IIDS,     NULL,      NULL, CH_ARRAY},
    00163   { 'TIDS', Save_TIDS,     Load_TIDS,     NULL,      NULL, CH_ARRAY},
    00164   { 'IBLD', LoadSave_IBLD, LoadSave_IBLD, NULL,      NULL, CH_RIFF},
    00165   { 'ITBL', Save_ITBL,     Load_ITBL,     NULL,      NULL, CH_ARRAY | CH_LAST},
    00166 };