#pragma once #ifndef _GAMEDATA_HPP_ #define _GAMEDATA_HPP_ #include #include #include #include #include #include #include #include #include #include struct DynamicObjectData; class GameWorld; class TextureAtlas; /** * @brief The TextureInfo struct * Contains metadata about where a texture can be found. */ struct TextureInfo { /// Texture Name GLuint texName; /// Transparent flag. bool transparent; TextureInfo(GLuint tex, bool t) : texName(tex), transparent(t) {} TextureInfo() : texName(0), transparent(false) {} }; /** * Handles loading and management of the Game's DAT */ class GameData { private: std::string datpath; std::string splash; public: /** * @struct FileInfo * Stores information about a file the engine might want to load */ struct FileInfo { bool archived; /// Is the file inside an IMG or on the filesystem? std::string path; /// Path to the file containing the file. }; /** * ctor * @param path Path to the root of the game data. */ GameData(const std::string& path = ""); GameWorld* engine; /** * Returns the current platform */ std::string getPlatformString() { return "PC"; } /** * Loads the data contained in the given file */ void loadIDE(const std::string& name); /** * Handles the parsing of a COL file. */ void loadCOL(const size_t zone, const std::string& name); /** * Handles the loading of an IMG's data */ void loadIMG(const std::string& name); void loadIPL(const std::string& name); void loadCarcols(const std::string& path); void loadWeather(const std::string& path); void loadHandling(const std::string& path); /** * Loads water level data */ void loadWaterpro(const std::string& path); void loadWater(const std::string& path); void load(); /** * Loads a GTA3.dat file with the name path */ void parseDAT(const std::string& path); /** * Attempts to load a TXD, or does nothing if it has already been loaded */ void loadTXD(const std::string& name, bool async = false); /** * Attempts to load a DFF or does nothing if is already loaded */ void loadDFF(const std::string& name, bool async = false); /** * Loads an IFP file containing animations */ void loadIFP(const std::string& name); /** * Loads data from an object definition dat. */ void loadDynamicObjects(const std::string& name); /** * Returns a pointer to the named file if it is available, * the memory must be freed by the caller. * @param name the filename in the archive * @return pointer to the data, NULL if it is not available */ char* openFile(const std::string& name); /** * @brief loadFile Marks a file as open, and opens it. * @param name * @return */ char* loadFile(const std::string& name); /** * @brief getAtlas Returns atlas i, creating it if the situation calls for it. * "the situation" being the last atlas has more than 0 textures packed. * @param i * @return */ TextureAtlas* getAtlas(size_t i); /** * Files that have been loaded previously */ std::map loadedFiles; /** * Maps the paths in GTA3.dat to the real paths */ std::map iplLocations; std::map ideLocations; /** * Maps file names to data about the file. */ std::map _knownFiles; /** * Map of loaded archives */ std::map archives; /** * The vehicle colour palettes */ std::vector vehicleColours; /** * The vehicle colours for each vehicle type */ std::map>> vehiclePalettes; /** * Vehicle information */ std::map vehicleInfo; /** * Texture Loader */ TextureLoader textureLoader; /** * Weather Loader */ WeatherLoader weatherLoader; /** * Loaded models */ std::map models; /** * Loaded Textures and their atlas entries. */ std::map textures; /** * Texture atlases. */ std::vector atlases; /** * Loaded Animations */ AnimationSet animations; /** * CollisionModel data. */ std::map> collisions; /** * DynamicObjectData */ std::map> dynamicObjectData; /** * @struct WaterArea * Stores Water Rectangle Information */ struct WaterArea { float height; float xLeft, yBottom; float xRight, yTop; }; /** * Water Areas */ std::vector waterBlocks; /** * Water heights */ float waterHeights[48]; /** * Visible water heights */ uint8_t visibleWater[64*64]; /** * The "real" water heights */ uint8_t realWater[128*128]; int getWaterIndexAt(const glm::vec3& ws) const; }; #endif