diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/gdnative/gdnative/pool_arrays.cpp | 56 | ||||
| -rw-r--r-- | modules/gdnative/gdnative_api.json | 98 | ||||
| -rw-r--r-- | modules/gdnative/include/gdnative/pool_arrays.h | 14 | ||||
| -rw-r--r-- | modules/gdnative/nativescript/nativescript.cpp | 41 | ||||
| -rw-r--r-- | modules/gdnative/pluginscript/pluginscript_instance.cpp | 5 | ||||
| -rw-r--r-- | modules/gdnative/pluginscript/pluginscript_language.cpp | 1 | ||||
| -rw-r--r-- | modules/gdnative/pluginscript/pluginscript_script.cpp | 49 | ||||
| -rw-r--r-- | modules/gdnative/pluginscript/pluginscript_script.h | 2 | ||||
| -rw-r--r-- | modules/gdscript/doc_classes/GDScript.xml | 2 | ||||
| -rw-r--r-- | modules/gridmap/doc_classes/GridMap.xml | 2 | ||||
| -rw-r--r-- | modules/mono/csharp_script.cpp | 8 | ||||
| -rw-r--r-- | modules/mono/mono_gd/gd_mono_marshal.cpp | 16 | ||||
| -rw-r--r-- | modules/mono/mono_gd/gd_mono_marshal.h | 1 | ||||
| -rw-r--r-- | modules/visual_script/doc_classes/VisualScript.xml | 2 |
14 files changed, 248 insertions, 49 deletions
diff --git a/modules/gdnative/gdnative/pool_arrays.cpp b/modules/gdnative/gdnative/pool_arrays.cpp index 6e014905a..6688be1a0 100644 --- a/modules/gdnative/gdnative/pool_arrays.cpp +++ b/modules/gdnative/gdnative/pool_arrays.cpp @@ -700,6 +700,10 @@ void GDAPI godot_pool_color_array_destroy(godot_pool_color_array *p_self) { // read accessor functions // +godot_pool_byte_array_read_access GDAPI *godot_pool_byte_array_read_access_copy(const godot_pool_byte_array_read_access *p_other) { + PoolVector<uint8_t>::Read *other = (PoolVector<uint8_t>::Read *)p_other; + return (godot_pool_byte_array_read_access *)memnew(PoolVector<uint8_t>::Read(*other)); +} const uint8_t GDAPI *godot_pool_byte_array_read_access_ptr(const godot_pool_byte_array_read_access *p_read) { const PoolVector<uint8_t>::Read *read = (const PoolVector<uint8_t>::Read *)p_read; return read->ptr(); @@ -713,6 +717,10 @@ void GDAPI godot_pool_byte_array_read_access_destroy(godot_pool_byte_array_read_ memdelete((PoolVector<uint8_t>::Read *)p_read); } +godot_pool_int_array_read_access GDAPI *godot_pool_int_array_read_access_copy(const godot_pool_int_array_read_access *p_other) { + PoolVector<godot_int>::Read *other = (PoolVector<godot_int>::Read *)p_other; + return (godot_pool_int_array_read_access *)memnew(PoolVector<godot_int>::Read(*other)); +} const godot_int GDAPI *godot_pool_int_array_read_access_ptr(const godot_pool_int_array_read_access *p_read) { const PoolVector<godot_int>::Read *read = (const PoolVector<godot_int>::Read *)p_read; return read->ptr(); @@ -726,6 +734,10 @@ void GDAPI godot_pool_int_array_read_access_destroy(godot_pool_int_array_read_ac memdelete((PoolVector<godot_int>::Read *)p_read); } +godot_pool_real_array_read_access GDAPI *godot_pool_real_array_read_access_copy(const godot_pool_real_array_read_access *p_other) { + PoolVector<godot_real>::Read *other = (PoolVector<godot_real>::Read *)p_other; + return (godot_pool_real_array_read_access *)memnew(PoolVector<godot_real>::Read(*other)); +} const godot_real GDAPI *godot_pool_real_array_read_access_ptr(const godot_pool_real_array_read_access *p_read) { const PoolVector<godot_real>::Read *read = (const PoolVector<godot_real>::Read *)p_read; return read->ptr(); @@ -739,6 +751,10 @@ void GDAPI godot_pool_real_array_read_access_destroy(godot_pool_real_array_read_ memdelete((PoolVector<godot_real>::Read *)p_read); } +godot_pool_string_array_read_access GDAPI *godot_pool_string_array_read_access_copy(const godot_pool_string_array_read_access *p_other) { + PoolVector<String>::Read *other = (PoolVector<String>::Read *)p_other; + return (godot_pool_string_array_read_access *)memnew(PoolVector<String>::Read(*other)); +} const godot_string GDAPI *godot_pool_string_array_read_access_ptr(const godot_pool_string_array_read_access *p_read) { const PoolVector<String>::Read *read = (const PoolVector<String>::Read *)p_read; return (const godot_string *)read->ptr(); @@ -752,6 +768,10 @@ void GDAPI godot_pool_string_array_read_access_destroy(godot_pool_string_array_r memdelete((PoolVector<String>::Read *)p_read); } +godot_pool_vector2_array_read_access GDAPI *godot_pool_vector2_array_read_access_copy(const godot_pool_vector2_array_read_access *p_other) { + PoolVector<Vector2>::Read *other = (PoolVector<Vector2>::Read *)p_other; + return (godot_pool_vector2_array_read_access *)memnew(PoolVector<Vector2>::Read(*other)); +} const godot_vector2 GDAPI *godot_pool_vector2_array_read_access_ptr(const godot_pool_vector2_array_read_access *p_read) { const PoolVector<Vector2>::Read *read = (const PoolVector<Vector2>::Read *)p_read; return (const godot_vector2 *)read->ptr(); @@ -765,6 +785,10 @@ void GDAPI godot_pool_vector2_array_read_access_destroy(godot_pool_vector2_array memdelete((PoolVector<Vector2>::Read *)p_read); } +godot_pool_vector3_array_read_access GDAPI *godot_pool_vector3_array_read_access_copy(const godot_pool_vector3_array_read_access *p_other) { + PoolVector<Vector3>::Read *other = (PoolVector<Vector3>::Read *)p_other; + return (godot_pool_vector3_array_read_access *)memnew(PoolVector<Vector3>::Read(*other)); +} const godot_vector3 GDAPI *godot_pool_vector3_array_read_access_ptr(const godot_pool_vector3_array_read_access *p_read) { const PoolVector<Vector3>::Read *read = (const PoolVector<Vector3>::Read *)p_read; return (const godot_vector3 *)read->ptr(); @@ -778,6 +802,10 @@ void GDAPI godot_pool_vector3_array_read_access_destroy(godot_pool_vector3_array memdelete((PoolVector<Vector2>::Read *)p_read); } +godot_pool_color_array_read_access GDAPI *godot_pool_color_array_read_access_copy(const godot_pool_color_array_read_access *p_other) { + PoolVector<Color>::Read *other = (PoolVector<Color>::Read *)p_other; + return (godot_pool_color_array_read_access *)memnew(PoolVector<Color>::Read(*other)); +} const godot_color GDAPI *godot_pool_color_array_read_access_ptr(const godot_pool_color_array_read_access *p_read) { const PoolVector<Color>::Read *read = (const PoolVector<Color>::Read *)p_read; return (const godot_color *)read->ptr(); @@ -795,6 +823,10 @@ void GDAPI godot_pool_color_array_read_access_destroy(godot_pool_color_array_rea // write accessor functions // +godot_pool_byte_array_write_access GDAPI *godot_pool_byte_array_write_access_copy(const godot_pool_byte_array_write_access *p_other) { + PoolVector<uint8_t>::Write *other = (PoolVector<uint8_t>::Write *)p_other; + return (godot_pool_byte_array_write_access *)memnew(PoolVector<uint8_t>::Write(*other)); +} uint8_t GDAPI *godot_pool_byte_array_write_access_ptr(const godot_pool_byte_array_write_access *p_write) { PoolVector<uint8_t>::Write *write = (PoolVector<uint8_t>::Write *)p_write; return write->ptr(); @@ -808,6 +840,10 @@ void GDAPI godot_pool_byte_array_write_access_destroy(godot_pool_byte_array_writ memdelete((PoolVector<uint8_t>::Write *)p_write); } +godot_pool_int_array_write_access GDAPI *godot_pool_int_array_write_access_copy(const godot_pool_int_array_write_access *p_other) { + PoolVector<godot_int>::Write *other = (PoolVector<godot_int>::Write *)p_other; + return (godot_pool_int_array_write_access *)memnew(PoolVector<godot_int>::Write(*other)); +} godot_int GDAPI *godot_pool_int_array_write_access_ptr(const godot_pool_int_array_write_access *p_write) { PoolVector<godot_int>::Write *write = (PoolVector<godot_int>::Write *)p_write; return write->ptr(); @@ -821,6 +857,10 @@ void GDAPI godot_pool_int_array_write_access_destroy(godot_pool_int_array_write_ memdelete((PoolVector<godot_int>::Write *)p_write); } +godot_pool_real_array_write_access GDAPI *godot_pool_real_array_write_access_copy(const godot_pool_real_array_write_access *p_other) { + PoolVector<godot_real>::Write *other = (PoolVector<godot_real>::Write *)p_other; + return (godot_pool_real_array_write_access *)memnew(PoolVector<godot_real>::Write(*other)); +} godot_real GDAPI *godot_pool_real_array_write_access_ptr(const godot_pool_real_array_write_access *p_write) { PoolVector<godot_real>::Write *write = (PoolVector<godot_real>::Write *)p_write; return write->ptr(); @@ -834,6 +874,10 @@ void GDAPI godot_pool_real_array_write_access_destroy(godot_pool_real_array_writ memdelete((PoolVector<godot_real>::Write *)p_write); } +godot_pool_string_array_write_access GDAPI *godot_pool_string_array_write_access_copy(const godot_pool_string_array_write_access *p_other) { + PoolVector<String>::Write *other = (PoolVector<String>::Write *)p_other; + return (godot_pool_string_array_write_access *)memnew(PoolVector<String>::Write(*other)); +} godot_string GDAPI *godot_pool_string_array_write_access_ptr(const godot_pool_string_array_write_access *p_write) { PoolVector<String>::Write *write = (PoolVector<String>::Write *)p_write; return (godot_string *)write->ptr(); @@ -847,6 +891,10 @@ void GDAPI godot_pool_string_array_write_access_destroy(godot_pool_string_array_ memdelete((PoolVector<String>::Write *)p_write); } +godot_pool_vector2_array_write_access GDAPI *godot_pool_vector2_array_write_access_copy(const godot_pool_vector2_array_write_access *p_other) { + PoolVector<Vector2>::Write *other = (PoolVector<Vector2>::Write *)p_other; + return (godot_pool_vector2_array_write_access *)memnew(PoolVector<Vector2>::Write(*other)); +} godot_vector2 GDAPI *godot_pool_vector2_array_write_access_ptr(const godot_pool_vector2_array_write_access *p_write) { PoolVector<Vector2>::Write *write = (PoolVector<Vector2>::Write *)p_write; return (godot_vector2 *)write->ptr(); @@ -860,6 +908,10 @@ void GDAPI godot_pool_vector2_array_write_access_destroy(godot_pool_vector2_arra memdelete((PoolVector<Vector2>::Write *)p_write); } +godot_pool_vector3_array_write_access GDAPI *godot_pool_vector3_array_write_access_copy(const godot_pool_vector3_array_write_access *p_other) { + PoolVector<Vector3>::Write *other = (PoolVector<Vector3>::Write *)p_other; + return (godot_pool_vector3_array_write_access *)memnew(PoolVector<Vector3>::Write(*other)); +} godot_vector3 GDAPI *godot_pool_vector3_array_write_access_ptr(const godot_pool_vector3_array_write_access *p_write) { PoolVector<Vector3>::Write *write = (PoolVector<Vector3>::Write *)p_write; return (godot_vector3 *)write->ptr(); @@ -873,6 +925,10 @@ void GDAPI godot_pool_vector3_array_write_access_destroy(godot_pool_vector3_arra memdelete((PoolVector<Vector3>::Write *)p_write); } +godot_pool_color_array_write_access GDAPI *godot_pool_color_array_write_access_copy(const godot_pool_color_array_write_access *p_other) { + PoolVector<Color>::Write *other = (PoolVector<Color>::Write *)p_other; + return (godot_pool_color_array_write_access *)memnew(PoolVector<Color>::Write(*other)); +} godot_color GDAPI *godot_pool_color_array_write_access_ptr(const godot_pool_color_array_write_access *p_write) { PoolVector<Color>::Write *write = (PoolVector<Color>::Write *)p_write; return (godot_color *)write->ptr(); diff --git a/modules/gdnative/gdnative_api.json b/modules/gdnative/gdnative_api.json index 6e3cf1675..59a9c0b09 100644 --- a/modules/gdnative/gdnative_api.json +++ b/modules/gdnative/gdnative_api.json @@ -2090,6 +2090,13 @@ ] }, { + "name": "godot_pool_byte_array_read_access_copy", + "return_type": "godot_pool_byte_array_read_access *", + "arguments": [ + ["const godot_pool_byte_array_read_access *", "p_read"] + ] + }, + { "name": "godot_pool_byte_array_read_access_ptr", "return_type": "const uint8_t *", "arguments": [ @@ -2112,6 +2119,13 @@ ] }, { + "name": "godot_pool_int_array_read_access_copy", + "return_type": "godot_pool_int_array_read_access *", + "arguments": [ + ["const godot_pool_int_array_read_access *", "p_read"] + ] + }, + { "name": "godot_pool_int_array_read_access_ptr", "return_type": "const godot_int *", "arguments": [ @@ -2134,6 +2148,13 @@ ] }, { + "name": "godot_pool_real_array_read_access_copy", + "return_type": "godot_pool_real_array_read_access *", + "arguments": [ + ["const godot_pool_real_array_read_access *", "p_read"] + ] + }, + { "name": "godot_pool_real_array_read_access_ptr", "return_type": "const godot_real *", "arguments": [ @@ -2156,6 +2177,13 @@ ] }, { + "name": "godot_pool_string_array_read_access_copy", + "return_type": "godot_pool_string_array_read_access *", + "arguments": [ + ["const godot_pool_string_array_read_access *", "p_read"] + ] + }, + { "name": "godot_pool_string_array_read_access_ptr", "return_type": "const godot_string *", "arguments": [ @@ -2178,6 +2206,13 @@ ] }, { + "name": "godot_pool_vector2_array_read_access_copy", + "return_type": "godot_pool_vector2_array_read_access *", + "arguments": [ + ["const godot_pool_vector2_array_read_access *", "p_read"] + ] + }, + { "name": "godot_pool_vector2_array_read_access_ptr", "return_type": "const godot_vector2 *", "arguments": [ @@ -2200,6 +2235,13 @@ ] }, { + "name": "godot_pool_vector3_array_read_access_copy", + "return_type": "godot_pool_vector3_array_read_access *", + "arguments": [ + ["const godot_pool_vector3_array_read_access *", "p_read"] + ] + }, + { "name": "godot_pool_vector3_array_read_access_ptr", "return_type": "const godot_vector3 *", "arguments": [ @@ -2222,6 +2264,13 @@ ] }, { + "name": "godot_pool_color_array_read_access_copy", + "return_type": "godot_pool_color_array_read_access *", + "arguments": [ + ["const godot_pool_color_array_read_access *", "p_read"] + ] + }, + { "name": "godot_pool_color_array_read_access_ptr", "return_type": "const godot_color *", "arguments": [ @@ -2244,6 +2293,13 @@ ] }, { + "name": "godot_pool_byte_array_write_access_copy", + "return_type": "godot_pool_byte_array_write_access *", + "arguments": [ + ["const godot_pool_byte_array_write_access *", "p_write"] + ] + }, + { "name": "godot_pool_byte_array_write_access_ptr", "return_type": "uint8_t *", "arguments": [ @@ -2266,6 +2322,13 @@ ] }, { + "name": "godot_pool_int_array_write_access_copy", + "return_type": "godot_pool_int_array_write_access *", + "arguments": [ + ["const godot_pool_int_array_write_access *", "p_write"] + ] + }, + { "name": "godot_pool_int_array_write_access_ptr", "return_type": "godot_int *", "arguments": [ @@ -2288,6 +2351,13 @@ ] }, { + "name": "godot_pool_real_array_write_access_copy", + "return_type": "godot_pool_real_array_write_access *", + "arguments": [ + ["const godot_pool_real_array_write_access *", "p_write"] + ] + }, + { "name": "godot_pool_real_array_write_access_ptr", "return_type": "godot_real *", "arguments": [ @@ -2310,6 +2380,13 @@ ] }, { + "name": "godot_pool_string_array_write_access_copy", + "return_type": "godot_pool_string_array_write_access *", + "arguments": [ + ["const godot_pool_string_array_write_access *", "p_write"] + ] + }, + { "name": "godot_pool_string_array_write_access_ptr", "return_type": "godot_string *", "arguments": [ @@ -2332,6 +2409,13 @@ ] }, { + "name": "godot_pool_vector2_array_write_access_copy", + "return_type": "godot_pool_vector2_array_write_access *", + "arguments": [ + ["const godot_pool_vector2_array_write_access *", "p_write"] + ] + }, + { "name": "godot_pool_vector2_array_write_access_ptr", "return_type": "godot_vector2 *", "arguments": [ @@ -2354,6 +2438,13 @@ ] }, { + "name": "godot_pool_vector3_array_write_access_copy", + "return_type": "godot_pool_vector3_array_write_access *", + "arguments": [ + ["const godot_pool_vector3_array_write_access *", "p_write"] + ] + }, + { "name": "godot_pool_vector3_array_write_access_ptr", "return_type": "godot_vector3 *", "arguments": [ @@ -2376,6 +2467,13 @@ ] }, { + "name": "godot_pool_color_array_write_access_copy", + "return_type": "godot_pool_color_array_write_access *", + "arguments": [ + ["const godot_pool_color_array_write_access *", "p_write"] + ] + }, + { "name": "godot_pool_color_array_write_access_ptr", "return_type": "godot_color *", "arguments": [ diff --git a/modules/gdnative/include/gdnative/pool_arrays.h b/modules/gdnative/include/gdnative/pool_arrays.h index 69a93725a..1210039e3 100644 --- a/modules/gdnative/include/gdnative/pool_arrays.h +++ b/modules/gdnative/include/gdnative/pool_arrays.h @@ -383,30 +383,37 @@ void GDAPI godot_pool_color_array_destroy(godot_pool_color_array *p_self); // read accessor functions // +godot_pool_byte_array_read_access GDAPI *godot_pool_byte_array_read_access_copy(const godot_pool_byte_array_read_access *p_other); const uint8_t GDAPI *godot_pool_byte_array_read_access_ptr(const godot_pool_byte_array_read_access *p_read); void GDAPI godot_pool_byte_array_read_access_operator_assign(godot_pool_byte_array_read_access *p_read, godot_pool_byte_array_read_access *p_other); void GDAPI godot_pool_byte_array_read_access_destroy(godot_pool_byte_array_read_access *p_read); +godot_pool_int_array_read_access GDAPI *godot_pool_int_array_read_access_copy(const godot_pool_int_array_read_access *p_other); const godot_int GDAPI *godot_pool_int_array_read_access_ptr(const godot_pool_int_array_read_access *p_read); void GDAPI godot_pool_int_array_read_access_operator_assign(godot_pool_int_array_read_access *p_read, godot_pool_int_array_read_access *p_other); void GDAPI godot_pool_int_array_read_access_destroy(godot_pool_int_array_read_access *p_read); +godot_pool_real_array_read_access GDAPI *godot_pool_real_array_read_access_copy(const godot_pool_real_array_read_access *p_other); const godot_real GDAPI *godot_pool_real_array_read_access_ptr(const godot_pool_real_array_read_access *p_read); void GDAPI godot_pool_real_array_read_access_operator_assign(godot_pool_real_array_read_access *p_read, godot_pool_real_array_read_access *p_other); void GDAPI godot_pool_real_array_read_access_destroy(godot_pool_real_array_read_access *p_read); +godot_pool_string_array_read_access GDAPI *godot_pool_string_array_read_access_copy(const godot_pool_string_array_read_access *p_other); const godot_string GDAPI *godot_pool_string_array_read_access_ptr(const godot_pool_string_array_read_access *p_read); void GDAPI godot_pool_string_array_read_access_operator_assign(godot_pool_string_array_read_access *p_read, godot_pool_string_array_read_access *p_other); void GDAPI godot_pool_string_array_read_access_destroy(godot_pool_string_array_read_access *p_read); +godot_pool_vector2_array_read_access GDAPI *godot_pool_vector2_array_read_access_copy(const godot_pool_vector2_array_read_access *p_other); const godot_vector2 GDAPI *godot_pool_vector2_array_read_access_ptr(const godot_pool_vector2_array_read_access *p_read); void GDAPI godot_pool_vector2_array_read_access_operator_assign(godot_pool_vector2_array_read_access *p_read, godot_pool_vector2_array_read_access *p_other); void GDAPI godot_pool_vector2_array_read_access_destroy(godot_pool_vector2_array_read_access *p_read); +godot_pool_vector3_array_read_access GDAPI *godot_pool_vector3_array_read_access_copy(const godot_pool_vector3_array_read_access *p_other); const godot_vector3 GDAPI *godot_pool_vector3_array_read_access_ptr(const godot_pool_vector3_array_read_access *p_read); void GDAPI godot_pool_vector3_array_read_access_operator_assign(godot_pool_vector3_array_read_access *p_read, godot_pool_vector3_array_read_access *p_other); void GDAPI godot_pool_vector3_array_read_access_destroy(godot_pool_vector3_array_read_access *p_read); +godot_pool_color_array_read_access GDAPI *godot_pool_color_array_read_access_copy(const godot_pool_color_array_read_access *p_other); const godot_color GDAPI *godot_pool_color_array_read_access_ptr(const godot_pool_color_array_read_access *p_read); void GDAPI godot_pool_color_array_read_access_operator_assign(godot_pool_color_array_read_access *p_read, godot_pool_color_array_read_access *p_other); void GDAPI godot_pool_color_array_read_access_destroy(godot_pool_color_array_read_access *p_read); @@ -415,30 +422,37 @@ void GDAPI godot_pool_color_array_read_access_destroy(godot_pool_color_array_rea // write accessor functions // +godot_pool_byte_array_write_access GDAPI *godot_pool_byte_array_write_access_copy(const godot_pool_byte_array_write_access *p_other); uint8_t GDAPI *godot_pool_byte_array_write_access_ptr(const godot_pool_byte_array_write_access *p_write); void GDAPI godot_pool_byte_array_write_access_operator_assign(godot_pool_byte_array_write_access *p_write, godot_pool_byte_array_write_access *p_other); void GDAPI godot_pool_byte_array_write_access_destroy(godot_pool_byte_array_write_access *p_write); +godot_pool_int_array_write_access GDAPI *godot_pool_int_array_write_access_copy(const godot_pool_int_array_write_access *p_other); godot_int GDAPI *godot_pool_int_array_write_access_ptr(const godot_pool_int_array_write_access *p_write); void GDAPI godot_pool_int_array_write_access_operator_assign(godot_pool_int_array_write_access *p_write, godot_pool_int_array_write_access *p_other); void GDAPI godot_pool_int_array_write_access_destroy(godot_pool_int_array_write_access *p_write); +godot_pool_real_array_write_access GDAPI *godot_pool_real_array_write_access_copy(const godot_pool_real_array_write_access *p_other); godot_real GDAPI *godot_pool_real_array_write_access_ptr(const godot_pool_real_array_write_access *p_write); void GDAPI godot_pool_real_array_write_access_operator_assign(godot_pool_real_array_write_access *p_write, godot_pool_real_array_write_access *p_other); void GDAPI godot_pool_real_array_write_access_destroy(godot_pool_real_array_write_access *p_write); +godot_pool_string_array_write_access GDAPI *godot_pool_string_array_write_access_copy(const godot_pool_string_array_write_access *p_other); godot_string GDAPI *godot_pool_string_array_write_access_ptr(const godot_pool_string_array_write_access *p_write); void GDAPI godot_pool_string_array_write_access_operator_assign(godot_pool_string_array_write_access *p_write, godot_pool_string_array_write_access *p_other); void GDAPI godot_pool_string_array_write_access_destroy(godot_pool_string_array_write_access *p_write); +godot_pool_vector2_array_write_access GDAPI *godot_pool_vector2_array_write_access_copy(const godot_pool_vector2_array_write_access *p_other); godot_vector2 GDAPI *godot_pool_vector2_array_write_access_ptr(const godot_pool_vector2_array_write_access *p_write); void GDAPI godot_pool_vector2_array_write_access_operator_assign(godot_pool_vector2_array_write_access *p_write, godot_pool_vector2_array_write_access *p_other); void GDAPI godot_pool_vector2_array_write_access_destroy(godot_pool_vector2_array_write_access *p_write); +godot_pool_vector3_array_write_access GDAPI *godot_pool_vector3_array_write_access_copy(const godot_pool_vector3_array_write_access *p_other); godot_vector3 GDAPI *godot_pool_vector3_array_write_access_ptr(const godot_pool_vector3_array_write_access *p_write); void GDAPI godot_pool_vector3_array_write_access_operator_assign(godot_pool_vector3_array_write_access *p_write, godot_pool_vector3_array_write_access *p_other); void GDAPI godot_pool_vector3_array_write_access_destroy(godot_pool_vector3_array_write_access *p_write); +godot_pool_color_array_write_access GDAPI *godot_pool_color_array_write_access_copy(const godot_pool_color_array_write_access *p_other); godot_color GDAPI *godot_pool_color_array_write_access_ptr(const godot_pool_color_array_write_access *p_write); void GDAPI godot_pool_color_array_write_access_operator_assign(godot_pool_color_array_write_access *p_write, godot_pool_color_array_write_access *p_other); void GDAPI godot_pool_color_array_write_access_destroy(godot_pool_color_array_write_access *p_write); diff --git a/modules/gdnative/nativescript/nativescript.cpp b/modules/gdnative/nativescript/nativescript.cpp index cff5d9c9b..2216be025 100644 --- a/modules/gdnative/nativescript/nativescript.cpp +++ b/modules/gdnative/nativescript/nativescript.cpp @@ -798,11 +798,33 @@ NativeScriptLanguage *NativeScriptLanguage::singleton; void NativeScriptLanguage::_unload_stuff(bool p_reload) { for (Map<String, Map<StringName, NativeScriptDesc> >::Element *L = library_classes.front(); L; L = L->next()) { - if (p_reload && library_gdnatives[L->key()].is_valid() && !library_gdnatives[L->key()]->get_library()->is_reloadable()) { - continue; + String lib_path = L->key(); + Map<StringName, NativeScriptDesc> classes = L->get(); + + if (p_reload) { + + Map<String, Ref<GDNative> >::Element *E = library_gdnatives.find(lib_path); + Ref<GDNative> gdn; + + if (E) { + gdn = E->get(); + } + + bool should_reload = false; + + if (gdn.is_valid()) { + Ref<GDNativeLibrary> lib = gdn->get_library(); + if (lib.is_valid()) { + should_reload = lib->is_reloadable(); + } + } + + if (!should_reload) { + continue; + } } - for (Map<StringName, NativeScriptDesc>::Element *C = L->get().front(); C; C = C->next()) { + for (Map<StringName, NativeScriptDesc>::Element *C = classes.front(); C; C = C->next()) { // free property stuff first for (OrderedHashMap<StringName, NativeScriptDesc::Property>::Element P = C->get().properties.front(); P; P = P.next()) { @@ -1063,6 +1085,11 @@ void NativeScriptLanguage::unregister_script(NativeScript *script) { void NativeScriptLanguage::call_libraries_cb(const StringName &name) { // library_gdnatives is modified only from the main thread, so it's safe not to use mutex here for (Map<String, Ref<GDNative> >::Element *L = library_gdnatives.front(); L; L = L->next()) { + + if (L->get().is_null()) { + continue; + } + if (L->get()->is_initialized()) { void *proc_ptr; @@ -1125,6 +1152,10 @@ void NativeReloadNode::_notification(int p_what) { Ref<GDNative> gdn = L->get(); + if (gdn.is_null()) { + continue; + } + if (!gdn->get_library()->is_reloadable()) { continue; } @@ -1149,6 +1180,10 @@ void NativeReloadNode::_notification(int p_what) { Ref<GDNative> gdn = L->get(); + if (gdn.is_null()) { + continue; + } + if (!gdn->get_library()->is_reloadable()) { continue; } diff --git a/modules/gdnative/pluginscript/pluginscript_instance.cpp b/modules/gdnative/pluginscript/pluginscript_instance.cpp index 52d112bc9..931ab0bfe 100644 --- a/modules/gdnative/pluginscript/pluginscript_instance.cpp +++ b/modules/gdnative/pluginscript/pluginscript_instance.cpp @@ -84,8 +84,9 @@ Variant PluginScriptInstance::call(const StringName &p_method, const Variant **p godot_variant ret = _desc->call_method( _data, (godot_string_name *)&p_method, (const godot_variant **)p_args, p_argcount, (godot_variant_call_error *)&r_error); - Variant *var_ret = (Variant *)&ret; - return *var_ret; + Variant var_ret = *(Variant *)&ret; + godot_variant_destroy(&ret); + return var_ret; } #if 0 // TODO: Don't rely on default implementations provided by ScriptInstance ? diff --git a/modules/gdnative/pluginscript/pluginscript_language.cpp b/modules/gdnative/pluginscript/pluginscript_language.cpp index 8101ebc6f..8018178bd 100644 --- a/modules/gdnative/pluginscript/pluginscript_language.cpp +++ b/modules/gdnative/pluginscript/pluginscript_language.cpp @@ -103,6 +103,7 @@ Ref<Script> PluginScriptLanguage::get_template(const String &p_class_name, const if (_desc.get_template_source_code) { godot_string src = _desc.get_template_source_code(_data, (godot_string *)&p_class_name, (godot_string *)&p_base_class_name); script->set_source_code(*(String *)&src); + godot_string_destroy(&src); } return script; } diff --git a/modules/gdnative/pluginscript/pluginscript_script.cpp b/modules/gdnative/pluginscript/pluginscript_script.cpp index b4525ff8a..8290582b9 100644 --- a/modules/gdnative/pluginscript/pluginscript_script.cpp +++ b/modules/gdnative/pluginscript/pluginscript_script.cpp @@ -131,13 +131,10 @@ ScriptInstance *PluginScript::instance_create(Object *p_this) { #endif } - PluginScript *top = this; - // TODO: can be optimized by storing a PluginScript::_base_parent direct pointer - while (top->_ref_base_parent.is_valid()) - top = top->_ref_base_parent.ptr(); - if (top->_native_parent) { - if (!ClassDB::is_parent_class(p_this->get_class_name(), top->_native_parent)) { - String msg = "Script inherits from native type '" + String(top->_native_parent) + "', so it can't be instanced in object of type: '" + p_this->get_class() + "'"; + StringName base_type = get_instance_base_type(); + if (base_type) { + if (!ClassDB::is_parent_class(p_this->get_class_name(), base_type)) { + String msg = "Script inherits from native type '" + String(base_type) + "', so it can't be instanced in object of type: '" + p_this->get_class() + "'"; // TODO: implement PluginscriptLanguage::debug_break_parse // if (ScriptDebugger::get_singleton()) { // _language->debug_break_parse(get_path(), 0, msg); @@ -210,29 +207,31 @@ Error PluginScript::reload(bool p_keep_state) { // TODO: GDscript uses `ScriptDebugger` here to jump into the parsing error return err; } + + // Script's parent is passed as base_name which can make reference to a + // ClassDB name (i.e. `Node2D`) or a ressource path (i.e. `res://foo/bar.gd`) + StringName *base_name = (StringName *)&manifest.base; + if (*base_name) { + + if (ClassDB::class_exists(*base_name)) { + _native_parent = *base_name; + } else { + Ref<Script> res = ResourceLoader::load(*base_name); + if (res.is_valid()) { + _ref_base_parent = res; + } else { + String name = *(StringName *)&manifest.name; + ERR_EXPLAIN(_path + ": Script '" + name + "' has an invalid parent '" + *base_name + "'."); + ERR_FAIL_V(ERR_PARSE_ERROR); + } + } + } + _valid = true; // Use the manifest to configure this script object _data = manifest.data; _name = *(StringName *)&manifest.name; _tool = manifest.is_tool; - // Base name is either another PluginScript or a regular class accessible - // through ClassDB - StringName *base_name = (StringName *)&manifest.base; - for (SelfList<PluginScript> *e = _language->_script_list.first(); e != NULL; e = e->next()) { - if (e->self()->_name == *base_name) { - // Found you, base is a PluginScript ! - _ref_base_parent = Ref<PluginScript>(e->self()); - break; - } - } - if (!_ref_base_parent.is_valid()) { - // Base is a native ClassDB - if (!ClassDB::class_exists(*base_name)) { - ERR_EXPLAIN("Unknown script '" + String(_name) + "' parent '" + String(*base_name) + "'."); - ERR_FAIL_V(ERR_PARSE_ERROR); - } - _native_parent = *base_name; - } Dictionary *members = (Dictionary *)&manifest.member_lines; for (const Variant *key = members->next(); key != NULL; key = members->next(key)) { diff --git a/modules/gdnative/pluginscript/pluginscript_script.h b/modules/gdnative/pluginscript/pluginscript_script.h index 6b343ad84..6729eecb3 100644 --- a/modules/gdnative/pluginscript/pluginscript_script.h +++ b/modules/gdnative/pluginscript/pluginscript_script.h @@ -53,7 +53,7 @@ private: bool _tool; bool _valid; - Ref<PluginScript> _ref_base_parent; + Ref<Script> _ref_base_parent; StringName _native_parent; SelfList<PluginScript> _script_list; diff --git a/modules/gdscript/doc_classes/GDScript.xml b/modules/gdscript/doc_classes/GDScript.xml index 31328ab83..ba7d56a3b 100644 --- a/modules/gdscript/doc_classes/GDScript.xml +++ b/modules/gdscript/doc_classes/GDScript.xml @@ -8,7 +8,7 @@ [method new] creates a new instance of the script. [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes. </description> <tutorials> - http://docs.godotengine.org/en/3.0/learning/scripting/gdscript/index.html + http://docs.godotengine.org/en/3.0/learning/scripting/gdscript/index.html </tutorials> <demos> </demos> diff --git a/modules/gridmap/doc_classes/GridMap.xml b/modules/gridmap/doc_classes/GridMap.xml index 788aa5c6b..0073631a8 100644 --- a/modules/gridmap/doc_classes/GridMap.xml +++ b/modules/gridmap/doc_classes/GridMap.xml @@ -10,7 +10,7 @@ A GridMap is split into a sparse collection of octants for efficient rendering and physics processing. Every octant has the same dimensions and can contain several cells. </description> <tutorials> - http://docs.godotengine.org/en/3.0/learning/features/3d/using_gridmaps.html + http://docs.godotengine.org/en/3.0/learning/features/3d/using_gridmaps.html </tutorials> <demos> </demos> diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp index 7df2043a6..aee248136 100644 --- a/modules/mono/csharp_script.cpp +++ b/modules/mono/csharp_script.cpp @@ -1044,7 +1044,7 @@ bool CSharpInstance::get(const StringName &p_name, Variant &r_ret) const { if (field) { MonoObject *value = field->get_value(mono_object); - r_ret = GDMonoMarshal::mono_object_to_variant(value, field->get_type()); + r_ret = GDMonoMarshal::mono_object_to_variant(value); return true; } @@ -1057,7 +1057,7 @@ bool CSharpInstance::get(const StringName &p_name, Variant &r_ret) const { r_ret = Variant(); GDMonoUtils::print_unhandled_exception(exc); } else { - r_ret = GDMonoMarshal::mono_object_to_variant(value, property->get_type()); + r_ret = GDMonoMarshal::mono_object_to_variant(value); } return true; } @@ -1147,7 +1147,7 @@ Variant CSharpInstance::call(const StringName &p_method, const Variant **p_args, MonoObject *return_value = method->invoke(mono_object, p_args); if (return_value) { - return GDMonoMarshal::mono_object_to_variant(return_value, method->get_return_type()); + return GDMonoMarshal::mono_object_to_variant(return_value); } else { return Variant(); } @@ -1633,7 +1633,7 @@ Variant CSharpScript::call(const StringName &p_method, const Variant **p_args, i MonoObject *result = method->invoke(NULL, p_args); if (result) { - return GDMonoMarshal::mono_object_to_variant(result, method->get_return_type()); + return GDMonoMarshal::mono_object_to_variant(result); } else { return Variant(); } diff --git a/modules/mono/mono_gd/gd_mono_marshal.cpp b/modules/mono/mono_gd/gd_mono_marshal.cpp index 1ec8f41c9..aa1a8e39c 100644 --- a/modules/mono/mono_gd/gd_mono_marshal.cpp +++ b/modules/mono/mono_gd/gd_mono_marshal.cpp @@ -459,11 +459,7 @@ Variant mono_object_to_variant(MonoObject *p_obj) { type.type_encoding = mono_type_get_type(raw_type); type.type_class = tclass; - return mono_object_to_variant(p_obj, type); -} - -Variant mono_object_to_variant(MonoObject *p_obj, const ManagedType &p_type) { - switch (p_type.type_encoding) { + switch (type.type_encoding) { case MONO_TYPE_BOOLEAN: return (bool)unbox<MonoBoolean>(p_obj); @@ -497,7 +493,7 @@ Variant mono_object_to_variant(MonoObject *p_obj, const ManagedType &p_type) { } break; case MONO_TYPE_VALUETYPE: { - GDMonoClass *tclass = p_type.type_class; + GDMonoClass *tclass = type.type_class; if (tclass == CACHED_CLASS(Vector2)) RETURN_UNBOXED_STRUCT(Vector2, p_obj); @@ -535,7 +531,7 @@ Variant mono_object_to_variant(MonoObject *p_obj, const ManagedType &p_type) { case MONO_TYPE_ARRAY: case MONO_TYPE_SZARRAY: { - MonoArrayType *array_type = mono_type_get_array_type(GDMonoClass::get_raw_type(p_type.type_class)); + MonoArrayType *array_type = mono_type_get_array_type(GDMonoClass::get_raw_type(type.type_class)); if (array_type->eklass == CACHED_CLASS_RAW(MonoObject)) return mono_array_to_Array((MonoArray *)p_obj); @@ -566,7 +562,7 @@ Variant mono_object_to_variant(MonoObject *p_obj, const ManagedType &p_type) { } break; case MONO_TYPE_CLASS: { - GDMonoClass *type_class = p_type.type_class; + GDMonoClass *type_class = type.type_class; // GodotObject if (CACHED_CLASS(GodotObject)->is_assignable_from(type_class)) { @@ -586,14 +582,14 @@ Variant mono_object_to_variant(MonoObject *p_obj, const ManagedType &p_type) { } break; case MONO_TYPE_GENERICINST: { - if (CACHED_RAW_MONO_CLASS(Dictionary) == p_type.type_class->get_mono_ptr()) { + if (CACHED_RAW_MONO_CLASS(Dictionary) == type.type_class->get_mono_ptr()) { return mono_object_to_Dictionary(p_obj); } } break; } ERR_EXPLAIN(String() + "Attempted to convert an unmarshallable managed type to Variant. Name: \'" + - p_type.type_class->get_name() + "\' Encoding: " + itos(p_type.type_encoding)); + type.type_class->get_name() + "\' Encoding: " + itos(type.type_encoding)); ERR_FAIL_V(Variant()); } diff --git a/modules/mono/mono_gd/gd_mono_marshal.h b/modules/mono/mono_gd/gd_mono_marshal.h index 727b9fa23..6572408ab 100644 --- a/modules/mono/mono_gd/gd_mono_marshal.h +++ b/modules/mono/mono_gd/gd_mono_marshal.h @@ -102,7 +102,6 @@ _FORCE_INLINE_ MonoObject *variant_to_mono_object(Variant p_var) { } Variant mono_object_to_variant(MonoObject *p_obj); -Variant mono_object_to_variant(MonoObject *p_obj, const ManagedType &p_type); // Array diff --git a/modules/visual_script/doc_classes/VisualScript.xml b/modules/visual_script/doc_classes/VisualScript.xml index fa94e9ef8..a037344c7 100644 --- a/modules/visual_script/doc_classes/VisualScript.xml +++ b/modules/visual_script/doc_classes/VisualScript.xml @@ -9,7 +9,7 @@ You are most likely to use this class via the Visual Script editor or when writing plugins for it. </description> <tutorials> - http://docs.godotengine.org/en/3.0/learning/scripting/visual_script/index.html + http://docs.godotengine.org/en/3.0/learning/scripting/visual_script/index.html </tutorials> <demos> </demos> |
