This commit is contained in:
MihailRis 2024-05-06 01:36:21 +03:00
parent 6b037ec7e8
commit 91aacafecb
10 changed files with 133 additions and 130 deletions

View File

@ -1,4 +1,4 @@
#include "AssetsLoader.h"
#include "AssetsLoader.hpp"
#include "Assets.h"
#include "assetload_funcs.hpp"

View File

@ -1,113 +0,0 @@
#ifndef ASSETS_ASSETS_LOADER_H
#define ASSETS_ASSETS_LOADER_H
#include "Assets.h"
#include "../interfaces/Task.hpp"
#include "../typedefs.h"
#include "../delegates.h"
#include <string>
#include <memory>
#include <filesystem>
#include <functional>
#include <map>
#include <queue>
namespace dynamic {
class Map;
class List;
}
enum class AssetType {
texture,
shader,
font,
atlas,
layout,
sound
};
class ResPaths;
class AssetsLoader;
class Content;
struct AssetCfg {
virtual ~AssetCfg() {}
};
struct LayoutCfg : AssetCfg {
scriptenv env;
LayoutCfg(scriptenv env) : env(env) {}
};
struct SoundCfg : AssetCfg {
bool keepPCM;
SoundCfg(bool keepPCM) : keepPCM(keepPCM) {}
};
using aloader_func = std::function<assetload::postfunc(
AssetsLoader*, // redundant?
const ResPaths*,
const std::string&,
const std::string&,
std::shared_ptr<AssetCfg>)
>;
struct aloader_entry {
AssetType tag;
const std::string filename;
const std::string alias;
std::shared_ptr<AssetCfg> config;
};
class AssetsLoader {
Assets* assets;
std::map<AssetType, aloader_func> loaders;
std::queue<aloader_entry> entries;
const ResPaths* paths;
void tryAddSound(std::string name);
void processPreload(AssetType tag, const std::string& name, dynamic::Map* map);
void processPreloadList(AssetType tag, dynamic::List* list);
void processPreloadConfig(std::filesystem::path file);
void processPreloadConfigs(const Content* content);
public:
AssetsLoader(Assets* assets, const ResPaths* paths);
void addLoader(AssetType tag, aloader_func func);
/// @brief Enqueue asset load
/// @param tag asset type
/// @param filename asset file path
/// @param alias internal asset name
/// @param settings asset loading settings (based on asset type)
void add(
AssetType tag,
const std::string filename,
const std::string alias,
std::shared_ptr<AssetCfg> settings=nullptr
);
bool hasNext() const;
bool loadNext();
std::shared_ptr<Task> startTask(runnable onDone);
const ResPaths* getPaths() const;
aloader_func getLoader(AssetType tag);
/// @brief Enqueue core and content assets
/// @param loader target loader
/// @param content engine content
static void addDefaults(AssetsLoader& loader, const Content* content);
static bool loadExternalTexture(
Assets* assets,
const std::string& name,
std::vector<std::filesystem::path> alternatives
);
};
#endif // ASSETS_ASSETS_LOADER_H

113
src/assets/AssetsLoader.hpp Normal file
View File

@ -0,0 +1,113 @@
#ifndef ASSETS_ASSETS_LOADER_HPP_
#define ASSETS_ASSETS_LOADER_HPP_
#include "Assets.h"
#include "../interfaces/Task.hpp"
#include "../typedefs.h"
#include "../delegates.h"
#include <string>
#include <memory>
#include <filesystem>
#include <functional>
#include <map>
#include <queue>
namespace dynamic {
class Map;
class List;
}
enum class AssetType {
texture,
shader,
font,
atlas,
layout,
sound
};
class ResPaths;
class AssetsLoader;
class Content;
struct AssetCfg {
virtual ~AssetCfg() {}
};
struct LayoutCfg : AssetCfg {
scriptenv env;
LayoutCfg(scriptenv env) : env(env) {}
};
struct SoundCfg : AssetCfg {
bool keepPCM;
SoundCfg(bool keepPCM) : keepPCM(keepPCM) {}
};
using aloader_func = std::function<assetload::postfunc(
AssetsLoader*, // redundant?
const ResPaths*,
const std::string&,
const std::string&,
std::shared_ptr<AssetCfg>)
>;
struct aloader_entry {
AssetType tag;
const std::string filename;
const std::string alias;
std::shared_ptr<AssetCfg> config;
};
class AssetsLoader {
Assets* assets;
std::map<AssetType, aloader_func> loaders;
std::queue<aloader_entry> entries;
const ResPaths* paths;
void tryAddSound(std::string name);
void processPreload(AssetType tag, const std::string& name, dynamic::Map* map);
void processPreloadList(AssetType tag, dynamic::List* list);
void processPreloadConfig(std::filesystem::path file);
void processPreloadConfigs(const Content* content);
public:
AssetsLoader(Assets* assets, const ResPaths* paths);
void addLoader(AssetType tag, aloader_func func);
/// @brief Enqueue asset load
/// @param tag asset type
/// @param filename asset file path
/// @param alias internal asset name
/// @param settings asset loading settings (based on asset type)
void add(
AssetType tag,
const std::string filename,
const std::string alias,
std::shared_ptr<AssetCfg> settings=nullptr
);
bool hasNext() const;
bool loadNext();
std::shared_ptr<Task> startTask(runnable onDone);
const ResPaths* getPaths() const;
aloader_func getLoader(AssetType tag);
/// @brief Enqueue core and content assets
/// @param loader target loader
/// @param content engine content
static void addDefaults(AssetsLoader& loader, const Content* content);
static bool loadExternalTexture(
Assets* assets,
const std::string& name,
std::vector<std::filesystem::path> alternatives
);
};
#endif // ASSETS_ASSETS_LOADER_HPP_

