From cec9f0907f0642aef324e93df9cf1cfb9570e223 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 1 Feb 2020 17:13:30 +0100 Subject: [PATCH] Reduces some overhead from creating AngelScript array for Pokemon.GetTypes() --- .../Battling/RegisterPokemonClass.cpp | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/AngelScript/TypeRegistry/Battling/RegisterPokemonClass.cpp b/src/AngelScript/TypeRegistry/Battling/RegisterPokemonClass.cpp index 362ee44..f3c5344 100644 --- a/src/AngelScript/TypeRegistry/Battling/RegisterPokemonClass.cpp +++ b/src/AngelScript/TypeRegistry/Battling/RegisterPokemonClass.cpp @@ -53,19 +53,24 @@ void RegisterPokemonClass::RegisterLearnedAttack(asIScriptEngine* engine) { ENUM__SIZE_WRAPPER(Pkmn_GenderWrapper, PkmnLib::Battling::Pokemon, GetGender) -CScriptArray* GetTypes(const PkmnLib::Battling::Pokemon* obj) { - asIScriptContext* ctx = asGetActiveContext(); - if (ctx) { - asIScriptEngine* engine = ctx->GetEngine(); - asITypeInfo* t = engine->GetTypeInfoByDecl("array"); - auto a = obj->GetTypes(); - CScriptArray* arr = CScriptArray::Create(t, a.size()); - for (size_t i = 0; i < a.size(); i++){ - arr->SetValue(i, &a[i]); + +static asITypeInfo* _uint8TypeInfo = nullptr; +static CScriptArray* GetTypes(const PkmnLib::Battling::Pokemon* obj) { + if (_uint8TypeInfo == nullptr){ + asIScriptContext* ctx = asGetActiveContext(); + if (!ctx) { + return nullptr; } - return arr; + asIScriptEngine* engine = ctx->GetEngine(); + _uint8TypeInfo = engine->GetTypeInfoByDecl("array"); } - return nullptr; + + auto a = obj->GetTypes(); + CScriptArray* arr = CScriptArray::Create(_uint8TypeInfo, a.size()); + for (size_t i = 0; i < a.size(); i++){ + arr->SetValue(i, &a[i]); + } + return arr; } void RegisterPokemonClass::RegisterPokemonType(asIScriptEngine* engine) {