diff options
Diffstat (limited to 'modules/gdscript/register_types.cpp')
| -rw-r--r-- | modules/gdscript/register_types.cpp | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/modules/gdscript/register_types.cpp b/modules/gdscript/register_types.cpp index d2d7bf426..6bcd12857 100644 --- a/modules/gdscript/register_types.cpp +++ b/modules/gdscript/register_types.cpp @@ -13,11 +13,60 @@ #include "gd_script.h" #include "io/resource_loader.h" +#include "os/file_access.h" + GDScriptLanguage *script_language_gd=NULL; ResourceFormatLoaderGDScript *resource_loader_gd=NULL; ResourceFormatSaverGDScript *resource_saver_gd=NULL; +#ifdef TOOLS_ENABLED + +#include "tools/editor/editor_import_export.h" +#include "gd_tokenizer.h" +#include "tools/editor/editor_node.h" + +class EditorExportGDScript : public EditorExportPlugin { + + OBJ_TYPE(EditorExportGDScript,EditorExportPlugin); + +public: + + virtual Vector<uint8_t> custom_export(String& p_path,const Ref<EditorExportPlatform> &p_platform) { + //compile gdscript to bytecode + if (p_path.ends_with(".gd")) { + Vector<uint8_t> file = FileAccess::get_file_as_array(p_path); + if (file.empty()) + return file; + String txt; + txt.parse_utf8((const char*)file.ptr(),file.size()); + file = GDTokenizerBuffer::parse_code_string(txt); + if (!file.empty()) { + print_line("PREV: "+p_path); + p_path=p_path.basename()+".gdc"; + print_line("NOW: "+p_path); + return file; + } + + } + + return Vector<uint8_t>(); + } + + + EditorExportGDScript(){} + +}; + +static void register_editor_plugin() { + + Ref<EditorExportGDScript> egd = memnew( EditorExportGDScript ); + EditorImportExport::get_singleton()->add_export_plugin(egd); +} + + +#endif + void register_gdscript_types() { @@ -30,6 +79,11 @@ void register_gdscript_types() { resource_saver_gd=memnew( ResourceFormatSaverGDScript ); ResourceSaver::add_resource_format_saver(resource_saver_gd); +#ifdef TOOLS_ENABLED + + EditorNode::add_init_callback(register_editor_plugin); +#endif + } void unregister_gdscript_types() { @@ -43,4 +97,4 @@ void unregister_gdscript_types() { if (resource_saver_gd) memdelete( resource_saver_gd ); -}
\ No newline at end of file +} |
