Support for suppressing a script, so that it temporarily does not function.
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Deukhoofd 2021-11-19 14:07:27 +01:00
parent 53c27d35b6
commit 9ede453587
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
2 changed files with 13 additions and 0 deletions

View File

@ -17,12 +17,16 @@ namespace CreatureLib::Battling {
class BattleScript {
ArbUt::OptionalBorrowedPtr<void> _owner;
size_t _suppressed = 0;
public:
BattleScript(const ArbUt::OptionalBorrowedPtr<void>& owner) { _owner = owner; };
NO_COPY_OR_MOVE(BattleScript);
inline ArbUt::OptionalBorrowedPtr<void> GetOwner() const noexcept { return _owner; }
inline bool IsSuppressed() const noexcept { return _suppressed > 0; }
inline void Suppress() { _suppressed++; }
inline void Unsuppress() { _suppressed--; }
virtual ~BattleScript() = default;

View File

@ -4,6 +4,9 @@
auto aggregator = (source)->GetScriptIterator(); \
ArbUt::BorrowedPtr<CreatureLib::Battling::BattleScript> next = (CreatureLib::Battling::BattleScript*)1; \
while (aggregator.GetNext(next)) { \
if (next->IsSuppressed()) { \
continue; \
} \
try { \
next->hookName(__VA_ARGS__); \
} catch (const std::exception& e) { \
@ -23,9 +26,15 @@
if (scriptWrapper.HasValue()) { \
if (scriptWrapper.IsSet()) { \
for (const auto& sv : scriptWrapper.GetScriptSet()->GetIterator()) { \
if (sv->IsSuppressed()) { \
continue; \
} \
sv->hookName(__VA_ARGS__); \
} \
} else { \
if (scriptWrapper.GetScript()->get()->IsSuppressed()) { \
continue; \
} \
scriptWrapper.GetScript()->get()->hookName(__VA_ARGS__); \
} \
} \