PkmnLib/src/ScriptResolving/WASM/WebAssemblyBattleScript.hpp

36 lines
1.5 KiB
C++

#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<void>& owner, i32 wasm_ptr,
const std::unordered_set<WebAssemblyScriptCapabilities>* capabilities,
WebAssemblyScriptResolver* resolver, const ArbUt::StringView& scriptName)
: PkmnScript(owner), _resolver(resolver), _wasmPtr(wasm_ptr), _capabilities(capabilities),
_scriptName(scriptName) {}
~WebAssemblyBattleScript();
BattleScript* Clone(const ArbUt::OptionalBorrowedPtr<void>& owner) non_null override;
const ArbUt::StringView& GetName() const noexcept override { return _scriptName; }
public:
void OnInitialize(const CreatureLib::Battling::BattleLibrary* library,
const ArbUt::List<CreatureLib::Library::EffectParameter*>& parameters) override;
private:
[[nodiscard]] inline bool HasCapability(WebAssemblyScriptCapabilities capability) const noexcept {
return _capabilities->contains(capability);
}
WebAssemblyScriptResolver* _resolver;
i32 _wasmPtr;
const std::unordered_set<WebAssemblyScriptCapabilities>* _capabilities;
ArbUt::StringView _scriptName;
};
#endif // PKMNLIB_WEBASSEMBLYBATTLESCRIPT_H