A bunch of work on the concept of script owners.
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2021-10-29 23:54:44 +02:00
parent 0623bdff06
commit ede314ef39
19 changed files with 110 additions and 32 deletions

View File

@@ -4,7 +4,7 @@ void PkmnLib::Battling::Battle::SetWeather(const ArbUt::StringView& name) {
_weatherScript->OnRemove();
}
_weatherScript = std::unique_ptr<CreatureLib::Battling::BattleScript>(
_library->LoadScript(static_cast<ScriptCategory>(PkmnScriptCategory::Weather), name));
_library->LoadScript(this, static_cast<ScriptCategory>(PkmnScriptCategory::Weather), name));
_eventHook.Trigger<WeatherChangeEvent>(name);
}
void PkmnLib::Battling::Battle::ClearWeather() {
@@ -57,9 +57,9 @@ PkmnLib::Battling::Battle* PkmnLib::Battling::Battle::Clone() const {
battle->_hasEnded = _hasEnded;
battle->_battleResult = _battleResult;
battle->_currentTurn = _currentTurn;
_volatile.Clone(battle->_volatile);
_volatile.Clone(battle, battle->_volatile);
if (_weatherScript != nullptr) {
battle->_weatherScript = std::unique_ptr<CreatureLib::Battling::BattleScript>(_weatherScript->Clone());
battle->_weatherScript = std::unique_ptr<CreatureLib::Battling::BattleScript>(_weatherScript->Clone(battle));
}
return battle;

View File

@@ -13,6 +13,8 @@
namespace PkmnLib::Battling {
class PkmnScript : public CreatureLib::Battling::BattleScript {
public:
PkmnScript(const ArbUt::OptionalBorrowedPtr<void>& owner) : CreatureLib::Battling::BattleScript(owner) {}
virtual void ModifyCriticalStage(CreatureLib::Battling::ExecutingAttack* attack,
CreatureLib::Battling::Creature* target, uint8_t hit, uint8_t* critStage){};
virtual void OverrideCriticalModifier(CreatureLib::Battling::ExecutingAttack* attack,

View File

@@ -53,14 +53,14 @@ CreatureLib::Battling::Creature* PkmnLib::Battling::Pokemon::Clone() const {
c->_battleData.OnBattleField = _battleData.OnBattleField;
c->_battleData.Index = _battleData.Index;
if (_activeTalent != nullptr) {
c->_activeTalent = std::unique_ptr<PkmnScript::BattleScript>(_activeTalent->Clone());
c->_activeTalent = std::unique_ptr<PkmnScript::BattleScript>(_activeTalent->Clone(c));
}
c->_hasOverridenTalent = _hasOverridenTalent;
c->_overridenTalentName = _overridenTalentName;
if (_status != nullptr) {
c->_status = std::unique_ptr<PkmnScript::BattleScript>(_status->Clone());
c->_status = std::unique_ptr<PkmnScript::BattleScript>(_status->Clone(c));
}
_volatile.Clone(c->_volatile);
_volatile.Clone(c, c->_volatile);
c->_types = std::vector<u8>(_types);
c->_friendship = _friendship;
c->RecalculateFlatStats();