#ifndef CREATURELIB_BATTLELIBRARY_HPP #define CREATURELIB_BATTLELIBRARY_HPP #include "../../Library/DataLibrary.hpp" #include "../ScriptHandling/ScriptResolver.hpp" #include "BattleStatCalculator.hpp" #include "DamageLibrary.hpp" #include "ExperienceLibrary.hpp" #include "MiscLibrary.hpp" namespace CreatureLib::Battling { class BattleLibrary { protected: std::unique_ptr _staticLib = nullptr; std::unique_ptr _statCalculator = nullptr; std::unique_ptr _damageLibrary = nullptr; std::unique_ptr _experienceLibrary = nullptr; std::unique_ptr _scriptResolver = nullptr; std::unique_ptr _miscLibrary = nullptr; public: BattleLibrary(const Library::DataLibrary* staticLib, BattleStatCalculator* statCalculator, DamageLibrary* damageLibrary, ExperienceLibrary* experienceLibrary, ScriptResolver* scriptResolver, MiscLibrary* miscLibrary); ~BattleLibrary() = default; inline const std::unique_ptr& GetStaticLib() const noexcept { return _staticLib; } [[nodiscard]] const std::unique_ptr& GetSettings() const noexcept; [[nodiscard]] const std::unique_ptr& GetSpeciesLibrary() const noexcept; [[nodiscard]] const std::unique_ptr& GetItemLibrary() const noexcept; [[nodiscard]] const std::unique_ptr& GetAttackLibrary() const noexcept; [[nodiscard]] const std::unique_ptr& GetTypeLibrary() const noexcept; [[nodiscard]] const std::unique_ptr& GetGrowthRateLibrary() const noexcept { return _staticLib->GetGrowthRates(); } [[nodiscard]] const std::unique_ptr& GetStatCalculator() const noexcept; [[nodiscard]] const std::unique_ptr& GetDamageLibrary() const noexcept; [[nodiscard]] const std::unique_ptr& GetMiscLibrary() const noexcept; [[nodiscard]] const std::unique_ptr& GetExperienceLibrary() const noexcept { return _experienceLibrary; } [[nodiscard]] Script* LoadScript(ScriptCategory category, const ArbUt::StringView& scriptName) const; }; } #endif // CREATURELIB_BATTLELIBRARY_HPP