File diff r25751:3154638283de → r25752:2d6c2238f03d
src/saveload/story_sl.cpp
Show inline comments
 
@@ -5,15 +5,17 @@
 
 * 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/>.
 
 */
 

	
 
/** @file story_sl.cpp Code handling saving and loading of story pages */
 

	
 
#include "../stdafx.h"
 
#include "../story_base.h"
 

	
 
#include "saveload.h"
 
#include "compat/story_sl_compat.h"
 

	
 
#include "../story_base.h"
 

	
 
#include "../safeguards.h"
 

	
 
/** Called after load to trash broken pages. */
 
void AfterLoadStoryBook()
 
{
 
@@ -35,25 +37,29 @@ static const SaveLoad _story_page_elemen
 
	    SLE_VAR(StoryPageElement, referenced_id, SLE_UINT32),
 
	    SLE_STR(StoryPageElement, text,          SLE_STR | SLF_ALLOW_CONTROL, 0),
 
};
 

	
 
static void Save_STORY_PAGE_ELEMENT()
 
{
 
	SlTableHeader(_story_page_elements_desc);
 

	
 
	for (StoryPageElement *s : StoryPageElement::Iterate()) {
 
		SlSetArrayIndex(s->index);
 
		SlObject(s, _story_page_elements_desc);
 
	}
 
}
 

	
 
static void Load_STORY_PAGE_ELEMENT()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_story_page_elements_desc, _story_page_elements_sl_compat);
 

	
 
	int index;
 
	uint32 max_sort_value = 0;
 
	while ((index = SlIterateArray()) != -1) {
 
		StoryPageElement *s = new (index) StoryPageElement();
 
		SlObject(s, _story_page_elements_desc);
 
		SlObject(s, slt);
 
		if (s->sort_value > max_sort_value) {
 
			max_sort_value = s->sort_value;
 
		}
 
	}
 
	/* Update the next sort value, so that the next
 
	 * created page is shown after all existing pages.
 
@@ -69,35 +75,39 @@ static const SaveLoad _story_pages_desc[
 
	SLE_CONDVAR(StoryPage, company,    SLE_UINT8,                  SLV_185, SL_MAX_VERSION),
 
	    SLE_STR(StoryPage, title,      SLE_STR | SLF_ALLOW_CONTROL, 0),
 
};
 

	
 
static void Save_STORY_PAGE()
 
{
 
	SlTableHeader(_story_pages_desc);
 

	
 
	for (StoryPage *s : StoryPage::Iterate()) {
 
		SlSetArrayIndex(s->index);
 
		SlObject(s, _story_pages_desc);
 
	}
 
}
 

	
 
static void Load_STORY_PAGE()
 
{
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_story_pages_desc, _story_pages_sl_compat);
 

	
 
	int index;
 
	uint32 max_sort_value = 0;
 
	while ((index = SlIterateArray()) != -1) {
 
		StoryPage *s = new (index) StoryPage();
 
		SlObject(s, _story_pages_desc);
 
		SlObject(s, slt);
 
		if (s->sort_value > max_sort_value) {
 
			max_sort_value = s->sort_value;
 
		}
 
	}
 
	/* Update the next sort value, so that the next
 
	 * created page is shown after all existing pages.
 
	 */
 
	_story_page_next_sort_value = max_sort_value + 1;
 
}
 

	
 
static const ChunkHandler story_page_chunk_handlers[] = {
 
	{ 'STPE', Save_STORY_PAGE_ELEMENT, Load_STORY_PAGE_ELEMENT, nullptr, nullptr, CH_ARRAY },
 
	{ 'STPA', Save_STORY_PAGE,         Load_STORY_PAGE,         nullptr, nullptr, CH_ARRAY },
 
	{ 'STPE', Save_STORY_PAGE_ELEMENT, Load_STORY_PAGE_ELEMENT, nullptr, nullptr, CH_TABLE },
 
	{ 'STPA', Save_STORY_PAGE,         Load_STORY_PAGE,         nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _story_page_chunk_handlers(story_page_chunk_handlers);