From 7d6de3557c24c7ba1f1acd14dfb8b8b5e54e5510 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Fri, 25 Oct 2019 20:08:25 +0200 Subject: [PATCH] Support learning moves with CreateCreature class --- src/Battling/Library/BattleLibrary.cpp | 8 +++++++- src/Battling/Library/BattleLibrary.hpp | 3 +++ src/Battling/Models/CreateCreature.cpp | 19 ++++++++++++++++++- src/Battling/Models/CreateCreature.hpp | 4 ++++ src/Battling/Models/LearnedAttack.cpp | 6 +++++- src/Battling/Models/LearnedAttack.hpp | 1 + 6 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/Battling/Library/BattleLibrary.cpp b/src/Battling/Library/BattleLibrary.cpp index 87d19a1..d2bc271 100644 --- a/src/Battling/Library/BattleLibrary.cpp +++ b/src/Battling/Library/BattleLibrary.cpp @@ -10,6 +10,10 @@ CreatureLib::Battling::BattleLibrary::~BattleLibrary() { delete _statCalculator; } +const CreatureLib::Library::LibrarySettings CreatureLib::Battling::BattleLibrary::GetSettings() const { + return _staticLib->GetSettings(); +} + const CreatureLib::Battling::BattleStatCalculator *CreatureLib::Battling::BattleLibrary::GetStatCalculator() const { return _statCalculator; } @@ -22,4 +26,6 @@ const CreatureLib::Library::ItemLibrary* CreatureLib::Battling::BattleLibrary::G return _staticLib->GetItemLibrary(); } - +const CreatureLib::Library::AttackLibrary *CreatureLib::Battling::BattleLibrary::GetAttackLibrary() const { + return _staticLib->GetAttackLibrary(); +} diff --git a/src/Battling/Library/BattleLibrary.hpp b/src/Battling/Library/BattleLibrary.hpp index 23a6df7..bf3c97d 100644 --- a/src/Battling/Library/BattleLibrary.hpp +++ b/src/Battling/Library/BattleLibrary.hpp @@ -12,8 +12,11 @@ namespace CreatureLib::Battling { BattleLibrary(Library::DataLibrary* staticLib, BattleStatCalculator* statCalculator); ~BattleLibrary(); + const Library::LibrarySettings GetSettings() const; const Library::SpeciesLibrary* GetSpeciesLibrary() const; const Library::ItemLibrary* GetItemLibrary() const; + const Library::AttackLibrary* GetAttackLibrary() const; + const BattleStatCalculator* GetStatCalculator() const; }; } diff --git a/src/Battling/Models/CreateCreature.cpp b/src/Battling/Models/CreateCreature.cpp index 8c67cb9..8cc4324 100644 --- a/src/Battling/Models/CreateCreature.cpp +++ b/src/Battling/Models/CreateCreature.cpp @@ -65,7 +65,18 @@ CreateCreature *CreateCreature::WithGender(Library::Gender gender) { return this; } +CreateCreature *CreateCreature::WithAttack(const std::string& attackName, AttackLearnMethod learnMethod) { + if (_attacks.size() >= _library->GetSettings().GetMaximalMoves()) + //TODO: Better exception + throw ""; + + auto attackData = _library->GetAttackLibrary()->GetAttack(attackName); + _attacks.emplace_back(attackData, learnMethod); + return this; +} + Creature *CreateCreature::Create() { + _hasCreated = true; auto rand = Core::Random(); auto species = this->_library->GetSpeciesLibrary()->GetSpecies(this->_species); auto variant = species->GetVariant(this->_variant); @@ -96,6 +107,12 @@ Creature *CreateCreature::Create() { auto statPotential = Core::StatisticSet(_healthPotential, _physAttackPotential,_physDefensePotential, _magAttackPotential, _magDefensePotential, _speedPotential); + auto attacks = std::vector(_attacks.size()); + for (auto kv: _attacks){ + attacks.push_back(new LearnedAttack(std::get<0>(kv), std::get<1>(kv))); + } + return new Creature(species, variant, _level, experience, statExperience,statPotential, identifier,gender, _coloring, - heldItem, _nickname, talent, {}); + heldItem, _nickname, talent, attacks); } + diff --git a/src/Battling/Models/CreateCreature.hpp b/src/Battling/Models/CreateCreature.hpp index e137c1a..af9bd5a 100644 --- a/src/Battling/Models/CreateCreature.hpp +++ b/src/Battling/Models/CreateCreature.hpp @@ -32,6 +32,9 @@ namespace CreatureLib::Battling { uint8_t _coloring = 0; std::string _heldItem = ""; uint32_t _identifier = 0; + std::vector> _attacks = {}; + + bool _hasCreated; public: CreateCreature(const BattleLibrary *library, std::string species, uint8_t level) @@ -48,6 +51,7 @@ namespace CreatureLib::Battling { CreateCreature* WithStatExperiences(uint32_t health, uint32_t physAttack, uint32_t physDefense, uint32_t magAttack, uint32_t magDefense,uint32_t speed); CreateCreature* WithGender(Library::Gender gender); + CreateCreature* WithAttack(const std::string& attackName, AttackLearnMethod learnMethod); Creature* Create(); diff --git a/src/Battling/Models/LearnedAttack.cpp b/src/Battling/Models/LearnedAttack.cpp index 474c08e..6a66cc9 100644 --- a/src/Battling/Models/LearnedAttack.cpp +++ b/src/Battling/Models/LearnedAttack.cpp @@ -6,6 +6,11 @@ CreatureLib::Battling::LearnedAttack::LearnedAttack(CreatureLib::Library::Attack } +CreatureLib::Battling::LearnedAttack::LearnedAttack(const CreatureLib::Library::AttackData *attack, AttackLearnMethod learnMethod) + : _attack(attack), _maxUses(attack->GetBaseUsages()), _remainingUses(_maxUses), _learnMethod(learnMethod) +{} + + const CreatureLib::Library::AttackData *CreatureLib::Battling::LearnedAttack::GetAttack() const { return _attack; } @@ -41,4 +46,3 @@ void CreatureLib::Battling::LearnedAttack::RestoreUses() { _remainingUses = _maxUses; } - diff --git a/src/Battling/Models/LearnedAttack.hpp b/src/Battling/Models/LearnedAttack.hpp index eb9e7b4..5392ce3 100644 --- a/src/Battling/Models/LearnedAttack.hpp +++ b/src/Battling/Models/LearnedAttack.hpp @@ -12,6 +12,7 @@ namespace CreatureLib::Battling{ AttackLearnMethod _learnMethod; public: LearnedAttack(Library::AttackData* attack, uint8_t maxUses, AttackLearnMethod learnMethod); + LearnedAttack(const Library::AttackData* attack, AttackLearnMethod learnMethod); const Library::AttackData* GetAttack() const; uint8_t GetMaxUses() const;