2016-03-11 14:57:17 +01:00
|
|
|
/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */
|
|
|
|
|
2016-03-29 03:03:54 +02:00
|
|
|
#include "Engine/StdH.h"
|
2016-03-11 14:57:17 +01:00
|
|
|
|
|
|
|
#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>
|
|
|
|
|
2016-03-29 03:03:54 +02:00
|
|
|
template class CDynamicArray<CBrush3D>;
|
2016-03-11 14:57:17 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
* 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
|
|
|
|
}
|