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

This commit is contained in:
Deukhoofd committed 2021-11-19 14:07:27 +01:00
1 parent 53c27d35b6
commit 9ede453587
2 files changed
+13

No files matched your search

@@ -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;
@@ -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__); \
} \
} \