diff options
Diffstat (limited to 'src/script')
-rw-r--r-- | src/script/squirrel.cpp | 9 | ||||
-rw-r--r-- | src/script/squirrel.hpp | 6 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/script/squirrel.cpp b/src/script/squirrel.cpp index a62c83418..f31b813da 100644 --- a/src/script/squirrel.cpp +++ b/src/script/squirrel.cpp @@ -234,6 +234,15 @@ bool Squirrel::CallIntegerMethod(HSQOBJECT instance, const char *method_name, in return true; } +bool Squirrel::CallBoolMethod(HSQOBJECT instance, const char *method_name, bool *res, int suspend) +{ + HSQOBJECT ret; + if (!this->CallMethod(instance, method_name, &ret, suspend)) return false; + if (ret._type != OT_BOOL) return false; + *res = ObjectToBool(&ret); + return true; +} + /* static */ bool Squirrel::CreateClassInstanceVM(HSQUIRRELVM vm, const char *class_name, void *real_instance, HSQOBJECT *instance, SQRELEASEHOOK release_hook) { int oldtop = sq_gettop(vm); diff --git a/src/script/squirrel.hpp b/src/script/squirrel.hpp index 31b36f968..ee597f87a 100644 --- a/src/script/squirrel.hpp +++ b/src/script/squirrel.hpp @@ -116,6 +116,7 @@ public: bool CallMethod(HSQOBJECT instance, const char *method_name, int suspend = -1) { return this->CallMethod(instance, method_name, NULL, suspend); } bool CallStringMethodStrdup(HSQOBJECT instance, const char *method_name, const char **res, int suspend = -1); bool CallIntegerMethod(HSQOBJECT instance, const char *method_name, int *res, int suspend = -1); + bool CallBoolMethod(HSQOBJECT instance, const char *method_name, bool *res, int suspend = -1); /** * Check if a method exists in an instance. @@ -162,6 +163,11 @@ public: static int ObjectToInteger(HSQOBJECT *ptr) { return sq_objtointeger(ptr); } /** + * Convert a Squirrel-object to a bool. + */ + static bool ObjectToBool(HSQOBJECT *ptr) { return sq_objtobool(ptr) == 1; } + + /** * Sets a pointer in the VM that is reachable from where ever you are in SQ. * Useful to keep track of the main instance. */ |