Serious-Engine/Sources/Engine/Terrain/TerrainArchive.cpp
2016-03-11 18:20:51 -06:00

76 lines
2.2 KiB
C++

/* Copyright (c) 2002-2012 Croteam Ltd.
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation
This program 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 this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
#include "stdh.h"
#include <Engine/Terrain/Terrain.h>
#include <Engine/Terrain/TerrainArchive.h>
#include <Engine/World/WorldEditingProfile.h>
#include <Engine/World/World.h>
#include <Engine/Math/Float.h>
#include <Engine/Base/ProgressHook.h>
#include <Engine/Base/Stream.h>
#include <Engine/Entities/Entity.h>
#include <Engine/Base/ListIterator.inl>
#include <Engine/Templates/DynamicArray.cpp>
#include <Engine/Templates/StaticArray.cpp>
template CDynamicArray<CBrush3D>;
/*
* Read from stream.
*/
void CTerrainArchive::Read_t( CTStream *istrFile) // throw char *
{
istrFile->ExpectID_t("TRAR"); // terrain archive
INDEX ctTerrains;
// read number of terrains
(*istrFile)>>ctTerrains;
// if there are some terrains
if (ctTerrains!=0) {
// create that much terrains
CTerrain *atrBrushes = ta_atrTerrains.New(ctTerrains);
// for each of the new terrains
for (INDEX iTerrain=0; iTerrain<ctTerrains; iTerrain++) {
// read it from stream
CallProgressHook_t(FLOAT(iTerrain)/ctTerrains);
ta_atrTerrains[iTerrain].Read_t(istrFile);
}
}
istrFile->ExpectID_t("EOTA"); // end of terrain archive
}
/*
* Write to stream.
*/
void CTerrainArchive::Write_t( CTStream *ostrFile) // throw char *
{
ostrFile->WriteID_t("TRAR"); // terrain archive
// write the number of terrains
(*ostrFile)<<ta_atrTerrains.Count();
// for each of the terrains
FOREACHINDYNAMICARRAY(ta_atrTerrains, CTerrain, ittr) {
// write it to stream
ittr->Write_t(ostrFile);
}
ostrFile->WriteID_t("EOTA"); // end of terrain archive
}