Move script name to type.
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
13a8228a44
commit
98e17a1eb8
|
@ -38,7 +38,7 @@ if (NOT EXISTS ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
|||
endif()
|
||||
if (NOT WINDOWS)
|
||||
execute_process(COMMAND conan install ${CMAKE_SOURCE_DIR} --install-folder=${CMAKE_BINARY_DIR} --build missing
|
||||
-s compiler=clang -s compiler.libcxx=libstdc++11 -s compiler.version=${VERSION} -s build_type=Debug)
|
||||
-s compiler=clang -s compiler.libcxx=libstdc++11 -s compiler.version=${VERSION})
|
||||
else()
|
||||
execute_process(COMMAND conan install ${CMAKE_SOURCE_DIR} --install-folder=${CMAKE_BINARY_DIR} --build missing
|
||||
-s compiler=gcc -s compiler.libcxx=libstdc++11 -s compiler.version=${VERSION} -s os=Windows)
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
namespace PkmnLib::Battling{
|
||||
class PkmnScript : public CreatureLib::Battling::Script{
|
||||
public:
|
||||
PkmnScript(const std::string& name) : Script(name) {}
|
||||
|
||||
virtual void ModifyCriticalStage(CreatureLib::Battling::ExecutingAttack* attack,
|
||||
CreatureLib::Battling::Creature* target, uint8_t hit, uint8_t* critStage){};
|
||||
};
|
||||
|
|
|
@ -85,18 +85,18 @@ void AngelScripResolver::RegisterTypes() {
|
|||
BasicScriptClass::Register(_engine);
|
||||
}
|
||||
|
||||
AngelScriptTypeInfo* AngelScripResolver::GetTypeInfo(const std::string& name) {
|
||||
auto find = _types.find(name);
|
||||
AngelScriptTypeInfo* AngelScripResolver::GetTypeInfo(const std::string& name, const std::string& decl) {
|
||||
auto find = _types.find(decl);
|
||||
if (find != _types.end()) {
|
||||
return find->second;
|
||||
}
|
||||
auto type = _mainModule->GetTypeInfoByDecl(name.c_str());
|
||||
auto type = _mainModule->GetTypeInfoByDecl(decl.c_str());
|
||||
if (type == nullptr) {
|
||||
_types.insert({name, nullptr});
|
||||
_types.insert({decl, nullptr});
|
||||
return nullptr;
|
||||
}
|
||||
auto typeinfo = new AngelScriptTypeInfo(type);
|
||||
_types.insert({name, typeinfo});
|
||||
auto typeinfo = new AngelScriptTypeInfo(name, type);
|
||||
_types.insert({decl, typeinfo});
|
||||
return typeinfo;
|
||||
}
|
||||
void AngelScripResolver::MessageCallback(const asSMessageInfo* msg, void* param) {
|
||||
|
@ -123,13 +123,13 @@ static constexpr const char* GetCategoryNamespace(ScriptCategory category) {
|
|||
CreatureLib::Battling::Script* AngelScripResolver::LoadScript(ScriptCategory category, const std::string& scriptName) {
|
||||
std::stringstream decl;
|
||||
decl << GetCategoryNamespace(category) << "::" << scriptName;
|
||||
auto typeInfo = GetTypeInfo(decl.str());
|
||||
auto typeInfo = GetTypeInfo(scriptName, decl.str());
|
||||
if (typeInfo == nullptr)
|
||||
return nullptr;
|
||||
auto ctx = _contextPool->RequestContext();
|
||||
auto obj = typeInfo->Instantiate(ctx);
|
||||
_contextPool->ReturnContextToPool(ctx);
|
||||
return new AngelScriptScript(scriptName, typeInfo, obj, _contextPool);
|
||||
return new AngelScriptScript(typeInfo, obj, _contextPool);
|
||||
}
|
||||
void AngelScripResolver::FinalizeModule() {
|
||||
int r = _builder.BuildModule();
|
||||
|
|
|
@ -21,7 +21,7 @@ private:
|
|||
|
||||
static void MessageCallback(const asSMessageInfo* msg, void* param);
|
||||
static void Print(const std::string& str) { std::cout << str << std::endl; }
|
||||
AngelScriptTypeInfo* GetTypeInfo(const std::string& name);
|
||||
AngelScriptTypeInfo* GetTypeInfo(const std::string& name, const std::string& decl);
|
||||
|
||||
void RegisterTypes();
|
||||
|
||||
|
|
|
@ -16,11 +16,13 @@ private:
|
|||
asIScriptObject* _obj = nullptr;
|
||||
|
||||
public:
|
||||
AngelScriptScript(const std::string& name, AngelScriptTypeInfo* type, asIScriptObject* obj, ContextPool* ctxPool)
|
||||
: PkmnLib::Battling::PkmnScript(name), _type(type), _ctxPool(ctxPool), _obj(obj) {}
|
||||
AngelScriptScript(AngelScriptTypeInfo* type, asIScriptObject* obj, ContextPool* ctxPool)
|
||||
: _type(type), _ctxPool(ctxPool), _obj(obj) {}
|
||||
|
||||
~AngelScriptScript() override { _obj->Release(); }
|
||||
|
||||
[[nodiscard]] const std::string& GetName() const override { return _type->GetName(); }
|
||||
|
||||
asIScriptFunction* PrepareMethod(const char* name, asIScriptContext* ctx) {
|
||||
auto func = _type->GetFunction(name);
|
||||
ctx->Prepare(func);
|
||||
|
|
|
@ -6,11 +6,13 @@
|
|||
#include <angelscript.h>
|
||||
#include <cstring>
|
||||
#include <unordered_map>
|
||||
#include <utility>
|
||||
|
||||
class AngelScriptTypeInfo {
|
||||
private:
|
||||
asITypeInfo* _type = nullptr;
|
||||
std::unordered_map<std::string, asIScriptFunction*> _functions;
|
||||
std::string _name;
|
||||
|
||||
struct FunctionInfo {
|
||||
bool Exists = false;
|
||||
|
@ -29,7 +31,7 @@ private:
|
|||
}
|
||||
|
||||
public:
|
||||
explicit AngelScriptTypeInfo(asITypeInfo* type) : _type(type) {}
|
||||
explicit AngelScriptTypeInfo(std::string name, asITypeInfo* type) : _type(type), _name(std::move(name)) {}
|
||||
~AngelScriptTypeInfo() {
|
||||
for (const auto& f : _functions) {
|
||||
f.second->Release();
|
||||
|
@ -37,6 +39,10 @@ public:
|
|||
_functions.clear();
|
||||
}
|
||||
|
||||
const std::string& GetName() const{
|
||||
return _name;
|
||||
}
|
||||
|
||||
asIScriptFunction* GetFunction(const std::string& functionName) {
|
||||
auto find = _functions.find(functionName);
|
||||
if (find != _functions.end()) {
|
||||
|
|
Loading…
Reference in New Issue