2019-10-24 11:37:55 +00:00
|
|
|
#ifndef CREATURELIB_BATTLECREATURE_HPP
|
|
|
|
#define CREATURELIB_BATTLECREATURE_HPP
|
|
|
|
|
|
|
|
#include "../../GenericTemplates.cpp"
|
2019-11-05 15:20:47 +00:00
|
|
|
#include "../../Library/CreatureData/CreatureSpecies.hpp"
|
|
|
|
#include "../../Library/Items/Item.hpp"
|
2019-10-24 11:37:55 +00:00
|
|
|
#include "LearnedAttack.hpp"
|
2019-11-03 12:47:50 +00:00
|
|
|
#include "DamageSource.hpp"
|
2019-11-08 17:45:43 +00:00
|
|
|
#include "../ScriptHandling/ScriptSet.hpp"
|
2019-11-09 11:15:45 +00:00
|
|
|
#include "../ScriptHandling/ScriptAggregator.hpp"
|
|
|
|
#include "../ScriptHandling/ScriptSource.hpp"
|
2019-10-24 11:37:55 +00:00
|
|
|
|
|
|
|
namespace CreatureLib::Battling{
|
|
|
|
// Forward declare battle class
|
|
|
|
class Battle;
|
2019-10-29 10:19:25 +00:00
|
|
|
class BattleSide;
|
2019-11-05 15:20:47 +00:00
|
|
|
class BattleLibrary;
|
2019-10-24 11:37:55 +00:00
|
|
|
|
2019-11-09 11:15:45 +00:00
|
|
|
class Creature : public ScriptSource{
|
2019-10-24 11:37:55 +00:00
|
|
|
GetProperty(const Library::CreatureSpecies*, Species);
|
|
|
|
GetProperty(const Library::SpeciesVariant*, Variant);
|
|
|
|
GetProperty(uint8_t, Level);
|
|
|
|
GetProperty(uint32_t, Experience);
|
|
|
|
GetProperty(Core::StatisticSet<uint8_t >, StatExperience);
|
|
|
|
GetProperty(Core::StatisticSet<uint8_t >, StatPotential);
|
|
|
|
GetProperty(uint32_t, UniqueIdentifier);
|
|
|
|
GetProperty(Library::Gender, Gender);
|
|
|
|
GetProperty(uint8_t, Coloring);
|
|
|
|
GetProperty(const Library::Item*, HeldItem);
|
|
|
|
GetProperty(uint32_t, CurrentHealth);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
Core::StatisticSet<int8_t > _statBoost;
|
|
|
|
Core::StatisticSet<uint32_t > _flatStats;
|
|
|
|
Core::StatisticSet<uint32_t > _boostedStats;
|
|
|
|
|
|
|
|
Battle* _battle;
|
2019-10-29 10:19:25 +00:00
|
|
|
BattleSide* _side;
|
2019-10-24 11:37:55 +00:00
|
|
|
BattleLibrary* _library;
|
|
|
|
|
|
|
|
std::string _nickname = "";
|
|
|
|
int8_t _talentIndex;
|
|
|
|
std::vector<LearnedAttack*> _attacks;
|
|
|
|
|
2019-11-08 17:45:43 +00:00
|
|
|
Script* _status = nullptr;
|
|
|
|
ScriptSet _volatile = {};
|
|
|
|
|
2019-10-24 11:37:55 +00:00
|
|
|
public:
|
|
|
|
Creature(const Library::CreatureSpecies* species, const Library::SpeciesVariant* variant, uint8_t level,
|
|
|
|
uint32_t experience, Core::StatisticSet<uint8_t > statExp, Core::StatisticSet<uint8_t > statPotential,
|
|
|
|
uint32_t uid, Library::Gender gender, uint8_t coloring, const Library::Item* heldItem, std::string nickname,
|
|
|
|
int8_t talent, std::vector<LearnedAttack*> attacks);
|
|
|
|
|
|
|
|
const std::string& GetNickname() const;
|
|
|
|
const std::string& GetTalent() const;
|
|
|
|
void ChangeLevel(int8_t amount);
|
2019-11-03 12:47:50 +00:00
|
|
|
void Damage(uint32_t damage, DamageSource source);
|
2019-10-24 11:37:55 +00:00
|
|
|
|
2019-10-29 10:19:25 +00:00
|
|
|
void SetBattleData(Battle* battle, BattleSide* side);
|
|
|
|
Battle* GetBattle() const;
|
|
|
|
BattleSide* GetBattleSide() const;
|
|
|
|
|
2019-11-05 13:31:54 +00:00
|
|
|
[[nodiscard]] bool IsFainted() const;
|
|
|
|
[[nodiscard]] const std::vector<uint8_t>& GetTypes() const;
|
|
|
|
[[nodiscard]] bool HasType(uint8_t type) const;
|
2019-11-02 12:57:43 +00:00
|
|
|
|
2019-11-09 11:15:45 +00:00
|
|
|
void GetActiveScripts(ScriptAggregator& aggr) override{
|
|
|
|
aggr.Add(_status);
|
|
|
|
aggr.Add(&_volatile);
|
2019-11-08 17:45:43 +00:00
|
|
|
}
|
|
|
|
|
2019-10-24 11:37:55 +00:00
|
|
|
//region Stat APIs
|
|
|
|
|
|
|
|
void SetBattle(Battle* battle);
|
|
|
|
void SetBattleLibrary(BattleLibrary* library);
|
|
|
|
|
|
|
|
void ChangeStatBoost(Core::Statistic stat, int8_t diffAmount);
|
|
|
|
[[nodiscard]] uint32_t GetFlatStat(Core::Statistic stat) const;
|
|
|
|
[[nodiscard]] uint32_t GetBoostedStat(Core::Statistic stat) const;
|
|
|
|
[[nodiscard]] uint32_t GetBaseStat(Core::Statistic stat) const;
|
|
|
|
[[nodiscard]] uint32_t GetStatPotential(Core::Statistic stat) const;
|
|
|
|
[[nodiscard]] uint32_t GetStatExperience(Core::Statistic stat) const;
|
2019-11-05 13:31:54 +00:00
|
|
|
[[nodiscard]] int8_t GetStatBoost(Core::Statistic stat) const;
|
2019-10-24 11:37:55 +00:00
|
|
|
void RecalculateFlatStats();
|
|
|
|
void RecalculateBoostedStats();
|
|
|
|
void RecalculateFlatStat(Core::Statistic);
|
|
|
|
void RecalculateBoostedStat(Core::Statistic);
|
|
|
|
//endregion
|
2019-11-03 12:47:50 +00:00
|
|
|
|
|
|
|
|
2019-10-24 11:37:55 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif //CREATURELIB_CREATURE_HPP
|