Pyrogenesis  trunk
MapReader.h
Go to the documentation of this file.
1 /* Copyright (C) 2016 Wildfire Games.
2  * This file is part of 0 A.D.
3  *
4  * 0 A.D. is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * 0 A.D. is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef INCLUDED_MAPREADER
19 #define INCLUDED_MAPREADER
20 
21 #include "MapIO.h"
22 #include "lib/res/handle.h"
23 #include "ps/CStr.h"
24 #include "LightEnv.h"
25 #include "ps/FileIo.h"
28 
29 class CObjectEntry;
30 class CTerrain;
31 class WaterManager;
32 class SkyManager;
33 class CLightEnv;
34 class CCinemaManager;
35 class CPostprocManager;
36 class CTriggerManager;
37 class CSimulation2;
38 class CSimContext;
40 class ScriptInterface;
41 class CGameView;
42 class CXMLReader;
43 class CMapGenerator;
44 
45 class CMapReader : public CMapIO
46 {
47  friend class CXMLReader;
48 
49 public:
50  // constructor
51  CMapReader();
52  ~CMapReader();
53 
54  // LoadMap: try to load the map from given file; reinitialise the scene to new data if successful
55  void LoadMap(const VfsPath& pathname, JSRuntime* rt, JS::HandleValue settings, CTerrain*, WaterManager*, SkyManager*, CLightEnv*, CGameView*,
56  CCinemaManager*, CTriggerManager*, CPostprocManager* pPostproc, CSimulation2*, const CSimContext*,
57  int playerID, bool skipEntities);
58 
59  void LoadRandomMap(const CStrW& scriptFile, JSRuntime* rt, JS::HandleValue settings, CTerrain*, WaterManager*, SkyManager*, CLightEnv*, CGameView*, CCinemaManager*, CTriggerManager*, CPostprocManager* pPostproc_, CSimulation2*, int playerID);
60 
61 private:
62  // Load script settings for use by scripts
63  int LoadScriptSettings();
64 
65  // load player settings only
66  int LoadPlayerSettings();
67 
68  // load map settings only
69  int LoadMapSettings();
70 
71  // UnpackTerrain: unpack the terrain from the input stream
72  int UnpackTerrain();
73  // UnpackCinema: unpack the cinematic tracks from the input stream
74  int UnpackCinema();
75 
76  // UnpackMap: unpack the given data from the raw data stream into local variables
77  int UnpackMap();
78 
79  // ApplyData: take all the input data, and rebuild the scene from it
80  int ApplyData();
81  int ApplyTerrainData();
82 
83  // read some misc data from the XML file
84  int ReadXML();
85 
86  // read entity data from the XML file
87  int ReadXMLEntities();
88 
89  // clean up everything used during delayed load
90  int DelayLoadFinished();
91 
92  // Copy random map settings over to sim
93  int LoadRMSettings();
94 
95  // Generate random map
96  int GenerateMap();
97 
98  // Parse script data into terrain
99  int ParseTerrain();
100 
101  // Parse script data into entities
102  int ParseEntities();
103 
104  // Parse script data into environment
105  int ParseEnvironment();
106 
107  // Parse script data into camera
108  int ParseCamera();
109 
110 
111  // size of map
113  // heightmap for map
114  std::vector<u16> m_Heightmap;
115  // list of terrain textures used by map
116  std::vector<CTerrainTextureEntry*> m_TerrainTextures;
117  // tile descriptions for each tile
118  std::vector<STileDesc> m_Tiles;
119  // lightenv stored in file
121  // startup script
122  CStrW m_Script;
123 
124  // random map data
126  JS::PersistentRootedValue m_ScriptSettings;
127  JS::PersistentRootedValue m_MapData;
128 
130 
131  // state latched by LoadMap and held until DelayedLoadFinished
140  CTriggerManager* pTrigMan;
146  bool only_xml;
150 
151  // UnpackTerrain generator state
154 
156 };
157 
158 /**
159  * A restricted map reader that returns various summary information
160  * for use by scripts (particularly the GUI).
161  */
163 {
164 public:
165  /**
166  * Try to load a map file.
167  * @param pathname Path to .pmp or .xml file
168  */
169  PSRETURN LoadMap(const VfsPath& pathname);
170 
171  /**
172  * Returns a value of the form:
173  * @code
174  * {
175  * "settings": { ... contents of the map's <ScriptSettings> ... }
176  * }
177  * @endcode
178  */
179  void GetMapSettings(ScriptInterface& scriptInterface, JS::MutableHandleValue);
180 
181 private:
183 };
184 
185 #endif
JS::PersistentRootedValue m_ScriptSettings
Definition: MapReader.h:126
CPostprocManager * pPostproc
Definition: MapReader.h:136
std::vector< CTerrainTextureEntry * > m_TerrainTextures
Definition: MapReader.h:116
int ReadXMLEntities()
Definition: MapReader.cpp:1201
void LoadMap(const VfsPath &pathname, JSRuntime *rt, JS::HandleValue settings, CTerrain *, WaterManager *, SkyManager *, CLightEnv *, CGameView *, CCinemaManager *, CTriggerManager *, CPostprocManager *pPostproc, CSimulation2 *, const CSimContext *, int playerID, bool skipEntities)
Definition: MapReader.cpp:68
int ParseEntities()
Definition: MapReader.cpp:1376
CMapGenerator * m_MapGen
Definition: MapReader.h:129
CLightEnv m_LightEnv
Definition: MapReader.h:120
std::vector< u16 > m_Heightmap
Definition: MapReader.h:114
int ParseEnvironment()
Definition: MapReader.cpp:1441
int ReadXML()
Definition: MapReader.cpp:1190
CFileUnpacker unpacker
Definition: MapReader.h:132
Definition: Vector3D.h:28
Definition: Terrain.h:51
SkyManager * pSkyMan
Definition: MapReader.h:135
helper class for reading binary files
Definition: FileIo.h:100
CMapReader()
Definition: MapReader.cpp:56
Definition: TerrainTextureEntry.h:38
CCinemaManager * pCinema
Definition: MapReader.h:139
Contains pointers to various &#39;global&#39; objects that are needed by the simulation code, to allow easy access without using real (evil) global variables.
Definition: SimContext.h:32
Random map generator interface.
Definition: MapGenerator.h:38
int ApplyTerrainData()
Definition: MapReader.cpp:277
JS::PersistentRootedValue m_MapData
Definition: MapReader.h:127
Definition: MapReader.cpp:409
Public API for simulation system.
Definition: Simulation2.h:47
int ParseTerrain()
Definition: MapReader.cpp:1300
~CMapReader()
Definition: MapReader.cpp:1580
int UnpackCinema()
Definition: MapReader.h:45
void LoadRandomMap(const CStrW &scriptFile, JSRuntime *rt, JS::HandleValue settings, CTerrain *, WaterManager *, SkyManager *, CLightEnv *, CGameView *, CCinemaManager *, CTriggerManager *, CPostprocManager *pPostproc_, CSimulation2 *, int playerID)
Definition: MapReader.cpp:153
int ParseCamera()
Definition: MapReader.cpp:1542
uint32_t u32
Definition: types.h:39
CVector3D m_StartingCamera
Definition: MapReader.h:149
size_t num_terrain_tex
Definition: MapReader.h:153
u32 PSRETURN
Definition: Errors.h:75
Definition: path.h:77
WaterManager * pWaterMan
Definition: MapReader.h:134
int LoadScriptSettings()
Definition: MapReader.cpp:1162
bool m_SkipEntities
Definition: MapReader.h:144
u32 file_format_version
Definition: MapReader.h:147
CStr m_ScriptSettings
Definition: MapReader.h:182
Definition: GameView.h:37
ssize_t m_PatchesPerSide
Definition: MapReader.h:112
int UnpackTerrain()
Definition: MapReader.cpp:229
int m_PlayerID
Definition: MapReader.h:143
CStrW m_ScriptFile
Definition: MapReader.h:125
std::vector< STileDesc > m_Tiles
Definition: MapReader.h:118
intptr_t ssize_t
Definition: wposix_types.h:82
int LoadRMSettings()
Definition: MapReader.cpp:1229
size_t cur_terrain_tex
Definition: MapReader.h:152
int GenerateMap()
Definition: MapReader.cpp:1238
int LoadPlayerSettings()
Definition: MapReader.cpp:1175
int UnpackMap()
Definition: MapReader.cpp:215
Class for in game playing of cinematics.
Definition: CinemaManager.h:34
CLightEnv * pLightEnv
Definition: MapReader.h:137
CTriggerManager * pTrigMan
Definition: MapReader.h:140
Definition: PostprocManager.h:24
CStrW m_Script
Definition: MapReader.h:122
entity_id_t m_StartingCameraTarget
Definition: MapReader.h:148
const CSimContext * pSimContext
Definition: MapReader.h:142
Abstraction around a SpiderMonkey JSContext.
Definition: ScriptInterface.h:71
CSimulation2 * pSimulation2
Definition: MapReader.h:141
int ApplyData()
Definition: MapReader.cpp:316
int DelayLoadFinished()
Definition: MapReader.cpp:1216
Definition: MapIO.h:21
Class CLightEnv: description of a lighting environment - contains all the necessary parameters for re...
Definition: LightEnv.h:36
int LoadMapSettings()
Definition: MapReader.cpp:1183
CGameView * pGameView
Definition: MapReader.h:138
u32 entity_id_t
Entity ID type.
Definition: Entity.h:23
bool only_xml
Definition: MapReader.h:146
A restricted map reader that returns various summary information for use by scripts (particularly the...
Definition: MapReader.h:162
CTerrain * pTerrain
Definition: MapReader.h:133
CXMLReader * xml_reader
Definition: MapReader.h:155
VfsPath filename_xml
Definition: MapReader.h:145
Definition: ObjectEntry.h:38
Class WaterManager: Maintain rendering-related water settings and textures Anything that affects game...
Definition: WaterManager.h:43
Class SkyManager: Maintain sky settings and textures, and render the sky.
Definition: SkyManager.h:30