#include #include #include #include namespace hex { /* Settings */ void ContentRegistry::Settings::load() { std::ifstream settingsFile(std::filesystem::path((SharedData::mainArgv)[0]).parent_path() / "settings.json"); if (settingsFile.good()) settingsFile >> getSettingsData(); } void ContentRegistry::Settings::store() { std::ofstream settingsFile(std::filesystem::path((SharedData::mainArgv)[0]).parent_path() / "settings.json", std::ios::trunc); settingsFile << getSettingsData(); } void ContentRegistry::Settings::add(std::string_view category, std::string_view name, s64 defaultValue, const std::function &callback) { ContentRegistry::Settings::getEntries()[category.data()].emplace_back(Entry{ name.data(), callback }); auto &json = getSettingsData(); if (!json.contains(category.data())) json[category.data()] = nlohmann::json::object(); if (!json[category.data()].contains(name.data())) json[category.data()][name.data()] = defaultValue; } void ContentRegistry::Settings::add(std::string_view category, std::string_view name, std::string_view defaultValue, const std::function &callback) { ContentRegistry::Settings::getEntries()[category.data()].emplace_back(Entry{ name.data(), callback }); getSettingsData()[category.data()] = nlohmann::json::object(); getSettingsData()[category.data()][name.data()] = defaultValue; } std::map>& ContentRegistry::Settings::getEntries() { return SharedData::settingsEntries; } nlohmann::json& ContentRegistry::Settings::getSettingsData() { return SharedData::settingsJson; } /* Events */ auto ContentRegistry::Events::get(std::string_view name) { auto &customEvents = SharedData::customEvents; auto &lastId = SharedData::customEventsLastId; if (!customEvents.contains(name.data())) { customEvents[name.data()] = static_cast(lastId); lastId++; } return customEvents[name.data()]; } /* Command Palette Commands */ void ContentRegistry::CommandPaletteCommands::add(ContentRegistry::CommandPaletteCommands::Type type, std::string_view command, std::string_view description, const std::function &callback) { getEntries().push_back(ContentRegistry::CommandPaletteCommands::Entry{ type, command.data(), description.data(), callback }); } std::vector& ContentRegistry::CommandPaletteCommands::getEntries() { return SharedData::commandPaletteCommands; } /* Pattern Language Functions */ void ContentRegistry::PatternLanguageFunctions::add(std::string_view name, u32 parameterCount, const std::function)> &func) { getEntries()[name.data()] = Function{ parameterCount, func }; } std::map& ContentRegistry::PatternLanguageFunctions::getEntries() { return SharedData::patternLanguageFunctions; } /* Views */ View* ContentRegistry::Views::add(View *view) { auto &views = getEntries(); views.push_back(view); return views.back(); } std::vector& ContentRegistry::Views::getEntries() { return SharedData::views; } /* Tools */ void ContentRegistry::Tools::add(const std::function &function) { getEntries().push_back(function); } std::vector>& ContentRegistry::Tools::getEntries() { return SharedData::toolsEntries; } /* Data Inspector */ void ContentRegistry::DataInspector::add(std::string_view name, size_t requiredSize, ContentRegistry::DataInspector::GeneratorFunction function) { getEntries().push_back(Entry{ name.data(), requiredSize, function }); } std::vector& ContentRegistry::DataInspector::getEntries() { return SharedData::dataInspectorEntries; } }