| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  gd_glue.cpp                                                          */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							|  |  |  | /*                      https://godotengine.org                          */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2020-01-01 11:16:22 +01:00
										 |  |  | /* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							|  |  |  | /* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md).   */ | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "gd_glue.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef MONO_GLUE_ENABLED
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "core/array.h"
 | 
					
						
							|  |  |  | #include "core/io/marshalls.h"
 | 
					
						
							|  |  |  | #include "core/os/os.h"
 | 
					
						
							|  |  |  | #include "core/ustring.h"
 | 
					
						
							|  |  |  | #include "core/variant.h"
 | 
					
						
							|  |  |  | #include "core/variant_parser.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | #include "../mono_gd/gd_mono_cache.h"
 | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | #include "../mono_gd/gd_mono_utils.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-26 16:52:42 +01:00
										 |  |  | MonoObject *godot_icall_GD_bytes2var(MonoArray *p_bytes, MonoBoolean p_allow_objects) { | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	Variant ret; | 
					
						
							| 
									
										
										
										
											2020-02-17 18:06:54 -03:00
										 |  |  | 	PackedByteArray varr = GDMonoMarshal::mono_array_to_PackedByteArray(p_bytes); | 
					
						
							|  |  |  | 	const uint8_t *r = varr.ptr(); | 
					
						
							| 
									
										
										
										
											2019-03-26 16:52:42 +01:00
										 |  |  | 	Error err = decode_variant(ret, r.ptr(), varr.size(), NULL, p_allow_objects); | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	if (err != OK) { | 
					
						
							|  |  |  | 		ret = RTR("Not enough bytes for decoding bytes, or invalid format."); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return GDMonoMarshal::variant_to_mono_object(ret); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-19 00:35:19 +01:00
										 |  |  | MonoObject *godot_icall_GD_convert(MonoObject *p_what, int32_t p_type) { | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	Variant what = GDMonoMarshal::mono_object_to_variant(p_what); | 
					
						
							|  |  |  | 	const Variant *args[1] = { &what }; | 
					
						
							|  |  |  | 	Variant::CallError ce; | 
					
						
							|  |  |  | 	Variant ret = Variant::construct(Variant::Type(p_type), args, 1, ce); | 
					
						
							|  |  |  | 	ERR_FAIL_COND_V(ce.error != Variant::CallError::CALL_OK, NULL); | 
					
						
							|  |  |  | 	return GDMonoMarshal::variant_to_mono_object(ret); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int godot_icall_GD_hash(MonoObject *p_var) { | 
					
						
							|  |  |  | 	return GDMonoMarshal::mono_object_to_variant(p_var).hash(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-19 00:35:19 +01:00
										 |  |  | MonoObject *godot_icall_GD_instance_from_id(uint64_t p_instance_id) { | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	return GDMonoUtils::unmanaged_get_managed(ObjectDB::get_instance(p_instance_id)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void godot_icall_GD_print(MonoArray *p_what) { | 
					
						
							|  |  |  | 	String str; | 
					
						
							| 
									
										
										
										
											2020-01-02 13:54:16 +01:00
										 |  |  | 	int length = mono_array_length(p_what); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for (int i = 0; i < length; i++) { | 
					
						
							|  |  |  | 		MonoObject *elem = mono_array_get(p_what, MonoObject *, i); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		MonoException *exc = NULL; | 
					
						
							|  |  |  | 		String elem_str = GDMonoMarshal::mono_object_to_variant_string(elem, &exc); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (exc) { | 
					
						
							|  |  |  | 			GDMonoUtils::set_pending_exception(exc); | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		str += elem_str; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	print_line(str); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void godot_icall_GD_printerr(MonoArray *p_what) { | 
					
						
							| 
									
										
										
										
											2020-01-02 13:54:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	String str; | 
					
						
							| 
									
										
										
										
											2020-01-02 13:54:16 +01:00
										 |  |  | 	int length = mono_array_length(p_what); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for (int i = 0; i < length; i++) { | 
					
						
							|  |  |  | 		MonoObject *elem = mono_array_get(p_what, MonoObject *, i); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		MonoException *exc = NULL; | 
					
						
							|  |  |  | 		String elem_str = GDMonoMarshal::mono_object_to_variant_string(elem, &exc); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (exc) { | 
					
						
							|  |  |  | 			GDMonoUtils::set_pending_exception(exc); | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		str += elem_str; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-02 13:13:22 +01:00
										 |  |  | 	print_error(str); | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void godot_icall_GD_printraw(MonoArray *p_what) { | 
					
						
							|  |  |  | 	String str; | 
					
						
							| 
									
										
										
										
											2020-01-02 13:54:16 +01:00
										 |  |  | 	int length = mono_array_length(p_what); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for (int i = 0; i < length; i++) { | 
					
						
							|  |  |  | 		MonoObject *elem = mono_array_get(p_what, MonoObject *, i); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		MonoException *exc = NULL; | 
					
						
							|  |  |  | 		String elem_str = GDMonoMarshal::mono_object_to_variant_string(elem, &exc); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (exc) { | 
					
						
							|  |  |  | 			GDMonoUtils::set_pending_exception(exc); | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		str += elem_str; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	OS::get_singleton()->print("%s", str.utf8().get_data()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void godot_icall_GD_prints(MonoArray *p_what) { | 
					
						
							|  |  |  | 	String str; | 
					
						
							| 
									
										
										
										
											2020-01-02 13:54:16 +01:00
										 |  |  | 	int length = mono_array_length(p_what); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for (int i = 0; i < length; i++) { | 
					
						
							|  |  |  | 		MonoObject *elem = mono_array_get(p_what, MonoObject *, i); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		MonoException *exc = NULL; | 
					
						
							|  |  |  | 		String elem_str = GDMonoMarshal::mono_object_to_variant_string(elem, &exc); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (exc) { | 
					
						
							|  |  |  | 			GDMonoUtils::set_pending_exception(exc); | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 		if (i) | 
					
						
							|  |  |  | 			str += " "; | 
					
						
							| 
									
										
										
										
											2020-01-02 13:54:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		str += elem_str; | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-01-02 13:54:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	print_line(str); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void godot_icall_GD_printt(MonoArray *p_what) { | 
					
						
							|  |  |  | 	String str; | 
					
						
							| 
									
										
										
										
											2020-01-02 13:54:16 +01:00
										 |  |  | 	int length = mono_array_length(p_what); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for (int i = 0; i < length; i++) { | 
					
						
							|  |  |  | 		MonoObject *elem = mono_array_get(p_what, MonoObject *, i); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		MonoException *exc = NULL; | 
					
						
							|  |  |  | 		String elem_str = GDMonoMarshal::mono_object_to_variant_string(elem, &exc); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (exc) { | 
					
						
							|  |  |  | 			GDMonoUtils::set_pending_exception(exc); | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 		if (i) | 
					
						
							|  |  |  | 			str += "\t"; | 
					
						
							| 
									
										
										
										
											2020-01-02 13:54:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		str += elem_str; | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2020-01-02 13:54:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	print_line(str); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-25 20:24:48 +02:00
										 |  |  | float godot_icall_GD_randf() { | 
					
						
							| 
									
										
										
										
											2019-02-19 00:35:19 +01:00
										 |  |  | 	return Math::randf(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uint32_t godot_icall_GD_randi() { | 
					
						
							|  |  |  | 	return Math::rand(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void godot_icall_GD_randomize() { | 
					
						
							|  |  |  | 	Math::randomize(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | double godot_icall_GD_rand_range(double from, double to) { | 
					
						
							|  |  |  | 	return Math::random(from, to); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uint32_t godot_icall_GD_rand_seed(uint64_t seed, uint64_t *newSeed) { | 
					
						
							|  |  |  | 	int ret = Math::rand_from_seed(&seed); | 
					
						
							|  |  |  | 	*newSeed = seed; | 
					
						
							|  |  |  | 	return ret; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void godot_icall_GD_seed(uint64_t p_seed) { | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	Math::seed(p_seed); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MonoString *godot_icall_GD_str(MonoArray *p_what) { | 
					
						
							|  |  |  | 	String str; | 
					
						
							|  |  |  | 	Array what = GDMonoMarshal::mono_array_to_Array(p_what); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for (int i = 0; i < what.size(); i++) { | 
					
						
							|  |  |  | 		String os = what[i].operator String(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (i == 0) | 
					
						
							|  |  |  | 			str = os; | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			str += os; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return GDMonoMarshal::mono_string_from_godot(str); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MonoObject *godot_icall_GD_str2var(MonoString *p_str) { | 
					
						
							|  |  |  | 	Variant ret; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	VariantParser::StreamString ss; | 
					
						
							|  |  |  | 	ss.s = GDMonoMarshal::mono_string_to_godot(p_str); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	String errs; | 
					
						
							|  |  |  | 	int line; | 
					
						
							|  |  |  | 	Error err = VariantParser::parse(&ss, ret, errs, line); | 
					
						
							|  |  |  | 	if (err != OK) { | 
					
						
							| 
									
										
										
										
											2019-08-09 03:39:45 +02:00
										 |  |  | 		String err_str = "Parse error at line " + itos(line) + ": " + errs + "."; | 
					
						
							| 
									
										
										
										
											2019-11-06 17:03:04 +01:00
										 |  |  | 		ERR_PRINT(err_str); | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 		ret = err_str; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return GDMonoMarshal::variant_to_mono_object(ret); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-28 20:01:54 +01:00
										 |  |  | MonoBoolean godot_icall_GD_type_exists(MonoString *p_type) { | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	return ClassDB::class_exists(GDMonoMarshal::mono_string_to_godot(p_type)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-31 15:30:01 -03:00
										 |  |  | void godot_icall_GD_pusherror(MonoString *p_str) { | 
					
						
							| 
									
										
										
										
											2019-11-06 17:03:04 +01:00
										 |  |  | 	ERR_PRINT(GDMonoMarshal::mono_string_to_godot(p_str)); | 
					
						
							| 
									
										
										
										
											2018-10-25 20:32:50 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-31 15:30:01 -03:00
										 |  |  | void godot_icall_GD_pushwarning(MonoString *p_str) { | 
					
						
							| 
									
										
										
										
											2019-11-07 09:44:15 +01:00
										 |  |  | 	WARN_PRINT(GDMonoMarshal::mono_string_to_godot(p_str)); | 
					
						
							| 
									
										
										
										
											2018-10-25 20:32:50 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-26 16:52:42 +01:00
										 |  |  | MonoArray *godot_icall_GD_var2bytes(MonoObject *p_var, MonoBoolean p_full_objects) { | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	Variant var = GDMonoMarshal::mono_object_to_variant(p_var); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-17 18:06:54 -03:00
										 |  |  | 	PackedByteArray barr; | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	int len; | 
					
						
							| 
									
										
										
										
											2019-03-26 16:52:42 +01:00
										 |  |  | 	Error err = encode_variant(var, NULL, len, p_full_objects); | 
					
						
							| 
									
										
										
										
											2019-08-09 03:39:45 +02:00
										 |  |  | 	ERR_FAIL_COND_V_MSG(err != OK, NULL, "Unexpected error encoding variable to bytes, likely unserializable type found (Object or RID)."); | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	barr.resize(len); | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2020-02-17 18:06:54 -03:00
										 |  |  | 		uint8_t *w = barr.ptrw(); | 
					
						
							| 
									
										
										
										
											2019-03-26 16:52:42 +01:00
										 |  |  | 		encode_variant(var, w.ptr(), len, p_full_objects); | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-17 18:06:54 -03:00
										 |  |  | 	return GDMonoMarshal::PackedByteArray_to_mono_array(barr); | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MonoString *godot_icall_GD_var2str(MonoObject *p_var) { | 
					
						
							|  |  |  | 	String vars; | 
					
						
							|  |  |  | 	VariantWriter::write_to_string(GDMonoMarshal::mono_object_to_variant(p_var), vars); | 
					
						
							|  |  |  | 	return GDMonoMarshal::mono_string_from_godot(vars); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-18 04:08:24 +02:00
										 |  |  | MonoObject *godot_icall_DefaultGodotTaskScheduler() { | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 	return GDMonoCache::cached_data.task_scheduler_handle->get_target(); | 
					
						
							| 
									
										
										
										
											2019-07-18 04:08:24 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | void godot_register_gd_icalls() { | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_bytes2var", (void *)godot_icall_GD_bytes2var); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_convert", (void *)godot_icall_GD_convert); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_hash", (void *)godot_icall_GD_hash); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_instance_from_id", (void *)godot_icall_GD_instance_from_id); | 
					
						
							| 
									
										
										
										
											2018-10-31 15:30:01 -03:00
										 |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_pusherror", (void *)godot_icall_GD_pusherror); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_pushwarning", (void *)godot_icall_GD_pushwarning); | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_print", (void *)godot_icall_GD_print); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_printerr", (void *)godot_icall_GD_printerr); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_printraw", (void *)godot_icall_GD_printraw); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_prints", (void *)godot_icall_GD_prints); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_printt", (void *)godot_icall_GD_printt); | 
					
						
							| 
									
										
										
										
											2019-02-19 00:35:19 +01:00
										 |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_randf", (void *)godot_icall_GD_randf); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_randi", (void *)godot_icall_GD_randi); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_randomize", (void *)godot_icall_GD_randomize); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_rand_range", (void *)godot_icall_GD_rand_range); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_rand_seed", (void *)godot_icall_GD_rand_seed); | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_seed", (void *)godot_icall_GD_seed); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_str", (void *)godot_icall_GD_str); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_str2var", (void *)godot_icall_GD_str2var); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_type_exists", (void *)godot_icall_GD_type_exists); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_var2bytes", (void *)godot_icall_GD_var2bytes); | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.GD::godot_icall_GD_var2str", (void *)godot_icall_GD_var2str); | 
					
						
							| 
									
										
										
										
											2019-07-18 04:08:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Dispatcher
 | 
					
						
							|  |  |  | 	mono_add_internal_call("Godot.Dispatcher::godot_icall_DefaultGodotTaskScheduler", (void *)godot_icall_DefaultGodotTaskScheduler); | 
					
						
							| 
									
										
										
										
											2018-09-04 05:40:41 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // MONO_GLUE_ENABLED
 |