Implements new Effect Parameters in AngelScript/
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2020-04-10 20:39:11 +02:00
parent 0700f7cfbd
commit d12267c695
7 changed files with 153 additions and 4 deletions

View File

@@ -9,6 +9,20 @@
static std::unordered_map<const char*, const char*> _scripts = std::unordered_map<const char*, const char*>{
AS_CLASS(blankScript, ),
AS_CLASS(initializeScript, R"(
bool boolValue = false;
int64 intValue = 0;
string stringValue = "";
void OnInitialize(const array<EffectParameter@> &in parameters) override {
boolValue = parameters[0].AsBool();
intValue = parameters[1].AsInt();
stringValue = parameters[2].AsString();
}
bool GetBoolValue() { return boolValue; }
int64 GetIntValue() { return intValue; }
string GetStringValue() { return stringValue; }
)"),
AS_CLASS(stackScript, "int value = 0; void Stack() override { value++; } int GetValue() { return value; }"),
AS_CLASS(onRemoveScript, "int value = 0; void OnRemove() override { value++; } int GetValue() { return value; }"),
{"doubleInheritanceScript", R"(
@@ -93,6 +107,47 @@ TEST_CASE("Invoke non-implemented script function") {
delete script;
}
TEST_CASE("Invoke OnInitialize script function") {
auto mainLib = TestLibrary::GetLibrary();
auto script = GetScript(mainLib, "initializeScript"_cnc);
REQUIRE(script != nullptr);
auto parameters = {
new CreatureLib::Library::EffectParameter(true),
new CreatureLib::Library::EffectParameter((int64_t)684),
new CreatureLib::Library::EffectParameter(std::string("foobar"))
};
script->OnInitialize(parameters);
auto ctxPool = script->GetContextPool();
auto ctx = ctxPool->RequestContext();
script->PrepareMethod("GetBoolValue"_cnc, ctx);
REQUIRE(ctx->Execute() == asEXECUTION_FINISHED);
REQUIRE((bool)ctx->GetReturnDWord());
ctxPool->ReturnContextToPool(ctx);
ctx = ctxPool->RequestContext();
script->PrepareMethod("GetIntValue"_cnc, ctx);
REQUIRE(ctx->Execute() == asEXECUTION_FINISHED);
REQUIRE(ctx->GetReturnQWord() == 684);
ctxPool->ReturnContextToPool(ctx);
ctx = ctxPool->RequestContext();
script->PrepareMethod("GetStringValue"_cnc, ctx);
REQUIRE(ctx->Execute() == asEXECUTION_FINISHED);
std::string s;
s = *(std::string*)ctx->GetReturnAddress();
REQUIRE(s == "foobar");
ctxPool->ReturnContextToPool(ctx);
for (auto p : parameters){
delete p;
}
delete script;
}
TEST_CASE("Invoke Stack script function") {
auto mainLib = TestLibrary::GetLibrary();
auto script = GetScript(mainLib, "stackScript"_cnc);
@@ -296,7 +351,6 @@ TEST_CASE("Get script name.") {
delete script;
}
TEST_CASE("Handle script exceptions.") {
auto mainLib = TestLibrary::GetLibrary();
auto script = GetScript(mainLib, "throwScript"_cnc);