diff options
author | sfan5 <sfan5@live.de> | 2020-02-12 14:59:06 +0100 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2020-02-23 22:24:12 +0100 |
commit | 4da057cc49082192bbc45689d80dec3410e41f27 (patch) | |
tree | 7c20ad276c382db88794eaff13ba2bb3d7857722 /src/script/cpp_api | |
parent | 2df226bb41904bfd80c33f243996ee7b1bd7e907 (diff) | |
download | minetest-4da057cc49082192bbc45689d80dec3410e41f27.tar.gz minetest-4da057cc49082192bbc45689d80dec3410e41f27.tar.bz2 minetest-4da057cc49082192bbc45689d80dec3410e41f27.zip |
Script API: Document ObjectRef handling in a comment
Diffstat (limited to 'src/script/cpp_api')
-rw-r--r-- | src/script/cpp_api/s_base.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index 1f40bb06a..ecb1ba39b 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -333,6 +333,20 @@ void ScriptApiBase::setOriginFromTableRaw(int index, const char *fxn) #endif } +/* + * How ObjectRefs are handled in Lua: + * When an active object is created, an ObjectRef is created on the Lua side + * and stored in core.object_refs[id]. + * Methods that require an ObjectRef to a certain object retrieve it from that + * table instead of creating their own.(*) + * When an active object is removed, the existing ObjectRef is invalidated + * using ::set_null() and removed from the core.object_refs table. + * (*) An exception to this are NULL ObjectRefs and anonymous ObjectRefs + * for objects without ID. + * It's unclear what the latter are needed for and their use is problematic + * since we lose control over the ref and the contained pointer. + */ + void ScriptApiBase::addObjectReference(ServerActiveObject *cobj) { SCRIPTAPI_PRECHECKHEADER |