diff --git a/src/Battling/Models/Creature.cpp b/src/Battling/Models/Creature.cpp index 6cdb628..a5b8804 100644 --- a/src/Battling/Models/Creature.cpp +++ b/src/Battling/Models/Creature.cpp @@ -56,6 +56,14 @@ namespace CreatureLib::Battling { ChangeVariant(variant); } + void Battling::Creature::ChangeVariant(const ArbUt::StringView& variantName) { + auto opt = _species->TryGetVariant(variantName); + if (!opt.has_value()) { + THROW("Unknown variant: ", variantName); + } + ChangeVariant(opt.value()); + } + void Creature::ChangeVariant(const ArbUt::BorrowedPtr& variant) { _variant = variant; @@ -430,4 +438,4 @@ Battling::Creature::~Creature() { if (_battleData.OnBattleField && _battleData.Side.HasValue()) { _battleData.Side.GetValue()->ForceClearCreature(_battleData.Index.GetCreatureIndex()); } -} \ No newline at end of file +} diff --git a/src/Battling/Models/Creature.hpp b/src/Battling/Models/Creature.hpp index d21c7d2..77f7877 100644 --- a/src/Battling/Models/Creature.hpp +++ b/src/Battling/Models/Creature.hpp @@ -92,6 +92,7 @@ namespace CreatureLib::Battling { inline const ArbUt::BorrowedPtr& GetVariant() const noexcept { return _variant; } virtual void ChangeSpecies(const ArbUt::BorrowedPtr& species, const ArbUt::BorrowedPtr& variant); + virtual void ChangeVariant(const ArbUt::StringView& variantName); virtual void ChangeVariant(const ArbUt::BorrowedPtr& variant); inline level_int_t GetLevel() const noexcept { return _level; } inline uint32_t GetExperience() const noexcept { return _experience; }