register_types.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*************************************************/
  2. /* register_script_types.cpp */
  3. /*************************************************/
  4. /* This file is part of: */
  5. /* GODOT ENGINE */
  6. /*************************************************/
  7. /* Source code within this file is: */
  8. /* (c) 2007-2010 Juan Linietsky, Ariel Manzur */
  9. /* All Rights Reserved. */
  10. /*************************************************/
  11. #include "register_types.h"
  12. #include "gd_script.h"
  13. #include "io/resource_loader.h"
  14. #include "os/file_access.h"
  15. GDScriptLanguage *script_language_gd=NULL;
  16. ResourceFormatLoaderGDScript *resource_loader_gd=NULL;
  17. ResourceFormatSaverGDScript *resource_saver_gd=NULL;
  18. #ifdef TOOLS_ENABLED
  19. #include "tools/editor/editor_import_export.h"
  20. #include "gd_tokenizer.h"
  21. #include "tools/editor/editor_node.h"
  22. class EditorExportGDScript : public EditorExportPlugin {
  23. OBJ_TYPE(EditorExportGDScript,EditorExportPlugin);
  24. public:
  25. virtual Vector<uint8_t> custom_export(String& p_path,const Ref<EditorExportPlatform> &p_platform) {
  26. //compile gdscript to bytecode
  27. if (p_path.ends_with(".gd")) {
  28. Vector<uint8_t> file = FileAccess::get_file_as_array(p_path);
  29. if (file.empty())
  30. return file;
  31. String txt;
  32. txt.parse_utf8((const char*)file.ptr(),file.size());
  33. file = GDTokenizerBuffer::parse_code_string(txt);
  34. if (!file.empty()) {
  35. print_line("PREV: "+p_path);
  36. p_path=p_path.basename()+".gdc";
  37. print_line("NOW: "+p_path);
  38. return file;
  39. }
  40. }
  41. return Vector<uint8_t>();
  42. }
  43. EditorExportGDScript(){}
  44. };
  45. static void register_editor_plugin() {
  46. Ref<EditorExportGDScript> egd = memnew( EditorExportGDScript );
  47. EditorImportExport::get_singleton()->add_export_plugin(egd);
  48. }
  49. #endif
  50. void register_gdscript_types() {
  51. script_language_gd=memnew( GDScriptLanguage );
  52. script_language_gd->init();
  53. ScriptServer::register_language(script_language_gd);
  54. ObjectTypeDB::register_type<GDScript>();
  55. resource_loader_gd=memnew( ResourceFormatLoaderGDScript );
  56. ResourceLoader::add_resource_format_loader(resource_loader_gd);
  57. resource_saver_gd=memnew( ResourceFormatSaverGDScript );
  58. ResourceSaver::add_resource_format_saver(resource_saver_gd);
  59. #ifdef TOOLS_ENABLED
  60. EditorNode::add_init_callback(register_editor_plugin);
  61. #endif
  62. }
  63. void unregister_gdscript_types() {
  64. if (script_language_gd)
  65. memdelete( script_language_gd );
  66. if (resource_loader_gd)
  67. memdelete( resource_loader_gd );
  68. if (resource_saver_gd)
  69. memdelete( resource_saver_gd );
  70. }