fix: requirement.chaos_level.type改为枚举

This commit is contained in:
uye
2024-01-06 13:23:57 +08:00
parent 3f1e9a2c62
commit b95ec6694b
3 changed files with 27 additions and 6 deletions

View File

@@ -22,7 +22,7 @@ bool asst::RoguelikeStageEncounterConfig::parse(const json::value& json)
requirement.name = requirement_json.at("name").as_string();
requirement.choose = requirement_json.get("choose", -1);
requirement.chaos_level.value = requirement_json.at("ChaosLevel").at("value").as_string();
requirement.chaos_level.type = requirement_json.at("ChaosLevel").at("type").as_string();
requirement.chaos_level.type = parse_comparison_type(requirement_json.at("ChaosLevel").at("type").as_string());
event.choice_require.emplace_back(std::move(requirement));
}
}

View File

@@ -8,10 +8,18 @@
namespace asst
{
enum class ComparisonType
{
GreaterThan,
LessThan,
Equal,
Unsupported
};
struct ChaosLevel
{
std::string value;
std::string type; // '>' or '<' or '=' 其他的还不支持
ComparisonType type = ComparisonType::Unsupported;
};
struct ChoiceRequire
{
@@ -38,6 +46,18 @@ namespace asst
private:
virtual bool parse(const json::value& json) override;
static ComparisonType parse_comparison_type(const std::string& type_str)
{
if (type_str == ">")
return ComparisonType::GreaterThan;
if (type_str == "<")
return ComparisonType::LessThan;
if (type_str == "=")
return ComparisonType::Equal;
return ComparisonType::Unsupported;
}
std::unordered_map<std::string, std::vector<RoguelikeEvent>> m_events;
};

View File

@@ -21,13 +21,14 @@ namespace asst
{
int num = 0;
switch (requirement.chaos_level.type) {
case ">":
case ComparisonType::GreaterThan:
return utils::chars_to_number(requirement.chaos_level.value, num) && special_val > num;
case "<":
case ComparisonType::LessThan:
return utils::chars_to_number(requirement.chaos_level.value, num) && special_val < num;
case "=":
case ComparisonType::Equal:
return utils::chars_to_number(requirement.chaos_level.value, num) && special_val == num;
default:
case ComparisonType::Unsupported:
case default:
return false;
}
}