1 /* Copyright (C) 2022 Wildfire Games.
2 * This file is part of 0 A.D.
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.
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.
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/>.
18 #ifndef INCLUDED_MAPREADER
19 #define INCLUDED_MAPREADER
23 #include "graphics/LightEnv.h"
25 #include "ps/FileIo.h"
26 #include "scriptinterface/ScriptTypes.h"
27 #include "simulation2/system/Entity.h"
34 class CPostprocManager
;
35 class CTriggerManager
;
38 class CTerrainTextureEntry
;
43 class ScriptInterface
;
45 class CMapReader
: public CMapIO
47 friend class CXMLReader
;
54 // LoadMap: try to load the map from given file; reinitialise the scene to new data if successful
55 void LoadMap(const VfsPath
& pathname
, const ScriptContext
& cx
, JS::HandleValue settings
, CTerrain
*, WaterManager
*, SkyManager
*, CLightEnv
*, CGameView
*,
56 CCinemaManager
*, CTriggerManager
*, CPostprocManager
* pPostproc
, CSimulation2
*, const CSimContext
*,
57 int playerID
, bool skipEntities
);
59 void LoadRandomMap(const CStrW
& scriptFile
, const ScriptContext
& cx
, JS::HandleValue settings
, CTerrain
*, WaterManager
*, SkyManager
*, CLightEnv
*, CGameView
*, CCinemaManager
*, CTriggerManager
*, CPostprocManager
* pPostproc_
, CSimulation2
*, int playerID
);
62 // Load script settings for use by scripts
63 int LoadScriptSettings();
65 // load player settings only
66 int LoadPlayerSettings();
68 // load map settings only
69 int LoadMapSettings();
71 // UnpackTerrain: unpack the terrain from the input stream
73 // UnpackCinema: unpack the cinematic tracks from the input stream
76 // UnpackMap: unpack the given data from the raw data stream into local variables
79 // ApplyData: take all the input data, and rebuild the scene from it
81 int ApplyTerrainData();
83 // read some misc data from the XML file
86 // read entity data from the XML file
87 int ReadXMLEntities();
89 // Copy random map settings over to sim
92 // Generate random map
95 // Parse script data into terrain
98 // Parse script data into entities
101 // Parse script data into environment
102 int ParseEnvironment();
104 // Parse script data into camera
109 ssize_t m_PatchesPerSide
;
111 std::vector
<u16
> m_Heightmap
;
112 // list of terrain textures used by map
113 std::vector
<CTerrainTextureEntry
*> m_TerrainTextures
;
114 // tile descriptions for each tile
115 std::vector
<STileDesc
> m_Tiles
;
116 // lightenv stored in file
117 CLightEnv m_LightEnv
;
123 JS::PersistentRootedValue m_ScriptSettings
;
124 JS::PersistentRootedValue m_MapData
;
126 CMapGenerator
* m_MapGen
;
128 CFileUnpacker unpacker
;
130 WaterManager
* pWaterMan
;
132 CPostprocManager
* pPostproc
;
133 CLightEnv
* pLightEnv
;
134 CGameView
* pGameView
;
135 CCinemaManager
* pCinema
;
136 CTriggerManager
* pTrigMan
;
137 CSimulation2
* pSimulation2
;
138 const CSimContext
* pSimContext
;
141 VfsPath filename_xml
;
143 u32 file_format_version
;
144 entity_id_t m_StartingCameraTarget
;
145 CVector3D m_StartingCamera
;
147 // UnpackTerrain generator state
148 size_t cur_terrain_tex
;
149 size_t num_terrain_tex
;
151 CXMLReader
* xml_reader
;
155 * A restricted map reader that returns various summary information
156 * for use by scripts (particularly the GUI).
158 class CMapSummaryReader
162 * Try to load a map file.
163 * @param pathname Path to .pmp or .xml file
165 PSRETURN
LoadMap(const VfsPath
& pathname
);
168 * Returns a value of the form:
171 * "settings": { ... contents of the map's <ScriptSettings> ... }
175 void GetMapSettings(const ScriptInterface
& scriptInterface
, JS::MutableHandleValue
);
178 CStr m_ScriptSettings
;