Adds caching for expensive type resolution.
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
#include "AngelScriptItemUseScript.hpp"
|
||||
#include "AngelScriptFunctionCall.hpp"
|
||||
#include "AngelScriptResolver.hpp"
|
||||
#include "AngelscriptUserdata.hpp"
|
||||
|
||||
CScriptArray*
|
||||
AngelScriptItemUseScript::GetEffectParameters(const ArbUt::List<CreatureLib::Library::EffectParameter*>& ls) {
|
||||
asITypeInfo* t = _resolver->GetBaseType("array<EffectParameter@>"_cnc);
|
||||
CScriptArray* arr = CScriptArray::Create(t, ls.Count());
|
||||
auto* ud = _resolver->GetUserdata();
|
||||
auto* arr = ud->CreateArray("array<EffectParameter@>"_cnc, ls.Count());
|
||||
for (size_t i = 0; i < ls.Count(); i++) {
|
||||
arr->SetValue(i, (void**)&ls[i]);
|
||||
}
|
||||
@@ -15,7 +17,7 @@ void AngelScriptItemUseScript::OnInitialize(const ArbUt::List<CreatureLib::Libra
|
||||
if (__OnInitialize.Exists) {
|
||||
CScriptArray* arr = nullptr;
|
||||
AngelScriptUtils::AngelscriptFunctionCall(
|
||||
__OnInitialize.Function, _resolver->GetContextPool(), _scriptObject, ""_cnc,
|
||||
__OnInitialize.Function, _resolver->GetContextPool(), _scriptObject, _resolver, ""_cnc,
|
||||
[&]([[maybe_unused]] asIScriptContext* ctx) {
|
||||
arr = GetEffectParameters(parameters);
|
||||
ctx->SetArgAddress(0, arr);
|
||||
@@ -32,7 +34,7 @@ bool AngelScriptItemUseScript::IsItemUsable() const {
|
||||
}
|
||||
bool res = false;
|
||||
AngelScriptUtils::AngelscriptFunctionCall(
|
||||
__IsItemUsable.Function, _resolver->GetContextPool(), _scriptObject, ""_cnc,
|
||||
__IsItemUsable.Function, _resolver->GetContextPool(), _scriptObject, _resolver, ""_cnc,
|
||||
[&]([[maybe_unused]] asIScriptContext* ctx) {},
|
||||
[&]([[maybe_unused]] asIScriptContext* ctx) { res = ctx->GetReturnByte() == 1; });
|
||||
return res;
|
||||
@@ -44,7 +46,7 @@ bool AngelScriptItemUseScript::IsCreatureUseItem() const {
|
||||
}
|
||||
bool res = false;
|
||||
AngelScriptUtils::AngelscriptFunctionCall(
|
||||
__IsPokemonUseItem.Function, _resolver->GetContextPool(), _scriptObject, ""_cnc,
|
||||
__IsPokemonUseItem.Function, _resolver->GetContextPool(), _scriptObject, _resolver, ""_cnc,
|
||||
[&]([[maybe_unused]] asIScriptContext* ctx) {},
|
||||
[&]([[maybe_unused]] asIScriptContext* ctx) { res = ctx->GetReturnByte() == 1; });
|
||||
return res;
|
||||
@@ -55,7 +57,7 @@ bool AngelScriptItemUseScript::IsUseValidForCreature(CreatureLib::Battling::Crea
|
||||
}
|
||||
bool res = false;
|
||||
AngelScriptUtils::AngelscriptFunctionCall(
|
||||
__IsUseValidForPokemon.Function, _resolver->GetContextPool(), _scriptObject, ""_cnc,
|
||||
__IsUseValidForPokemon.Function, _resolver->GetContextPool(), _scriptObject, _resolver, ""_cnc,
|
||||
[&]([[maybe_unused]] asIScriptContext* ctx) { ctx->SetArgObject(0, (void*)creature); },
|
||||
[&]([[maybe_unused]] asIScriptContext* ctx) { res = ctx->GetReturnByte() == 1; });
|
||||
return res;
|
||||
@@ -66,7 +68,7 @@ bool AngelScriptItemUseScript::IsHoldable() const {
|
||||
}
|
||||
bool res = false;
|
||||
AngelScriptUtils::AngelscriptFunctionCall(
|
||||
__IsHoldable.Function, _resolver->GetContextPool(), _scriptObject, ""_cnc,
|
||||
__IsHoldable.Function, _resolver->GetContextPool(), _scriptObject, _resolver, ""_cnc,
|
||||
[&]([[maybe_unused]] asIScriptContext* ctx) {},
|
||||
[&]([[maybe_unused]] asIScriptContext* ctx) { res = ctx->GetReturnByte() == 1; });
|
||||
return res;
|
||||
@@ -76,7 +78,7 @@ void AngelScriptItemUseScript::OnUse() const {
|
||||
CreatureLib::Battling::ItemUseScript::OnUse();
|
||||
}
|
||||
AngelScriptUtils::AngelscriptFunctionCall(
|
||||
__OnUse.Function, _resolver->GetContextPool(), _scriptObject, ""_cnc,
|
||||
__OnUse.Function, _resolver->GetContextPool(), _scriptObject, _resolver, ""_cnc,
|
||||
[&]([[maybe_unused]] asIScriptContext* ctx) {}, [&]([[maybe_unused]] asIScriptContext* ctx) {});
|
||||
}
|
||||
void AngelScriptItemUseScript::OnCreatureUse(CreatureLib::Battling::Creature* creature) const {
|
||||
@@ -84,7 +86,7 @@ void AngelScriptItemUseScript::OnCreatureUse(CreatureLib::Battling::Creature* cr
|
||||
CreatureLib::Battling::ItemUseScript::OnUse();
|
||||
}
|
||||
AngelScriptUtils::AngelscriptFunctionCall(
|
||||
__OnPokemonUse.Function, _resolver->GetContextPool(), _scriptObject, ""_cnc,
|
||||
__OnPokemonUse.Function, _resolver->GetContextPool(), _scriptObject, _resolver, ""_cnc,
|
||||
[&]([[maybe_unused]] asIScriptContext* ctx) { ctx->SetArgObject(0, (void*)creature); },
|
||||
[&]([[maybe_unused]] asIScriptContext* ctx) {});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user