add resource-aliases.json
This commit is contained in:
parent
e154bd6ac1
commit
4c3ce8c174
8
res/content/base/resource-aliases.json
Normal file
8
res/content/base/resource-aliases.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"camera": {
|
||||||
|
"base:first-person": "core:first-person",
|
||||||
|
"base:third-person-front": "core:third-person-front",
|
||||||
|
"base:third-person-back": "core:third-person-back",
|
||||||
|
"base:cinematic": "core:cinematic"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -137,12 +137,21 @@ public:
|
|||||||
|
|
||||||
static constexpr size_t MISSING = SIZE_MAX;
|
static constexpr size_t MISSING = SIZE_MAX;
|
||||||
|
|
||||||
void add(std::string name, dv::value map) {
|
void add(const std::string& name, dv::value map) {
|
||||||
indices[name] = names.size();
|
indices[name] = names.size();
|
||||||
names.push_back(name);
|
names.push_back(name);
|
||||||
savedData->push_back(std::move(map));
|
savedData->push_back(std::move(map));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void addAlias(const std::string& name, const std::string& alias) {
|
||||||
|
size_t index = indexOf(name);
|
||||||
|
if (index == MISSING) {
|
||||||
|
throw std::runtime_error(
|
||||||
|
"resource does not exists: "+name);
|
||||||
|
}
|
||||||
|
indices[alias] = index;
|
||||||
|
}
|
||||||
|
|
||||||
const std::string& getName(size_t index) const {
|
const std::string& getName(size_t index) const {
|
||||||
return names.at(index);
|
return names.at(index);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -790,6 +790,20 @@ void ContentLoader::load() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load pack resources aliases
|
||||||
|
fs::path aliasesFile = folder / fs::u8path("resource-aliases.json");
|
||||||
|
if (fs::exists(aliasesFile)) {
|
||||||
|
auto resRoot = files::read_json(aliasesFile);
|
||||||
|
for (const auto& [key, arr] : resRoot.asObject()) {
|
||||||
|
if (auto resType = ResourceType_from(key)) {
|
||||||
|
loadResourceAliases(*resType, arr);
|
||||||
|
} else {
|
||||||
|
// Ignore unknown resources
|
||||||
|
logger.warning() << "unknown resource type: " << key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Load block materials
|
// Load block materials
|
||||||
fs::path materialsDir = folder / fs::u8path("block_materials");
|
fs::path materialsDir = folder / fs::u8path("block_materials");
|
||||||
if (fs::is_directory(materialsDir)) {
|
if (fs::is_directory(materialsDir)) {
|
||||||
@ -835,3 +849,11 @@ void ContentLoader::loadResources(ResourceType type, const dv::value& list) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ContentLoader::loadResourceAliases(ResourceType type, const dv::value& aliases) {
|
||||||
|
for (const auto& [alias, name] : aliases.asObject()) {
|
||||||
|
builder.resourceIndices[static_cast<size_t>(type)].addAlias(
|
||||||
|
name.asString(), alias
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -54,6 +54,7 @@ class ContentLoader {
|
|||||||
EntityDef& def, const std::string& name, const fs::path& file
|
EntityDef& def, const std::string& name, const fs::path& file
|
||||||
);
|
);
|
||||||
void loadResources(ResourceType type, const dv::value& list);
|
void loadResources(ResourceType type, const dv::value& list);
|
||||||
|
void loadResourceAliases(ResourceType type, const dv::value& aliases);
|
||||||
|
|
||||||
void loadContent(const dv::value& map);
|
void loadContent(const dv::value& map);
|
||||||
public:
|
public:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user