File diff r25751:3154638283de → r25752:2d6c2238f03d
src/saveload/animated_tile_sl.cpp
Show inline comments
 
/*
 
 * This file is part of OpenTTD.
 
 * 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.
 
 * 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.
 
 * 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 animated_tile_sl.cpp Code handling saving and loading of animated tiles */
 

	
 
#include "../stdafx.h"
 

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

	
 
#include "../tile_type.h"
 
#include "../core/alloc_func.hpp"
 
#include "../core/smallvec_type.hpp"
 

	
 
#include "saveload.h"
 

	
 
#include "../safeguards.h"
 

	
 
extern std::vector<TileIndex> _animated_tiles;
 

	
 
static const SaveLoad _animated_tile_desc[] = {
 
	 SLEG_VECTOR("tiles", _animated_tiles, SLE_UINT32),
 
};
 

	
 
/**
 
 * Save the ANIT chunk.
 
 */
 
static void Save_ANIT()
 
{
 
	SlTableHeader(_animated_tile_desc);
 

	
 
	SlSetArrayIndex(0);
 
	SlGlobList(_animated_tile_desc);
 
}
 

	
 
/**
 
 * Load the ANIT chunk; the chunk containing the animated tiles.
 
 */
 
static void Load_ANIT()
 
{
 
	/* Before version 80 we did NOT have a variable length animated tile table */
 
	if (IsSavegameVersionBefore(SLV_80)) {
 
		/* In pre version 6, we has 16bit per tile, now we have 32bit per tile, convert it ;) */
 
@@ -48,26 +52,24 @@ static void Load_ANIT()
 
		}
 
		return;
 
	}
 

	
 
	if (IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY)) {
 
		size_t count = SlGetFieldLength() / sizeof(_animated_tiles.front());
 
		_animated_tiles.clear();
 
		_animated_tiles.resize(_animated_tiles.size() + count);
 
		SlCopy(_animated_tiles.data(), count, SLE_UINT32);
 
		return;
 
	}
 

	
 
	const std::vector<SaveLoad> slt = SlCompatTableHeader(_animated_tile_desc, _animated_tile_sl_compat);
 

	
 
	if (SlIterateArray() == -1) return;
 
	SlGlobList(_animated_tile_desc);
 
	SlGlobList(slt);
 
	if (SlIterateArray() != -1) SlErrorCorrupt("Too many ANIT entries");
 
}
 

	
 
/**
 
 * "Definition" imported by the saveload code to be able to load and save
 
 * the animated tile table.
 
 */
 
static const ChunkHandler animated_tile_chunk_handlers[] = {
 
	{ 'ANIT', Save_ANIT, Load_ANIT, nullptr, nullptr, CH_ARRAY },
 
	{ 'ANIT', Save_ANIT, Load_ANIT, nullptr, nullptr, CH_TABLE },
 
};
 

	
 
extern const ChunkHandlerTable _animated_tile_chunk_handlers(animated_tile_chunk_handlers);