Build Item library.
This commit is contained in:
56
src/BuildData/BuildItems.cpp
Normal file
56
src/BuildData/BuildItems.cpp
Normal file
@@ -0,0 +1,56 @@
|
||||
#include "BuildItems.hpp"
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include "../../extern/json.hpp"
|
||||
using json = nlohmann::json;
|
||||
|
||||
#define GET(o, objectKey, key) \
|
||||
auto _##objectKey = o[#objectKey]; \
|
||||
if (_##objectKey.is_null()) { \
|
||||
std::cout << "Failed to retrieve key '" << #objectKey << "' for object with value '" << key << "' in file '" \
|
||||
<< path << "'\n"; \
|
||||
return nullptr; \
|
||||
}
|
||||
|
||||
static CreatureLib::Library::ItemCategory ParseItemCategory(std::string& in){
|
||||
std::transform(in.begin(),in.end(),in.end(), tolower);
|
||||
if (in == "item") return CreatureLib::Library::ItemCategory::MiscItem;
|
||||
if (in == "medicine") return CreatureLib::Library::ItemCategory::Medicine;
|
||||
if (in == "berry") return CreatureLib::Library::ItemCategory::Berry;
|
||||
if (in == "mail") return CreatureLib::Library::ItemCategory::Mail;
|
||||
if (in == "key") return CreatureLib::Library::ItemCategory::KeyItem;
|
||||
if (in == "pokeball") return CreatureLib::Library::ItemCategory::CaptureDevice;
|
||||
if (in == "tm") return CreatureLib::Library::ItemCategory::MoveLearner;
|
||||
std::cout << "Unknown Item Type: '" << in <<"'\n";
|
||||
return static_cast<CreatureLib::Library::ItemCategory>(255);
|
||||
}
|
||||
|
||||
PkmnLib::Library::ItemLibrary* BuildItems::Build(const std::string& path) {
|
||||
std::ifstream fileStream(path.c_str());
|
||||
if (fileStream.fail()) {
|
||||
std::cout << "Failed to load Move data file at '" << path << "'\n";
|
||||
return nullptr;
|
||||
}
|
||||
auto lib = new PkmnLib::Library::ItemLibrary();
|
||||
json j;
|
||||
fileStream >> j;
|
||||
for (auto i : j.items()) {
|
||||
auto val = i.value();
|
||||
GET(val, name, i);
|
||||
GET(val, itemType, i);
|
||||
GET(val, flags, i);
|
||||
GET(val, price, i);
|
||||
GET(val, flingPower, i);
|
||||
auto itemTypeStr = _itemType.get<std::string>();
|
||||
CreatureLib::Library::ItemCategory itemType = ParseItemCategory(itemTypeStr);
|
||||
if (static_cast<int>(itemType) == 255) return nullptr;
|
||||
|
||||
auto item = new PkmnLib::Library::Item(
|
||||
_name.get<std::string>(), itemType, CreatureLib::Library::BattleItemCategory::None, _price.get<int32_t>(),
|
||||
_flags.get<std::unordered_set<std::string>>(), _flingPower.get<uint8_t>());
|
||||
lib->LoadItem(item->GetName(), item);
|
||||
}
|
||||
return lib;
|
||||
}
|
||||
|
||||
#undef GET
|
||||
10
src/BuildData/BuildItems.hpp
Normal file
10
src/BuildData/BuildItems.hpp
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef GEN7TESTS_BUILDITEMS_HPP
|
||||
#define GEN7TESTS_BUILDITEMS_HPP
|
||||
|
||||
#include <PkmnLib/Library/Items/ItemLibrary.hpp>
|
||||
class BuildItems {
|
||||
public:
|
||||
static PkmnLib::Library::ItemLibrary* Build(const std::string& path);
|
||||
};
|
||||
|
||||
#endif // GEN7TESTS_BUILDITEMS_HPP
|
||||
@@ -67,3 +67,5 @@ PkmnLib::Library::MoveLibrary* BuildMoves::Build(const std::string& path,
|
||||
|
||||
return lib;
|
||||
}
|
||||
|
||||
#undef GET
|
||||
@@ -102,3 +102,5 @@ const PkmnLib::Library::PokemonForme* BuildSpecies::BuildForme(const std::string
|
||||
name, _height.get<float>(), _weight.get<float>(), _baseExp.get<uint32_t>(), types, stats,
|
||||
_abilities.get<std::vector<std::string>>(), _hiddenAbilities.get<std::vector<std::string>>(), nullptr);
|
||||
}
|
||||
|
||||
#undef GET
|
||||
Reference in New Issue
Block a user