| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  gd_script.h                                                          */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							| 
									
										
										
										
											2017-08-27 14:16:55 +02:00
										 |  |  | /*                      https://godotengine.org                          */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2017-01-01 22:01:57 +01:00
										 |  |  | /* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							| 
									
										
										
										
											2017-04-08 00:11:42 +02:00
										 |  |  | /* Copyright (c) 2014-2017 Godot Engine contributors (cf. AUTHORS.md)    */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03: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.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | #ifndef GD_SCRIPT_H
 | 
					
						
							|  |  |  | #define GD_SCRIPT_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | #include "gd_function.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #include "io/resource_loader.h"
 | 
					
						
							|  |  |  | #include "io/resource_saver.h"
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | #include "script_language.h"
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | class GDNativeClass : public Reference { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	GDCLASS(GDNativeClass, Reference); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	StringName name; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | protected: | 
					
						
							|  |  |  | 	bool _get(const StringName &p_name, Variant &r_ret) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	static void _bind_methods(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	_FORCE_INLINE_ const StringName &get_name() const { return name; } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	Variant _new(); | 
					
						
							|  |  |  | 	Object *instance(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	GDNativeClass(const StringName &p_name); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class GDScript : public Script { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	GDCLASS(GDScript, Script); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	bool tool; | 
					
						
							|  |  |  | 	bool valid; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-27 22:54:32 -03:00
										 |  |  | 	struct MemberInfo { | 
					
						
							|  |  |  | 		int index; | 
					
						
							|  |  |  | 		StringName setter; | 
					
						
							|  |  |  | 		StringName getter; | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 		ScriptInstance::RPCMode rpc_mode; | 
					
						
							| 
									
										
										
										
											2014-10-27 22:54:32 -03:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2014-06-16 10:22:26 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	friend class GDInstance; | 
					
						
							|  |  |  | 	friend class GDFunction; | 
					
						
							|  |  |  | 	friend class GDCompiler; | 
					
						
							|  |  |  | 	friend class GDFunctions; | 
					
						
							|  |  |  | 	friend class GDScriptLanguage; | 
					
						
							| 
									
										
										
										
											2014-10-27 22:54:32 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-01 11:34:10 -03:00
										 |  |  | 	Variant _static_ref; //used for static call
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	Ref<GDNativeClass> native; | 
					
						
							|  |  |  | 	Ref<GDScript> base; | 
					
						
							|  |  |  | 	GDScript *_base; //fast pointer access
 | 
					
						
							|  |  |  | 	GDScript *_owner; //for subclasses
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Set<StringName> members; //members are just indices to the instanced script.
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Map<StringName, Variant> constants; | 
					
						
							|  |  |  | 	Map<StringName, GDFunction *> member_functions; | 
					
						
							|  |  |  | 	Map<StringName, MemberInfo> member_indices; //members are just indices to the instanced script.
 | 
					
						
							|  |  |  | 	Map<StringName, Ref<GDScript> > subclasses; | 
					
						
							|  |  |  | 	Map<StringName, Vector<StringName> > _signals; | 
					
						
							| 
									
										
										
										
											2016-09-12 10:52:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #ifdef TOOLS_ENABLED
 | 
					
						
							| 
									
										
										
										
											2014-12-07 02:04:20 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Map<StringName, int> member_lines; | 
					
						
							| 
									
										
										
										
											2016-09-12 10:52:29 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Map<StringName, Variant> member_default_values; | 
					
						
							| 
									
										
										
										
											2014-12-07 02:04:20 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	List<PropertyInfo> members_cache; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Map<StringName, Variant> member_default_values_cache; | 
					
						
							| 
									
										
										
										
											2014-12-07 02:04:20 -03:00
										 |  |  | 	Ref<GDScript> base_cache; | 
					
						
							|  |  |  | 	Set<ObjectID> inheriters_cache; | 
					
						
							|  |  |  | 	bool source_changed_cache; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void _update_exports_values(Map<StringName, Variant> &values, List<PropertyInfo> &propnames); | 
					
						
							| 
									
										
										
										
											2014-12-07 02:04:20 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Map<StringName, PropertyInfo> member_info; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	GDFunction *initializer; //direct pointer to _init , faster to locate
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	int subclass_count; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Set<Object *> instances; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	//exported members
 | 
					
						
							|  |  |  | 	String source; | 
					
						
							|  |  |  | 	String path; | 
					
						
							|  |  |  | 	String name; | 
					
						
							| 
									
										
										
										
											2016-06-01 20:22:02 -03:00
										 |  |  | 	SelfList<GDScript> script_list; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	GDInstance *_create_instance(const Variant **p_args, int p_argcount, Object *p_owner, bool p_isref, Variant::CallError &r_error); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void _set_subclass_path(Ref<GDScript> &p_sc, const String &p_path); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef TOOLS_ENABLED
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Set<PlaceHolderScriptInstance *> placeholders; | 
					
						
							| 
									
										
										
										
											2014-12-07 02:04:20 -03:00
										 |  |  | 	//void _update_placeholder(PlaceHolderScriptInstance *p_placeholder);
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-20 22:37:48 -03:00
										 |  |  | #ifdef DEBUG_ENABLED
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Map<ObjectID, List<Pair<StringName, Variant> > > pending_reload_state; | 
					
						
							| 
									
										
										
										
											2014-02-15 21:16:33 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-20 22:37:48 -03:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2014-10-12 02:13:22 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-07 02:04:20 -03:00
										 |  |  | 	bool _update_exports(); | 
					
						
							| 
									
										
										
										
											2014-10-12 02:13:22 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | protected: | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	bool _get(const StringName &p_name, Variant &r_ret) const; | 
					
						
							|  |  |  | 	bool _set(const StringName &p_name, const Variant &p_value); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	void _get_property_list(List<PropertyInfo> *p_properties) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error); | 
					
						
							| 
									
										
										
										
											2017-01-14 12:26:56 +01:00
										 |  |  | 	//void call_multilevel(const StringName& p_method,const Variant** p_args,int p_argcount);
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	static void _bind_methods(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-12-16 22:31:57 -03:00
										 |  |  | 	bool is_valid() const { return valid; } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	const Map<StringName, Ref<GDScript> > &get_subclasses() const { return subclasses; } | 
					
						
							|  |  |  | 	const Map<StringName, Variant> &get_constants() const { return constants; } | 
					
						
							|  |  |  | 	const Set<StringName> &get_members() const { return members; } | 
					
						
							|  |  |  | 	const Map<StringName, GDFunction *> &get_member_functions() const { return member_functions; } | 
					
						
							|  |  |  | 	const Ref<GDNativeClass> &get_native() const { return native; } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual bool has_script_signal(const StringName &p_signal) const; | 
					
						
							| 
									
										
										
										
											2015-06-24 13:29:23 -03:00
										 |  |  | 	virtual void get_script_signal_list(List<MethodInfo> *r_signals) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	bool is_tool() const { return tool; } | 
					
						
							|  |  |  | 	Ref<GDScript> get_base() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	const Map<StringName, MemberInfo> &debug_get_member_indices() const { return member_indices; } | 
					
						
							|  |  |  | 	const Map<StringName, GDFunction *> &debug_get_member_functions() const; //this is debug only
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	StringName debug_get_member_by_index(int p_idx) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Variant _new(const Variant **p_args, int p_argcount, Variant::CallError &r_error); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual bool can_instance() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-25 17:45:20 -03:00
										 |  |  | 	virtual Ref<Script> get_base_script() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual StringName get_instance_base_type() const; // this may not work in all scripts, will return empty if so
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual ScriptInstance *instance_create(Object *p_this); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual bool instance_has(const Object *p_this) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual bool has_source_code() const; | 
					
						
							|  |  |  | 	virtual String get_source_code() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual void set_source_code(const String &p_code); | 
					
						
							| 
									
										
										
										
											2014-09-22 00:50:48 -03:00
										 |  |  | 	virtual void update_exports(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual Error reload(bool p_keep_state = false); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	virtual String get_node_type() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void set_script_path(const String &p_path) { path = p_path; } //because subclasses need a path too...
 | 
					
						
							|  |  |  | 	Error load_source_code(const String &p_path); | 
					
						
							|  |  |  | 	Error load_byte_code(const String &p_path); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-30 11:28:43 -03:00
										 |  |  | 	Vector<uint8_t> get_as_byte_code() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	bool get_property_default_value(const StringName &p_property, Variant &r_value) const; | 
					
						
							| 
									
										
										
										
											2016-01-02 20:17:31 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 	virtual void get_script_method_list(List<MethodInfo> *p_list) const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual bool has_method(const StringName &p_method) const; | 
					
						
							|  |  |  | 	virtual MethodInfo get_method_info(const StringName &p_method) const; | 
					
						
							| 
									
										
										
										
											2016-08-02 19:11:05 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-23 19:29:07 -03:00
										 |  |  | 	virtual void get_script_property_list(List<PropertyInfo> *p_list) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual ScriptLanguage *get_language() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual int get_member_line(const StringName &p_member) const { | 
					
						
							| 
									
										
										
										
											2016-09-12 10:52:29 -03:00
										 |  |  | #ifdef TOOLS_ENABLED
 | 
					
						
							|  |  |  | 		if (member_lines.has(p_member)) | 
					
						
							|  |  |  | 			return member_lines[p_member]; | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 			return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	GDScript(); | 
					
						
							| 
									
										
										
										
											2016-05-21 21:18:16 -03:00
										 |  |  | 	~GDScript(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class GDInstance : public ScriptInstance { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	friend class GDScript; | 
					
						
							|  |  |  | 	friend class GDFunction; | 
					
						
							|  |  |  | 	friend class GDFunctions; | 
					
						
							|  |  |  | 	friend class GDCompiler; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	Object *owner; | 
					
						
							|  |  |  | 	Ref<GDScript> script; | 
					
						
							| 
									
										
										
										
											2016-06-01 20:22:02 -03:00
										 |  |  | #ifdef DEBUG_ENABLED
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Map<StringName, int> member_indices_cache; //used only for hot script reloading
 | 
					
						
							| 
									
										
										
										
											2016-06-01 20:22:02 -03:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	Vector<Variant> members; | 
					
						
							|  |  |  | 	bool base_ref; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void _ml_call_reversed(GDScript *sptr, const StringName &p_method, const Variant **p_args, int p_argcount); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	_FORCE_INLINE_ Object *get_owner() { return owner; } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual bool set(const StringName &p_name, const Variant &p_value); | 
					
						
							|  |  |  | 	virtual bool get(const StringName &p_name, Variant &r_ret) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual void get_property_list(List<PropertyInfo> *p_properties) const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual Variant::Type get_property_type(const StringName &p_name, bool *r_is_valid = NULL) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	virtual void get_method_list(List<MethodInfo> *p_list) const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual bool has_method(const StringName &p_method) const; | 
					
						
							|  |  |  | 	virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error); | 
					
						
							|  |  |  | 	virtual void call_multilevel(const StringName &p_method, const Variant **p_args, int p_argcount); | 
					
						
							|  |  |  | 	virtual void call_multilevel_reversed(const StringName &p_method, const Variant **p_args, int p_argcount); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 20:22:02 -03:00
										 |  |  | 	Variant debug_get_member_by_index(int p_idx) const { return members[p_idx]; } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	virtual void notification(int p_notification); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual Ref<Script> get_script() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual ScriptLanguage *get_language(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void set_path(const String &p_path); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 20:22:02 -03:00
										 |  |  | 	void reload_members(); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual RPCMode get_rpc_mode(const StringName &p_method) const; | 
					
						
							|  |  |  | 	virtual RPCMode get_rset_mode(const StringName &p_variable) const; | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	GDInstance(); | 
					
						
							|  |  |  | 	~GDInstance(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class GDScriptLanguage : public ScriptLanguage { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	static GDScriptLanguage *singleton; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Variant *_global_array; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	Vector<Variant> global_array; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	Map<StringName, int> globals; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 	struct CallLevel { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 		Variant *stack; | 
					
						
							|  |  |  | 		GDFunction *function; | 
					
						
							|  |  |  | 		GDInstance *instance; | 
					
						
							|  |  |  | 		int *ip; | 
					
						
							|  |  |  | 		int *line; | 
					
						
							|  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 	int _debug_parse_err_line; | 
					
						
							|  |  |  | 	String _debug_parse_err_file; | 
					
						
							|  |  |  | 	String _debug_error; | 
					
						
							|  |  |  | 	int _debug_call_stack_pos; | 
					
						
							|  |  |  | 	int _debug_max_call_stack; | 
					
						
							|  |  |  | 	CallLevel *_call_stack; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	void _add_global(const StringName &p_name, const Variant &p_value); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	friend class GDInstance; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-21 21:18:16 -03:00
										 |  |  | 	Mutex *lock; | 
					
						
							| 
									
										
										
										
											2016-06-01 20:22:02 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	friend class GDScript; | 
					
						
							| 
									
										
										
										
											2016-06-01 20:22:02 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	SelfList<GDScript>::List script_list; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	friend class GDFunction; | 
					
						
							| 
									
										
										
										
											2016-05-21 21:18:16 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	SelfList<GDFunction>::List function_list; | 
					
						
							|  |  |  | 	bool profiling; | 
					
						
							|  |  |  | 	uint64_t script_frame_time; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	int calls; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	bool debug_break(const String &p_error, bool p_allow_continue = true); | 
					
						
							|  |  |  | 	bool debug_break_parse(const String &p_file, int p_line, const String &p_error); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	_FORCE_INLINE_ void enter_function(GDInstance *p_instance, GDFunction *p_function, Variant *p_stack, int *p_ip, int *p_line) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-07 17:17:31 +07:00
										 |  |  | 		if (Thread::get_main_id() != Thread::get_caller_id()) | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 			return; //no support for other threads than main for now
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		if (ScriptDebugger::get_singleton()->get_lines_left() > 0 && ScriptDebugger::get_singleton()->get_depth() >= 0) | 
					
						
							|  |  |  | 			ScriptDebugger::get_singleton()->set_depth(ScriptDebugger::get_singleton()->get_depth() + 1); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 		if (_debug_call_stack_pos >= _debug_max_call_stack) { | 
					
						
							|  |  |  | 			//stack overflow
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			_debug_error = "Stack Overflow (Stack Size: " + itos(_debug_max_call_stack) + ")"; | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 			ScriptDebugger::get_singleton()->debug(this); | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		_call_stack[_debug_call_stack_pos].stack = p_stack; | 
					
						
							|  |  |  | 		_call_stack[_debug_call_stack_pos].instance = p_instance; | 
					
						
							|  |  |  | 		_call_stack[_debug_call_stack_pos].function = p_function; | 
					
						
							|  |  |  | 		_call_stack[_debug_call_stack_pos].ip = p_ip; | 
					
						
							|  |  |  | 		_call_stack[_debug_call_stack_pos].line = p_line; | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 		_debug_call_stack_pos++; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 	_FORCE_INLINE_ void exit_function() { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-07 17:17:31 +07:00
										 |  |  | 		if (Thread::get_main_id() != Thread::get_caller_id()) | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 			return; //no support for other threads than main for now
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		if (ScriptDebugger::get_singleton()->get_lines_left() > 0 && ScriptDebugger::get_singleton()->get_depth() >= 0) | 
					
						
							|  |  |  | 			ScriptDebugger::get_singleton()->set_depth(ScriptDebugger::get_singleton()->get_depth() - 1); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		if (_debug_call_stack_pos == 0) { | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 			_debug_error = "Stack Underflow (Engine Bug)"; | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 			ScriptDebugger::get_singleton()->debug(this); | 
					
						
							|  |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 		_debug_call_stack_pos--; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 09:47:32 -03:00
										 |  |  | 	virtual Vector<StackInfo> debug_get_current_stack_info() { | 
					
						
							| 
									
										
										
										
											2017-08-07 17:17:31 +07:00
										 |  |  | 		if (Thread::get_main_id() != Thread::get_caller_id()) | 
					
						
							| 
									
										
										
										
											2016-08-19 16:48:08 -03:00
										 |  |  | 			return Vector<StackInfo>(); | 
					
						
							| 
									
										
										
										
											2015-08-04 09:47:32 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		Vector<StackInfo> csi; | 
					
						
							|  |  |  | 		csi.resize(_debug_call_stack_pos); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		for (int i = 0; i < _debug_call_stack_pos; i++) { | 
					
						
							|  |  |  | 			csi[_debug_call_stack_pos - i - 1].line = _call_stack[i].line ? *_call_stack[i].line : 0; | 
					
						
							|  |  |  | 			csi[_debug_call_stack_pos - i - 1].script = Ref<GDScript>(_call_stack[i].function->get_script()); | 
					
						
							| 
									
										
										
										
											2015-08-04 09:47:32 -03:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		return csi; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	struct { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		StringName _init; | 
					
						
							|  |  |  | 		StringName _notification; | 
					
						
							|  |  |  | 		StringName _set; | 
					
						
							|  |  |  | 		StringName _get; | 
					
						
							|  |  |  | 		StringName _get_property_list; | 
					
						
							| 
									
										
										
										
											2014-02-15 21:16:33 -03:00
										 |  |  | 		StringName _script_source; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	} strings; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	_FORCE_INLINE_ int get_global_array_size() const { return global_array.size(); } | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	_FORCE_INLINE_ Variant *get_global_array() { return _global_array; } | 
					
						
							|  |  |  | 	_FORCE_INLINE_ const Map<StringName, int> &get_global_map() { return globals; } | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	_FORCE_INLINE_ static GDScriptLanguage *get_singleton() { return singleton; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual String get_name() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* LANGUAGE FUNCTIONS */ | 
					
						
							|  |  |  | 	virtual void init(); | 
					
						
							|  |  |  | 	virtual String get_type() const; | 
					
						
							|  |  |  | 	virtual String get_extension() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual Error execute_file(const String &p_path); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual void finish(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* EDITOR FUNCTIONS */ | 
					
						
							|  |  |  | 	virtual void get_reserved_words(List<String> *p_words) const; | 
					
						
							|  |  |  | 	virtual void get_comment_delimiters(List<String> *p_delimiters) const; | 
					
						
							|  |  |  | 	virtual void get_string_delimiters(List<String> *p_delimiters) const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual Ref<Script> get_template(const String &p_class_name, const String &p_base_class_name) const; | 
					
						
							| 
									
										
										
										
											2017-06-13 20:03:08 +00:00
										 |  |  | 	virtual bool is_using_templates(); | 
					
						
							|  |  |  | 	virtual void make_template(const String &p_class_name, const String &p_base_class_name, Ref<Script> &p_script); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual bool validate(const String &p_script, int &r_line_error, int &r_col_error, String &r_test_error, const String &p_path = "", List<String> *r_functions = NULL) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual Script *create_script() const; | 
					
						
							|  |  |  | 	virtual bool has_named_classes() const; | 
					
						
							| 
									
										
										
										
											2017-04-15 17:35:06 +02:00
										 |  |  | 	virtual bool can_inherit_from_file() { return true; } | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual int find_function(const String &p_function, const String &p_code) const; | 
					
						
							|  |  |  | 	virtual String make_function(const String &p_class, const String &p_name, const PoolStringArray &p_args) const; | 
					
						
							| 
									
										
										
										
											2017-08-24 00:06:56 -03:00
										 |  |  | 	virtual Error complete_code(const String &p_code, const String &p_base_path, Object *p_owner, List<String> *r_options, bool &r_forced, String &r_call_hint); | 
					
						
							| 
									
										
										
										
											2016-09-12 22:40:46 -03:00
										 |  |  | #ifdef TOOLS_ENABLED
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual Error lookup_code(const String &p_code, const String &p_symbol, const String &p_base_path, Object *p_owner, LookupResult &r_result); | 
					
						
							| 
									
										
										
										
											2016-09-12 22:40:46 -03:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2017-04-17 14:24:30 +01:00
										 |  |  | 	virtual String _get_indentation() const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual void auto_indent_code(String &p_code, int p_from_line, int p_to_line) const; | 
					
						
							|  |  |  | 	virtual void add_global_constant(const StringName &p_variable, const Variant &p_value); | 
					
						
							| 
									
										
										
										
											2016-01-13 08:27:14 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	/* DEBUGGER FUNCTIONS */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual String debug_get_error() const; | 
					
						
							|  |  |  | 	virtual int debug_get_stack_level_count() const; | 
					
						
							|  |  |  | 	virtual int debug_get_stack_level_line(int p_level) const; | 
					
						
							|  |  |  | 	virtual String debug_get_stack_level_function(int p_level) const; | 
					
						
							|  |  |  | 	virtual String debug_get_stack_level_source(int p_level) const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual void debug_get_stack_level_locals(int p_level, List<String> *p_locals, List<Variant> *p_values, int p_max_subitems = -1, int p_max_depth = -1); | 
					
						
							|  |  |  | 	virtual void debug_get_stack_level_members(int p_level, List<String> *p_members, List<Variant> *p_values, int p_max_subitems = -1, int p_max_depth = -1); | 
					
						
							|  |  |  | 	virtual void debug_get_globals(List<String> *p_locals, List<Variant> *p_values, int p_max_subitems = -1, int p_max_depth = -1); | 
					
						
							|  |  |  | 	virtual String debug_parse_stack_level_expression(int p_level, const String &p_expression, int p_max_subitems = -1, int p_max_depth = -1); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 20:22:02 -03:00
										 |  |  | 	virtual void reload_all_scripts(); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual void reload_tool_script(const Ref<Script> &p_script, bool p_soft_reload); | 
					
						
							| 
									
										
										
										
											2016-06-01 20:22:02 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual void frame(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual void get_public_functions(List<MethodInfo> *p_functions) const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual void get_public_constants(List<Pair<String, Variant> > *p_constants) const; | 
					
						
							| 
									
										
										
										
											2014-02-22 20:28:19 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-21 21:18:16 -03:00
										 |  |  | 	virtual void profiling_start(); | 
					
						
							|  |  |  | 	virtual void profiling_stop(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual int profiling_get_accumulated_data(ProfilingInfo *p_info_arr, int p_info_max); | 
					
						
							|  |  |  | 	virtual int profiling_get_frame_data(ProfilingInfo *p_info_arr, int p_info_max); | 
					
						
							| 
									
										
										
										
											2016-05-21 21:18:16 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	/* LOADER FUNCTIONS */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual void get_recognized_extensions(List<String> *p_extensions) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	GDScriptLanguage(); | 
					
						
							|  |  |  | 	~GDScriptLanguage(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ResourceFormatLoaderGDScript : public ResourceFormatLoader { | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL); | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual void get_recognized_extensions(List<String> *p_extensions) const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual bool handles_type(const String &p_type) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 	virtual String get_resource_type(const String &p_path) const; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ResourceFormatSaverGDScript : public ResourceFormatSaver { | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual Error save(const String &p_path, const RES &p_resource, uint32_t p_flags = 0); | 
					
						
							|  |  |  | 	virtual void get_recognized_extensions(const RES &p_resource, List<String> *p_extensions) const; | 
					
						
							|  |  |  | 	virtual bool recognize(const RES &p_resource) const; | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // GD_SCRIPT_H
 |