Compare commits

..

2 Commits

Author SHA1 Message Date
0b4806b354 Fixes Windows not reading files properly. 2022-03-18 00:38:38 +01:00
fd24ce63c1 Adds battle effect for items 2022-02-19 15:08:28 +01:00
2 changed files with 49 additions and 3 deletions

View File

@@ -85,7 +85,8 @@ PkmnLib::Library::ItemLibrary* BuildItems::Build(const std::string& path) {
break; break;
case json::value_t ::string: { case json::value_t ::string: {
auto s = p.get<std::string>(); auto s = p.get<std::string>();
parameters.Append(new CreatureLib::Library::EffectParameter(ArbUt::StringView(s.c_str(), s.length()))); parameters.Append(
new CreatureLib::Library::EffectParameter(ArbUt::StringView(s.c_str(), s.length())));
break; break;
} }
default: continue; default: continue;
@@ -96,9 +97,44 @@ PkmnLib::Library::ItemLibrary* BuildItems::Build(const std::string& path) {
100, ArbUt::StringView(effectName.get<std::string>().c_str()), parameters); 100, ArbUt::StringView(effectName.get<std::string>().c_str()), parameters);
} }
CreatureLib::Library::SecondaryEffect* battleEffect = nullptr;
auto& battleEffectJson = val["battleEffect"];
if (battleEffectJson != nullptr) {
auto& effectName = battleEffectJson["name"];
auto& parametersJson = battleEffectJson["parameters"];
ArbUt::List<CreatureLib::Library::EffectParameter*> parameters;
if (parametersJson != nullptr) {
for (auto& kv : parametersJson.items()) {
auto& p = kv.value();
auto t = p.type();
switch (t) {
case json::value_t::boolean:
parameters.Append(new CreatureLib::Library::EffectParameter(p.get<bool>()));
break;
case json::value_t::number_integer:
case json::value_t::number_unsigned:
parameters.Append(new CreatureLib::Library::EffectParameter(p.get<int64_t>()));
break;
case json::value_t::number_float:
parameters.Append(new CreatureLib::Library::EffectParameter(p.get<float>()));
break;
case json::value_t ::string: {
auto s = p.get<std::string>();
parameters.Append(
new CreatureLib::Library::EffectParameter(ArbUt::StringView(s.c_str(), s.length())));
break;
}
default: continue;
}
}
}
battleEffect = new CreatureLib::Library::SecondaryEffect(
100, ArbUt::StringView(effectName.get<std::string>().c_str()), parameters);
}
auto item = new PkmnLib::Library::Item(ArbUt::StringView(_name.get<std::string>().c_str()), itemType, auto item = new PkmnLib::Library::Item(ArbUt::StringView(_name.get<std::string>().c_str()), itemType,
CreatureLib::Library::BattleItemCategory::None, _price.get<int32_t>(), CreatureLib::Library::BattleItemCategory::None, _price.get<int32_t>(),
effect, flags, _flingPower.get<uint8_t>()); effect, battleEffect, flags, _flingPower.get<uint8_t>());
lib->Insert(item->GetName(), item); lib->Insert(item->GetName(), item);
} }
return lib; return lib;

View File

@@ -95,7 +95,17 @@ BattleLibrary* BuildLibrary::Build(const std::string& pathString,
continue; continue;
std::ifstream in(dirEntry.path()); std::ifstream in(dirEntry.path());
std::string contents((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>()); std::string contents((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>());
asScriptResolver->CreateScript((const char*)dirEntry.path().c_str(), contents.c_str()); const auto* p = dirEntry.path().c_str();
// Windows defines paths as widechars, so we need to convert it to a normal human const char*
#if WINDOWS
std::mbstate_t state = std::mbstate_t();
int textLen = 1 + std::wcsrtombs(NULL, &p, 0, &state);
std::vector<char> storeTextBuffer(textLen);
std::wcsrtombs(&storeTextBuffer[0], &p, textLen, &state);
asScriptResolver->CreateScript(&storeTextBuffer[0], contents.c_str());
#else
asScriptResolver->CreateScript(p, contents.c_str());
#endif
} }
asScriptResolver->FinalizeModule(); asScriptResolver->FinalizeModule();
ScriptsTimeMs = ScriptsTimeMs =