Adds functions to add, remove, and get volatile scripts from a BattleSide.
All checks were successful
continuous-integration/drone/push Build is passing

Signed-off-by: Deukhoofd <Deukhoofd@gmail.com>
This commit is contained in:
2021-10-28 14:49:24 +02:00
parent 47c3429295
commit 19375c2f87
4 changed files with 55 additions and 1 deletions

View File

@@ -88,6 +88,7 @@ namespace CreatureLib::Battling {
ArbUt::OptionalBorrowedPtr<BattleParty> FindPartyForCreature(const ArbUt::BorrowedPtr<Creature>&);
const ArbUt::UniquePtrList<BattleSide>& GetSides() const noexcept { return _sides; }
ArbUt::OptionalBorrowedPtr<BattleScript> GetVolatileScript(const ArbUt::StringView& key) const {
return _volatile.Get(key);
}

View File

@@ -132,3 +132,18 @@ BattleSide* BattleSide::CloneWithoutCreatures(ArbUt::BorrowedPtr<Battle> battle)
side->_hasFled = _hasFled;
return side;
}
BattleScript* BattleSide::AddVolatileScript(const ArbUt::StringView& key) {
auto script = _volatile.Get(key);
if (script.HasValue()) {
script.GetValue()->Stack();
return script.GetValue();
}
script = _battle->GetLibrary()->LoadScript(ScriptCategory::Battle, key);
if (!script.HasValue()) {
THROW("Invalid volatile script requested for battle: '" << key.c_str() << "'.");
}
return _volatile.Add(script.GetValue());
}
BattleScript* BattleSide::AddVolatileScript(BattleScript* script) { return _volatile.Add(script); }
void BattleSide::RemoveVolatileScript(BattleScript* script) { _volatile.Remove(script->GetName()); }

View File

@@ -92,6 +92,20 @@ namespace CreatureLib::Battling {
bool SwapPositions(u8 a, u8 b);
BattleSide* CloneWithoutCreatures(ArbUt::BorrowedPtr<Battle> battle) const;
ArbUt::OptionalBorrowedPtr<BattleScript> GetVolatileScript(const ArbUt::StringView& key) const {
return _volatile.Get(key);
}
ArbUt::OptionalBorrowedPtr<BattleScript> GetVolatileScript(uint32_t keyHash) const noexcept {
return _volatile.Get(keyHash);
}
BattleScript* AddVolatileScript(const ArbUt::StringView& key);
BattleScript* AddVolatileScript(BattleScript* script);
void RemoveVolatileScript(const ArbUt::BasicStringView& name) { _volatile.Remove(name); }
void RemoveVolatileScript(uint32_t keyHash) { _volatile.Remove(keyHash); }
void RemoveVolatileScript(BattleScript* script);
bool HasVolatileScript(const ArbUt::BasicStringView& name) const { return _volatile.Has(name); }
bool HasVolatileScript(uint32_t keyHash) const { return _volatile.Has(keyHash); }
};
}