Fix Molten VK printing too many log messages
[0ad.git] / source / graphics / MapReader.h
blobbe423b41e3b7106f59478487ba4e5f679a7039c4
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
21 #include "MapIO.h"
23 #include "graphics/LightEnv.h"
24 #include "ps/CStr.h"
25 #include "ps/FileIo.h"
26 #include "scriptinterface/ScriptTypes.h"
27 #include "simulation2/system/Entity.h"
29 class CTerrain;
30 class WaterManager;
31 class SkyManager;
32 class CLightEnv;
33 class CCinemaManager;
34 class CPostprocManager;
35 class CTriggerManager;
36 class CSimulation2;
37 class CSimContext;
38 class CTerrainTextureEntry;
39 class CGameView;
40 class CXMLReader;
41 class CMapGenerator;
42 class ScriptContext;
43 class ScriptInterface;
45 class CMapReader : public CMapIO
47 friend class CXMLReader;
49 public:
50 // constructor
51 CMapReader();
52 ~CMapReader();
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);
61 private:
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
72 int UnpackTerrain();
73 // UnpackCinema: unpack the cinematic tracks from the input stream
74 int UnpackCinema();
76 // UnpackMap: unpack the given data from the raw data stream into local variables
77 int UnpackMap();
79 // ApplyData: take all the input data, and rebuild the scene from it
80 int ApplyData();
81 int ApplyTerrainData();
83 // read some misc data from the XML file
84 int ReadXML();
86 // read entity data from the XML file
87 int ReadXMLEntities();
89 // Copy random map settings over to sim
90 int LoadRMSettings();
92 // Generate random map
93 int GenerateMap();
95 // Parse script data into terrain
96 int ParseTerrain();
98 // Parse script data into entities
99 int ParseEntities();
101 // Parse script data into environment
102 int ParseEnvironment();
104 // Parse script data into camera
105 int ParseCamera();
108 // size of map
109 ssize_t m_PatchesPerSide;
110 // heightmap for map
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;
118 // startup script
119 CStrW m_Script;
121 // random map data
122 CStrW m_ScriptFile;
123 JS::PersistentRootedValue m_ScriptSettings;
124 JS::PersistentRootedValue m_MapData;
126 CMapGenerator* m_MapGen;
128 CFileUnpacker unpacker;
129 CTerrain* pTerrain;
130 WaterManager* pWaterMan;
131 SkyManager* pSkyMan;
132 CPostprocManager* pPostproc;
133 CLightEnv* pLightEnv;
134 CGameView* pGameView;
135 CCinemaManager* pCinema;
136 CTriggerManager* pTrigMan;
137 CSimulation2* pSimulation2;
138 const CSimContext* pSimContext;
139 int m_PlayerID;
140 bool m_SkipEntities;
141 VfsPath filename_xml;
142 bool only_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
160 public:
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:
169 * @code
171 * "settings": { ... contents of the map's <ScriptSettings> ... }
173 * @endcode
175 void GetMapSettings(const ScriptInterface& scriptInterface, JS::MutableHandleValue);
177 private:
178 CStr m_ScriptSettings;
181 #endif