2020-02-16 16:50:16 +00:00
|
|
|
#ifndef PKMNLIB_BATTLE_HPP
|
|
|
|
#define PKMNLIB_BATTLE_HPP
|
|
|
|
|
|
|
|
#include <CreatureLib/Battling/Models/Battle.hpp>
|
2020-04-18 14:21:38 +00:00
|
|
|
#include "../EventHooks/WeatherChangeEvent.hpp"
|
2020-02-16 16:50:16 +00:00
|
|
|
#include "../Library/BattleLibrary.hpp"
|
2021-03-07 10:12:18 +00:00
|
|
|
#include "../PkmnScript.hpp"
|
2020-04-18 13:35:01 +00:00
|
|
|
#include "../PkmnScriptCategory.hpp"
|
2020-02-16 16:50:16 +00:00
|
|
|
|
|
|
|
namespace PkmnLib::Battling {
|
2020-02-17 15:56:44 +00:00
|
|
|
class Battle : public CreatureLib::Battling::Battle {
|
2020-04-18 13:35:01 +00:00
|
|
|
private:
|
2021-03-07 10:12:18 +00:00
|
|
|
std::unique_ptr<CreatureLib::Battling::BattleScript> _weatherScript = nullptr;
|
2020-04-18 13:35:01 +00:00
|
|
|
|
2020-02-16 16:50:16 +00:00
|
|
|
public:
|
2020-05-27 15:26:25 +00:00
|
|
|
Battle(const BattleLibrary* library, const ArbUt::List<CreatureLib::Battling::BattleParty*>& parties,
|
2020-07-26 08:50:39 +00:00
|
|
|
bool canFlee = true, uint8_t numberOfSides = 2, uint8_t creaturesPerSide = 1,
|
|
|
|
uint_fast32_t randomSeed = std::chrono::duration_cast<std::chrono::milliseconds>(
|
|
|
|
std::chrono::system_clock::now().time_since_epoch())
|
|
|
|
.count())
|
|
|
|
: CreatureLib::Battling::Battle(library, parties, canFlee, numberOfSides, creaturesPerSide, randomSeed) {}
|
2020-04-18 13:35:01 +00:00
|
|
|
|
2020-12-28 14:11:06 +00:00
|
|
|
virtual ~Battle() = default;
|
|
|
|
|
2021-11-19 13:56:29 +00:00
|
|
|
bool SetWeather(const ArbUt::StringView& name);
|
2020-04-26 18:01:11 +00:00
|
|
|
void ClearWeather();
|
2021-11-19 13:56:29 +00:00
|
|
|
void SuppressWeather() {
|
|
|
|
if (_weatherScript != nullptr) {
|
|
|
|
_weatherScript->Suppress();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void UnsuppressWeather() {
|
|
|
|
if (_weatherScript != nullptr) {
|
|
|
|
_weatherScript->Unsuppress();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-08-17 16:23:25 +00:00
|
|
|
const ArbUt::StringView& GetWeatherName() noexcept {
|
|
|
|
if (_weatherScript == nullptr)
|
|
|
|
return ArbUt::StringView::EmptyString();
|
|
|
|
return _weatherScript->GetName();
|
|
|
|
}
|
2020-04-18 13:35:01 +00:00
|
|
|
|
2020-04-25 09:43:04 +00:00
|
|
|
size_t ScriptCount() const override { return CreatureLib::Battling::Battle::ScriptCount() + 1; }
|
2021-10-29 17:35:31 +00:00
|
|
|
void GetOwnScripts(ArbUt::List<CreatureLib::Battling::ScriptWrapper>& scripts) override {
|
|
|
|
CreatureLib::Battling::Battle::GetOwnScripts(scripts);
|
2020-04-23 21:31:17 +00:00
|
|
|
scripts.Append(CreatureLib::Battling::ScriptWrapper(
|
|
|
|
CreatureLib::Battling::ScriptWrapper::FromScript(&_weatherScript)));
|
2020-04-18 13:35:01 +00:00
|
|
|
}
|
2021-04-11 14:27:21 +00:00
|
|
|
|
|
|
|
Battle* Clone() const override;
|
2020-02-16 16:50:16 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // PKMNLIB_BATTLE_HPP
|