janwas
6cc0b1649a
- clarify the meaning of mapSize (patchesPerSide) - use a single ClampCoordToMap function for clamping - add annotations to all call sites when it is sure they will succeed - otherwise, ensure return value is checked or at least add debug_assert fixes #311 (successfully built house and dock at top of latium map) thanks to Heron for tracking down the cause! This was SVN commit r7183.
108 lines
3.0 KiB
C++
108 lines
3.0 KiB
C++
/* Copyright (C) 2009 Wildfire Games.
|
|
* This file is part of 0 A.D.
|
|
*
|
|
* 0 A.D. 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, either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* 0 A.D. 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 0 A.D. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef INCLUDED_MAPREADER
|
|
#define INCLUDED_MAPREADER
|
|
|
|
#include "MapIO.h"
|
|
#include "lib/res/handle.h"
|
|
#include "ps/CStr.h"
|
|
#include "LightEnv.h"
|
|
#include "ps/FileIo.h"
|
|
|
|
class CObjectEntry;
|
|
class CTerrain;
|
|
class CUnitManager;
|
|
class WaterManager;
|
|
class SkyManager;
|
|
class CLightEnv;
|
|
class CCamera;
|
|
class CCinemaManager;
|
|
class CTriggerManager;
|
|
|
|
class CXMLReader;
|
|
|
|
class CMapReader : public CMapIO
|
|
{
|
|
friend class CXMLReader;
|
|
|
|
public:
|
|
// constructor
|
|
CMapReader();
|
|
// LoadMap: try to load the map from given file; reinitialise the scene to new data if successful
|
|
void LoadMap(const VfsPath& pathname, CTerrain *pTerrain, CUnitManager *pUnitMan,
|
|
WaterManager* pWaterMan, SkyManager* pSkyMan, CLightEnv *pLightEnv, CCamera *pCamera,
|
|
CCinemaManager* pCinema);
|
|
|
|
private:
|
|
// UnpackTerrain: unpack the terrain from the input stream
|
|
int UnpackTerrain();
|
|
//UnpackCinema: unpack the cinematic tracks from the input stream
|
|
int UnpackCinema();
|
|
// UnpackObjects: unpack world objects from the input stream
|
|
void UnpackObjects();
|
|
// UnpackObjects: unpack lighting parameters from the input stream
|
|
void UnpackLightEnv();
|
|
|
|
// UnpackMap: unpack the given data from the raw data stream into local variables
|
|
int UnpackMap();
|
|
|
|
// ApplyData: take all the input data, and rebuild the scene from it
|
|
int ApplyData();
|
|
|
|
// ReadXML: read some other data (entities, etc) in XML format
|
|
int ReadXML();
|
|
|
|
// clean up everything used during delayed load
|
|
int DelayLoadFinished();
|
|
|
|
// size of map
|
|
ssize_t m_PatchesPerSide;
|
|
// heightmap for map
|
|
std::vector<u16> m_Heightmap;
|
|
// list of terrain textures used by map
|
|
std::vector<Handle> m_TerrainTextures;
|
|
// tile descriptions for each tile
|
|
std::vector<STileDesc> m_Tiles;
|
|
// list of object types used by map
|
|
std::vector<CStr> m_ObjectTypes;
|
|
// descriptions for each objects
|
|
std::vector<SObjectDesc> m_Objects;
|
|
// lightenv stored in file
|
|
CLightEnv m_LightEnv;
|
|
|
|
// state latched by LoadMap and held until DelayedLoadFinished
|
|
CFileUnpacker unpacker;
|
|
CTerrain* pTerrain;
|
|
CUnitManager* pUnitMan;
|
|
WaterManager* pWaterMan;
|
|
SkyManager* pSkyMan;
|
|
CLightEnv* pLightEnv;
|
|
CCamera* pCamera;
|
|
CCinemaManager* pCinema;
|
|
CTriggerManager* pTrigMan;
|
|
VfsPath filename_xml;
|
|
|
|
// UnpackTerrain generator state
|
|
size_t cur_terrain_tex;
|
|
size_t num_terrain_tex;
|
|
|
|
CXMLReader* xml_reader;
|
|
};
|
|
|
|
#endif
|