View File

@ -1,13 +1,13 @@
#include "assetload_funcs.hpp"
#include "Assets.h"
#include "AssetsLoader.h"
#include "AssetsLoader.hpp"
#include "../audio/audio.hpp"
#include "../files/files.h"
#include "../files/engine_paths.h"
#include "../coders/imageio.hpp"
#include "../coders/json.h"
#include "../coders/GLSLExtension.h"
#include "../coders/GLSLExtension.hpp"
#include "../graphics/core/Shader.hpp"
#include "../graphics/core/Texture.hpp"
#include "../graphics/core/ImageData.hpp"

View File

@ -1,12 +1,14 @@
#include "GLSLExtension.h"
#include <iostream>
#include <sstream>
#include <stdexcept>
#include "GLSLExtension.hpp"
#include "../util/stringutil.h"
#include "../typedefs.h"
#include "../files/files.h"
#include "../files/engine_paths.h"
#include <iostream>
#include <sstream>
#include <stdexcept>
namespace fs = std::filesystem;
void GLSLExtension::setVersion(std::string version) {

View File

@ -1,5 +1,5 @@
#ifndef CODERS_GLSL_EXTESION_H_
#define CODERS_GLSL_EXTESION_H_
#ifndef CODERS_GLSL_EXTESION_HPP_
#define CODERS_GLSL_EXTESION_HPP_
#include <string>
#include <vector>
@ -35,4 +35,4 @@ public:
);
};
#endif // CODERS_GLSL_EXTESION_H_
#endif // CODERS_GLSL_EXTESION_HPP_

View File

@ -3,9 +3,9 @@
#define GLEW_STATIC
#include "debug/Logger.hpp"
#include "assets/AssetsLoader.h"
#include "assets/AssetsLoader.hpp"
#include "audio/audio.hpp"
#include "coders/GLSLExtension.h"
#include "coders/GLSLExtension.hpp"
#include "coders/imageio.hpp"
#include "coders/json.h"
#include "coders/toml.hpp"

View File

@ -11,7 +11,7 @@
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include "../../coders/GLSLExtension.h"
#include "../../coders/GLSLExtension.hpp"
namespace fs = std::filesystem;

View File

@ -1,8 +1,9 @@
#include "api_lua.hpp"
#include "lua_commons.hpp"
#include "../scripting.h"
#include "../../../engine.h"
#include "../../../assets/AssetsLoader.h"
#include "../../../assets/AssetsLoader.hpp"
#include "../../../files/engine_paths.h"
#include "../../../files/WorldFiles.h"
#include "../../../world/Level.h"
@ -15,8 +16,7 @@
static int l_pack_get_folder(lua_State* L) {
std::string packName = lua_tostring(L, 1);
if (packName == "core") {
auto folder = scripting::engine->getPaths()
->getResources().u8string()+"/";
auto folder = scripting::engine->getPaths()->getResources().u8string()+"/";
lua_pushstring(L, folder.c_str());
return 1;
}

View File

@ -1,8 +1,9 @@
#include "lua_commons.hpp"
#include "api_lua.hpp"
#include "../scripting.h"
#include "../../../assets/Assets.h"
#include "../../../assets/AssetsLoader.h"
#include "../../../assets/AssetsLoader.hpp"
#include "../../../files/engine_paths.h"
#include "../../../world/Level.h"
#include "../../../world/World.h"