#ifndef PKMNLIB_WEBASSEMBLYBATTLESCRIPT_H #define PKMNLIB_WEBASSEMBLYBATTLESCRIPT_H #include "../../Battling/PkmnScript.hpp" #include "WebAssemblyScriptCapabilities.hpp" class WebAssemblyScriptResolver; class WebAssemblyBattleScript : public PkmnLib::Battling::PkmnScript { public: WebAssemblyBattleScript(const ArbUt::OptionalBorrowedPtr& owner, i32 wasm_ptr, const std::unordered_set* capabilities, WebAssemblyScriptResolver* resolver, const ArbUt::StringView& scriptName) : PkmnScript(owner), _resolver(resolver), _wasmPtr(wasm_ptr), _capabilities(capabilities), _scriptName(scriptName) {} ~WebAssemblyBattleScript(); BattleScript* Clone(const ArbUt::OptionalBorrowedPtr& owner) non_null override; const ArbUt::StringView& GetName() const noexcept override { return _scriptName; } public: void OnInitialize(const CreatureLib::Battling::BattleLibrary* library, const ArbUt::List& parameters) override; private: [[nodiscard]] inline bool HasCapability(WebAssemblyScriptCapabilities capability) const noexcept { return _capabilities->contains(capability); } WebAssemblyScriptResolver* _resolver; i32 _wasmPtr; const std::unordered_set* _capabilities; ArbUt::StringView _scriptName; }; #endif // PKMNLIB_WEBASSEMBLYBATTLESCRIPT_H