add generator 'caption' property
This commit is contained in:
@@ -54,7 +54,9 @@ static void detect_defs(
|
||||
continue;
|
||||
}
|
||||
if (fs::is_regular_file(file) && files::is_data_file(file)) {
|
||||
detected.push_back(prefix.empty() ? name : prefix + ":" + name);
|
||||
auto map = files::read_object(file);
|
||||
std::string id = prefix.empty() ? name : prefix + ":" + name;
|
||||
detected.emplace_back(id);
|
||||
} else if (fs::is_directory(file) &&
|
||||
file.extension() != fs::u8path(".files")) {
|
||||
detect_defs(file, name, detected);
|
||||
@@ -63,11 +65,38 @@ static void detect_defs(
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<std::string> ContentLoader::scanContent(
|
||||
static void detect_defs_pairs(
|
||||
const fs::path& folder,
|
||||
const std::string& prefix,
|
||||
std::vector<std::tuple<std::string, std::string>>& detected
|
||||
) {
|
||||
if (fs::is_directory(folder)) {
|
||||
for (const auto& entry : fs::directory_iterator(folder)) {
|
||||
const fs::path& file = entry.path();
|
||||
std::string name = file.stem().string();
|
||||
if (name[0] == '_') {
|
||||
continue;
|
||||
}
|
||||
if (fs::is_regular_file(file) && files::is_data_file(file)) {
|
||||
auto map = files::read_object(file);
|
||||
std::string id = prefix.empty() ? name : prefix + ":" + name;
|
||||
std::string caption = util::id_to_caption(id);
|
||||
map.at("caption").get(caption);
|
||||
detected.emplace_back(id, name);
|
||||
} else if (fs::is_directory(file) &&
|
||||
file.extension() != fs::u8path(".files")) {
|
||||
detect_defs_pairs(file, name, detected);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<std::tuple<std::string, std::string>> ContentLoader::scanContent(
|
||||
const ContentPack& pack, ContentType type
|
||||
) {
|
||||
std::vector<std::string> detected;
|
||||
detect_defs(pack.folder / ContentPack::getFolderFor(type), pack.id, detected);
|
||||
std::vector<std::tuple<std::string, std::string>> detected;
|
||||
detect_defs_pairs(
|
||||
pack.folder / ContentPack::getFolderFor(type), pack.id, detected);
|
||||
return detected;
|
||||
}
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ public:
|
||||
const std::string& contentSection
|
||||
);
|
||||
|
||||
static std::vector<std::string> scanContent(
|
||||
static std::vector<std::tuple<std::string, std::string>> scanContent(
|
||||
const ContentPack& pack, ContentType type
|
||||
);
|
||||
|
||||
|
||||
@@ -193,6 +193,7 @@ void ContentLoader::loadGenerator(
|
||||
return;
|
||||
}
|
||||
auto map = files::read_toml(generatorsDir / fs::u8path(name + ".toml"));
|
||||
map.at("caption").get(def.caption);
|
||||
map.at("biome_parameters").get(def.biomeParameters);
|
||||
map.at("biome-bpd").get(def.biomesBPD);
|
||||
map.at("heights-bpd").get(def.heightsBPD);
|
||||
|
||||
@@ -52,10 +52,10 @@ static int l_get_generators(lua::State* L) {
|
||||
|
||||
int i = 1;
|
||||
for (const auto& pack : packs) {
|
||||
auto names = ContentLoader::scanContent(pack, ContentType::GENERATOR);
|
||||
for (const auto& name : names) {
|
||||
lua::pushstring(L, name);
|
||||
lua::rawseti(L, i);
|
||||
auto pairs = ContentLoader::scanContent(pack, ContentType::GENERATOR);
|
||||
for (const auto& [name, caption] : pairs) {
|
||||
lua::pushstring(L, caption);
|
||||
lua::setfield(L, name);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -405,6 +405,13 @@ std::wstring util::capitalized(const std::wstring& str) {
|
||||
str.substr(1);
|
||||
}
|
||||
|
||||
std::string util::capitalized(const std::string& str) {
|
||||
if (str.empty()) return str;
|
||||
static const std::locale loc("");
|
||||
return std::string({static_cast<char>(std::toupper(str[0], loc))}) +
|
||||
str.substr(1);
|
||||
}
|
||||
|
||||
std::wstring util::pascal_case(const std::wstring& str) {
|
||||
if (str.empty()) return str;
|
||||
static const std::locale loc("");
|
||||
|
||||
@@ -71,6 +71,8 @@ namespace util {
|
||||
double parse_double(const std::string& str);
|
||||
double parse_double(const std::string& str, size_t offset, size_t len);
|
||||
|
||||
std::string capitalized(const std::string& str);
|
||||
|
||||
std::wstring lower_case(const std::wstring& str);
|
||||
std::wstring upper_case(const std::wstring& str);
|
||||
std::wstring capitalized(const std::wstring& str);
|
||||
|
||||
@@ -10,8 +10,9 @@ VoxelStructure::VoxelStructure(
|
||||
std::unique_ptr<VoxelFragment> structure
|
||||
) : fragments({std::move(structure)}), meta(std::move(meta)) {}
|
||||
|
||||
|
||||
GeneratorDef::GeneratorDef(std::string name) : name(std::move(name)) {}
|
||||
GeneratorDef::GeneratorDef(std::string name)
|
||||
: name(std::move(name)), caption(util::id_to_caption(name)) {
|
||||
}
|
||||
|
||||
void GeneratorDef::prepare(const Content* content) {
|
||||
for (auto& biome : biomes) {
|
||||
|
||||
@@ -192,6 +192,9 @@ struct VoxelStructure {
|
||||
struct GeneratorDef {
|
||||
/// @brief Generator full name - packid:name
|
||||
std::string name;
|
||||
/// @brief Generator display name
|
||||
std::string caption;
|
||||
|
||||
std::unique_ptr<GeneratorScript> script;
|
||||
|
||||
/// @brief Sea level (top of seaLayers)
|
||||
|
||||
Reference in New Issue
Block a user