diff options
| author | Juan Linietsky | 2014-02-09 22:10:30 -0300 |
|---|---|---|
| committer | Juan Linietsky | 2014-02-09 22:10:30 -0300 |
| commit | 0b806ee0fc9097fa7bda7ac0109191c9c5e0a1ac (patch) | |
| tree | 276c4d099e178eb67fbd14f61d77b05e3808e9e3 /tools/editor/editor_import_export.h | |
| parent | 0e49da1687bc8192ed210947da52c9e5c5f301bb (diff) | |
| download | godot-0b806ee.tar.gz godot-0b806ee.tar.zst godot-0b806ee.zip | |
GODOT IS OPEN SOURCE
Diffstat (limited to 'tools/editor/editor_import_export.h')
| -rw-r--r-- | tools/editor/editor_import_export.h | 301 |
1 files changed, 301 insertions, 0 deletions
diff --git a/tools/editor/editor_import_export.h b/tools/editor/editor_import_export.h new file mode 100644 index 000000000..b80801a7d --- /dev/null +++ b/tools/editor/editor_import_export.h @@ -0,0 +1,301 @@ +/*************************************************************************/ +/* editor_import_export.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* http://www.godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* 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 EDITOR_IMPORT_EXPORT_H +#define EDITOR_IMPORT_EXPORT_H + +#include "resource.h" +#include "scene/main/node.h" +#include "scene/resources/texture.h" + +class EditorExportPlatform; +class FileAccess; +class EditorProgress; +class EditorImportPlugin : public Reference { + + OBJ_TYPE( EditorImportPlugin, Reference); + +protected: + + static void _bind_methods(); + +public: + + + static String validate_source_path(const String& p_path); + static String expand_source_path(const String& p_path); + + virtual String get_name() const; + virtual String get_visible_name() const; + virtual void import_dialog(const String& p_from=""); + virtual Error import(const String& p_path, const Ref<ResourceImportMetadata>& p_from); + virtual Vector<uint8_t> custom_export(const String& p_path,const Ref<EditorExportPlatform> &p_platform); + + EditorImportPlugin(); +}; + +class EditorExportPlatform : public Reference { + + OBJ_TYPE( EditorExportPlatform,Reference ); + +public: + + typedef Error (*EditorExportSaveFunction)(void *p_userdata,const String& p_path, const Vector<uint8_t>& p_data,int p_file,int p_total); +protected: + + virtual Vector<uint8_t> get_exported_file(String& p_fname) const; + virtual Vector<StringName> get_dependencies(bool p_bundles) const; + + struct TempData { + + uint64_t pos; + uint64_t ofs; + uint64_t size; + }; + + struct PackData { + + FileAccess *ftmp; + FileAccess *f; + Vector<TempData> file_ofs; + EditorProgress *ep; + int count; + + }; + + static Error save_pack_file(void *p_userdata,const String& p_path, const Vector<uint8_t>& p_data,int p_file,int p_total); + +public: + + enum ImageCompression { + + IMAGE_COMPRESSION_NONE, + IMAGE_COMPRESSION_INDEXED, // used for older hardware + IMAGE_COMPRESSION_BC, // directx compression format + IMAGE_COMPRESSION_PVRTC, // powervr compression format + IMAGE_COMPRESSION_PVRTC_SQUARE, // powervr compression format, square (ios) + IMAGE_COMPRESSION_ETC1, // ericsson compression format (alpha is uncompressed) + IMAGE_COMPRESSION_ETC2, // ericsson new compression format (can handle alpha) + }; + + + Error export_project_files(EditorExportSaveFunction p_func, void* p_udata,bool p_make_bundles); + + Error save_pack(FileAccess *p_where, bool p_make_bundles=false); + virtual String get_name() const =0; + virtual ImageCompression get_image_compression() const=0; + virtual Ref<Texture> get_logo() const =0; + + virtual bool poll_devices() { return false; } + virtual int get_device_count() const { return 0; } + virtual String get_device_name(int p_device) const { return ""; } + virtual String get_device_info(int p_device) const { return ""; } + virtual Error run(int p_device) { return OK; } + + virtual bool can_export(String *r_error=NULL) const=0; + + + virtual bool requieres_password(bool p_debug) const { return false; } + virtual String get_binary_extension() const=0; + virtual Error export_project(const String& p_path,bool p_debug,const String& p_password="")=0; + + EditorExportPlatform() {}; +}; + +class EditorExportPlatformPC : public EditorExportPlatform { + + OBJ_TYPE( EditorExportPlatformPC,EditorExportPlatform ); + +public: + + enum ExportMode { + EXPORT_EXE, + EXPORT_PACK, + EXPORT_COPY, + EXPORT_BUNDLES + }; + + +private: + + + String binary_extension; + String platform; + + String custom_release_binary; + String custom_debug_binary; + String release_binary32; + String debug_binary32; + String release_binary64; + String debug_binary64; + String name; + bool use64; + + Ref<Texture> logo; + + ExportMode export_mode; +protected: + + bool _set(const StringName& p_name, const Variant& p_value); + bool _get(const StringName& p_name,Variant &r_ret) const; + void _get_property_list( List<PropertyInfo> *p_list) const; + +public: + + virtual String get_name() const { return name; } + virtual Ref<Texture> get_logo() const { return logo; } + virtual ImageCompression get_image_compression() const { return IMAGE_COMPRESSION_BC; } + + virtual String get_binary_extension() const { return binary_extension; } + virtual Error export_project(const String& p_path,bool p_debug,const String& p_password=""); + virtual void set_release_binary32(const String& p_binary) { release_binary32=p_binary; } + virtual void set_debug_binary32(const String& p_binary) { debug_binary32=p_binary; } + virtual void set_release_binary64(const String& p_binary) { release_binary64=p_binary; } + virtual void set_debug_binary64(const String& p_binary) { debug_binary64=p_binary; } + virtual void set_name(const String& p_name) { name=p_name; } + virtual void set_logo(const Ref<Texture>& p_logo) { logo=p_logo; } + + virtual bool can_export(String *r_error=NULL) const; + + void set_binary_extension(const String& p_extension); + + EditorExportPlatformPC(); +}; + + +class EditorImportExport : public Node { + OBJ_TYPE(EditorImportExport,Node); +public: + + enum FileAction { + + ACTION_NONE, + ACTION_COPY, + ACTION_BUNDLE + }; + + enum ExportFilter { + EXPORT_SELECTED, + EXPORT_RESOURCES, + EXPORT_ALL, + + }; + + enum ImageAction { + IMAGE_ACTION_NONE, + IMAGE_ACTION_COMPRESS_DISK, + IMAGE_ACTION_COMPRESS_RAM, + }; + + +protected: + + struct ImageGroup { + + ImageAction action; + bool make_atlas; + float lossy_quality; + int shrink; + }; + + Vector<Ref<EditorImportPlugin> > plugins; + Map<String,int> by_idx; + ImageAction image_action; + float image_action_compress_quality; + Set<String> image_formats; + + ExportFilter export_filter; + String export_custom_filter; + Map<StringName,FileAction> files; + Map<StringName,Ref<EditorExportPlatform> > exporters; + Map<StringName,ImageGroup> image_groups; + Map<StringName,StringName> image_group_files; + + static EditorImportExport* singleton; + + static void _bind_methods(); +public: + + static EditorImportExport* get_singleton() { return singleton; } + + void add_import_plugin(const Ref<EditorImportPlugin>& p_plugin); + int get_import_plugin_count() const; + Ref<EditorImportPlugin> get_import_plugin(int p_idx) const; + Ref<EditorImportPlugin> get_import_plugin_by_name(const String& p_string) const; + + bool poll_export_platforms(); + + void set_export_file_action(const StringName& p_export_file, FileAction p_action); + FileAction get_export_file_action(const StringName& p_export_file) const; + void get_export_file_list(List<StringName> *p_export_files); + + void add_export_platform(const Ref<EditorExportPlatform>& p_export); + Ref<EditorExportPlatform> get_export_platform(const StringName& p_platform); + void get_export_platforms(List<StringName> *r_platforms); + + void set_export_filter(ExportFilter p_enable); + ExportFilter get_export_filter() const; + + void set_export_custom_filter(const String& p_custom_filter); + String get_export_custom_filter() const; + + void set_export_image_action(ImageAction p_action); + ImageAction get_export_image_action() const; + + void set_export_image_quality(float p_quality); + float get_export_image_quality() const; + + void image_export_group_create(const StringName& p_name); + void image_export_group_remove(const StringName& p_name); + bool image_export_has_group(const StringName& p_name) const; + void image_export_get_groups(List<StringName> *r_name) const; + void image_export_group_set_image_action(const StringName& p_export_group,ImageAction p_action); + ImageAction image_export_group_get_image_action(const StringName& p_export_group) const; + void image_export_group_set_make_atlas(const StringName& p_export_group,bool p_make); + bool image_export_group_get_make_atlas(const StringName& p_export_group) const; + void image_export_group_set_shrink(const StringName& p_export_group,int p_amount); + int image_export_group_get_shrink(const StringName& p_export_group) const; + void image_export_group_set_lossy_quality(const StringName& p_export_group,float p_quality); + float image_export_group_get_lossy_quality(const StringName& p_export_group) const; + + void image_add_to_export_group(const StringName& p_image,const StringName& p_export_group); + StringName image_get_export_group(const StringName& p_image) const; + void image_export_get_images_in_group(const StringName& p_group, List<StringName> *r_images) const; + + Set<String>& get_image_formats() { return image_formats; } + + + void load_config(); + void save_config(); + + EditorImportExport(); +}; + +VARIANT_ENUM_CAST(EditorImportExport::ImageAction); + +#endif // EDITOR_IMPORT_EXPORT_H |
