Decouple EditorInterface from EditorPlugin
- Simplify some includes in the process. - Also exposes EditorInterface.movie_maker_enabled as a property.
This commit is contained in:
parent
055ee1276f
commit
49d7041d34
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<class name="EditorInterface" inherits="Node" version="4.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
<class name="EditorInterface" inherits="Object" version="4.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||||
<brief_description>
|
<brief_description>
|
||||||
Godot editor's interface.
|
Godot editor's interface.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
@ -34,7 +34,7 @@
|
|||||||
Edits the given [Script]. The line and column on which to open the script can also be specified. The script will be open with the user-configured editor for the script's language which may be an external editor.
|
Edits the given [Script]. The line and column on which to open the script can also be specified. The script will be open with the user-configured editor for the script's language which may be an external editor.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_base_control">
|
<method name="get_base_control" qualifiers="const">
|
||||||
<return type="Control" />
|
<return type="Control" />
|
||||||
<description>
|
<description>
|
||||||
Returns the main container of Godot editor's window. For example, you can use it to retrieve the size of the container and place your controls accordingly.
|
Returns the main container of Godot editor's window. For example, you can use it to retrieve the size of the container and place your controls accordingly.
|
||||||
@ -60,20 +60,20 @@
|
|||||||
Returns the current path being viewed in the [FileSystemDock].
|
Returns the current path being viewed in the [FileSystemDock].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_edited_scene_root">
|
<method name="get_edited_scene_root" qualifiers="const">
|
||||||
<return type="Node" />
|
<return type="Node" />
|
||||||
<description>
|
<description>
|
||||||
Returns the edited (current) scene's root [Node].
|
Returns the edited (current) scene's root [Node].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_editor_main_screen">
|
<method name="get_editor_main_screen" qualifiers="const">
|
||||||
<return type="VBoxContainer" />
|
<return type="VBoxContainer" />
|
||||||
<description>
|
<description>
|
||||||
Returns the editor control responsible for main screen plugins and tools. Use it with plugins that implement [method EditorPlugin._has_main_screen].
|
Returns the editor control responsible for main screen plugins and tools. Use it with plugins that implement [method EditorPlugin._has_main_screen].
|
||||||
[b]Warning:[/b] Removing and freeing this node will render a part of the editor useless and may cause a crash.
|
[b]Warning:[/b] Removing and freeing this node will render a part of the editor useless and may cause a crash.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_editor_paths">
|
<method name="get_editor_paths" qualifiers="const">
|
||||||
<return type="EditorPaths" />
|
<return type="EditorPaths" />
|
||||||
<description>
|
<description>
|
||||||
Returns the [EditorPaths] singleton.
|
Returns the [EditorPaths] singleton.
|
||||||
@ -86,13 +86,13 @@
|
|||||||
[b]Note:[/b] This value is set via the [code]interface/editor/display_scale[/code] and [code]interface/editor/custom_display_scale[/code] editor settings. Editor must be restarted for changes to be properly applied.
|
[b]Note:[/b] This value is set via the [code]interface/editor/display_scale[/code] and [code]interface/editor/custom_display_scale[/code] editor settings. Editor must be restarted for changes to be properly applied.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_editor_settings">
|
<method name="get_editor_settings" qualifiers="const">
|
||||||
<return type="EditorSettings" />
|
<return type="EditorSettings" />
|
||||||
<description>
|
<description>
|
||||||
Returns the editor's [EditorSettings] instance.
|
Returns the editor's [EditorSettings] instance.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_file_system_dock">
|
<method name="get_file_system_dock" qualifiers="const">
|
||||||
<return type="FileSystemDock" />
|
<return type="FileSystemDock" />
|
||||||
<description>
|
<description>
|
||||||
Returns the editor's [FileSystemDock] instance.
|
Returns the editor's [FileSystemDock] instance.
|
||||||
@ -118,19 +118,19 @@
|
|||||||
Returns the name of the scene that is being played. If no scene is currently being played, returns an empty string.
|
Returns the name of the scene that is being played. If no scene is currently being played, returns an empty string.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_resource_filesystem">
|
<method name="get_resource_filesystem" qualifiers="const">
|
||||||
<return type="EditorFileSystem" />
|
<return type="EditorFileSystem" />
|
||||||
<description>
|
<description>
|
||||||
Returns the editor's [EditorFileSystem] instance.
|
Returns the editor's [EditorFileSystem] instance.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_resource_previewer">
|
<method name="get_resource_previewer" qualifiers="const">
|
||||||
<return type="EditorResourcePreview" />
|
<return type="EditorResourcePreview" />
|
||||||
<description>
|
<description>
|
||||||
Returns the editor's [EditorResourcePreview] instance.
|
Returns the editor's [EditorResourcePreview] instance.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_script_editor">
|
<method name="get_script_editor" qualifiers="const">
|
||||||
<return type="ScriptEditor" />
|
<return type="ScriptEditor" />
|
||||||
<description>
|
<description>
|
||||||
Returns the editor's [ScriptEditor] instance.
|
Returns the editor's [ScriptEditor] instance.
|
||||||
@ -143,7 +143,7 @@
|
|||||||
Returns an array containing the paths of the currently selected files (and directories) in the [FileSystemDock].
|
Returns an array containing the paths of the currently selected files (and directories) in the [FileSystemDock].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_selection">
|
<method name="get_selection" qualifiers="const">
|
||||||
<return type="EditorSelection" />
|
<return type="EditorSelection" />
|
||||||
<description>
|
<description>
|
||||||
Returns the editor's [EditorSelection] instance.
|
Returns the editor's [EditorSelection] instance.
|
||||||
@ -158,12 +158,6 @@
|
|||||||
Shows the given property on the given [param object] in the editor's Inspector dock. If [param inspector_only] is [code]true[/code], plugins will not attempt to edit [param object].
|
Shows the given property on the given [param object] in the editor's Inspector dock. If [param inspector_only] is [code]true[/code], plugins will not attempt to edit [param object].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="is_movie_maker_enabled" qualifiers="const">
|
|
||||||
<return type="bool" />
|
|
||||||
<description>
|
|
||||||
Returns [code]true[/code] if Movie Maker mode is enabled in the editor. See also [method set_movie_maker_enabled]. See [MovieWriter] for more information.
|
|
||||||
</description>
|
|
||||||
</method>
|
|
||||||
<method name="is_playing_scene" qualifiers="const">
|
<method name="is_playing_scene" qualifiers="const">
|
||||||
<return type="bool" />
|
<return type="bool" />
|
||||||
<description>
|
<description>
|
||||||
@ -253,13 +247,6 @@
|
|||||||
Sets the editor's current main screen to the one specified in [param name]. [param name] must match the text of the tab in question exactly ([code]2D[/code], [code]3D[/code], [code]Script[/code], [code]AssetLib[/code]).
|
Sets the editor's current main screen to the one specified in [param name]. [param name] must match the text of the tab in question exactly ([code]2D[/code], [code]3D[/code], [code]Script[/code], [code]AssetLib[/code]).
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_movie_maker_enabled">
|
|
||||||
<return type="void" />
|
|
||||||
<param index="0" name="enabled" type="bool" />
|
|
||||||
<description>
|
|
||||||
Sets whether Movie Maker mode is enabled in the editor. See also [method is_movie_maker_enabled]. See [MovieWriter] for more information.
|
|
||||||
</description>
|
|
||||||
</method>
|
|
||||||
<method name="set_plugin_enabled">
|
<method name="set_plugin_enabled">
|
||||||
<return type="void" />
|
<return type="void" />
|
||||||
<param index="0" name="plugin" type="String" />
|
<param index="0" name="plugin" type="String" />
|
||||||
@ -279,5 +266,8 @@
|
|||||||
<member name="distraction_free_mode" type="bool" setter="set_distraction_free_mode" getter="is_distraction_free_mode_enabled">
|
<member name="distraction_free_mode" type="bool" setter="set_distraction_free_mode" getter="is_distraction_free_mode_enabled">
|
||||||
If [code]true[/code], enables distraction-free mode which hides side docks to increase the space available for the main view.
|
If [code]true[/code], enables distraction-free mode which hides side docks to increase the space available for the main view.
|
||||||
</member>
|
</member>
|
||||||
|
<member name="movie_maker_enabled" type="bool" setter="set_movie_maker_enabled" getter="is_movie_maker_enabled">
|
||||||
|
If [code]true[/code], the Movie Maker mode is enabled in the editor. See [MovieWriter] for more information.
|
||||||
|
</member>
|
||||||
</members>
|
</members>
|
||||||
</class>
|
</class>
|
||||||
|
@ -532,7 +532,7 @@
|
|||||||
<method name="get_editor_interface">
|
<method name="get_editor_interface">
|
||||||
<return type="EditorInterface" />
|
<return type="EditorInterface" />
|
||||||
<description>
|
<description>
|
||||||
Returns the [EditorInterface] object that gives you control over Godot editor's window and its functionalities.
|
Returns the [EditorInterface] singleton. It provides access to some parts of the editor GUI as well as various inner states and tools.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_export_as_menu">
|
<method name="get_export_as_menu">
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
Accessing the settings can be done using the following methods, such as:
|
Accessing the settings can be done using the following methods, such as:
|
||||||
[codeblocks]
|
[codeblocks]
|
||||||
[gdscript]
|
[gdscript]
|
||||||
var settings = EditorInterface.get_editor_settings()
|
var settings = get_editor_interface().get_editor_settings()
|
||||||
# `settings.set("some/property", 10)` also works as this class overrides `_set()` internally.
|
# `settings.set("some/property", 10)` also works as this class overrides `_set()` internally.
|
||||||
settings.set_setting("some/property", 10)
|
settings.set_setting("some/property", 10)
|
||||||
# `settings.get("some/property")` also works as this class overrides `_get()` internally.
|
# `settings.get("some/property")` also works as this class overrides `_get()` internally.
|
||||||
|
437
editor/editor_interface.cpp
Normal file
437
editor/editor_interface.cpp
Normal file
@ -0,0 +1,437 @@
|
|||||||
|
/**************************************************************************/
|
||||||
|
/* editor_interface.cpp */
|
||||||
|
/**************************************************************************/
|
||||||
|
/* This file is part of: */
|
||||||
|
/* GODOT ENGINE */
|
||||||
|
/* https://godotengine.org */
|
||||||
|
/**************************************************************************/
|
||||||
|
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||||
|
/* 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. */
|
||||||
|
/**************************************************************************/
|
||||||
|
|
||||||
|
#include "editor_interface.h"
|
||||||
|
|
||||||
|
#include "editor/editor_command_palette.h"
|
||||||
|
#include "editor/editor_node.h"
|
||||||
|
#include "editor/editor_paths.h"
|
||||||
|
#include "editor/editor_resource_preview.h"
|
||||||
|
#include "editor/editor_scale.h"
|
||||||
|
#include "editor/editor_settings.h"
|
||||||
|
#include "editor/filesystem_dock.h"
|
||||||
|
#include "editor/inspector_dock.h"
|
||||||
|
#include "main/main.h"
|
||||||
|
#include "scene/gui/box_container.h"
|
||||||
|
#include "scene/gui/control.h"
|
||||||
|
|
||||||
|
EditorInterface *EditorInterface::singleton = nullptr;
|
||||||
|
|
||||||
|
void EditorInterface::restart_editor(bool p_save) {
|
||||||
|
if (p_save) {
|
||||||
|
EditorNode::get_singleton()->save_all_scenes();
|
||||||
|
}
|
||||||
|
EditorNode::get_singleton()->restart_editor();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Editor tools.
|
||||||
|
|
||||||
|
EditorCommandPalette *EditorInterface::get_command_palette() const {
|
||||||
|
return EditorCommandPalette::get_singleton();
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorFileSystem *EditorInterface::get_resource_file_system() const {
|
||||||
|
return EditorFileSystem::get_singleton();
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorPaths *EditorInterface::get_editor_paths() const {
|
||||||
|
return EditorPaths::get_singleton();
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorResourcePreview *EditorInterface::get_resource_previewer() const {
|
||||||
|
return EditorResourcePreview::get_singleton();
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorSelection *EditorInterface::get_selection() const {
|
||||||
|
return EditorNode::get_singleton()->get_editor_selection();
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref<EditorSettings> EditorInterface::get_editor_settings() const {
|
||||||
|
return EditorSettings::get_singleton();
|
||||||
|
}
|
||||||
|
|
||||||
|
TypedArray<Texture2D> EditorInterface::_make_mesh_previews(const TypedArray<Mesh> &p_meshes, int p_preview_size) {
|
||||||
|
Vector<Ref<Mesh>> meshes;
|
||||||
|
|
||||||
|
for (int i = 0; i < p_meshes.size(); i++) {
|
||||||
|
meshes.push_back(p_meshes[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector<Ref<Texture2D>> textures = make_mesh_previews(meshes, nullptr, p_preview_size);
|
||||||
|
TypedArray<Texture2D> ret;
|
||||||
|
for (int i = 0; i < textures.size(); i++) {
|
||||||
|
ret.push_back(textures[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector<Ref<Texture2D>> EditorInterface::make_mesh_previews(const Vector<Ref<Mesh>> &p_meshes, Vector<Transform3D> *p_transforms, int p_preview_size) {
|
||||||
|
int size = p_preview_size;
|
||||||
|
|
||||||
|
RID scenario = RS::get_singleton()->scenario_create();
|
||||||
|
|
||||||
|
RID viewport = RS::get_singleton()->viewport_create();
|
||||||
|
RS::get_singleton()->viewport_set_update_mode(viewport, RS::VIEWPORT_UPDATE_ALWAYS);
|
||||||
|
RS::get_singleton()->viewport_set_scenario(viewport, scenario);
|
||||||
|
RS::get_singleton()->viewport_set_size(viewport, size, size);
|
||||||
|
RS::get_singleton()->viewport_set_transparent_background(viewport, true);
|
||||||
|
RS::get_singleton()->viewport_set_active(viewport, true);
|
||||||
|
RID viewport_texture = RS::get_singleton()->viewport_get_texture(viewport);
|
||||||
|
|
||||||
|
RID camera = RS::get_singleton()->camera_create();
|
||||||
|
RS::get_singleton()->viewport_attach_camera(viewport, camera);
|
||||||
|
|
||||||
|
RID light = RS::get_singleton()->directional_light_create();
|
||||||
|
RID light_instance = RS::get_singleton()->instance_create2(light, scenario);
|
||||||
|
|
||||||
|
RID light2 = RS::get_singleton()->directional_light_create();
|
||||||
|
RS::get_singleton()->light_set_color(light2, Color(0.7, 0.7, 0.7));
|
||||||
|
RID light_instance2 = RS::get_singleton()->instance_create2(light2, scenario);
|
||||||
|
|
||||||
|
EditorProgress ep("mlib", TTR("Creating Mesh Previews"), p_meshes.size());
|
||||||
|
|
||||||
|
Vector<Ref<Texture2D>> textures;
|
||||||
|
|
||||||
|
for (int i = 0; i < p_meshes.size(); i++) {
|
||||||
|
Ref<Mesh> mesh = p_meshes[i];
|
||||||
|
if (!mesh.is_valid()) {
|
||||||
|
textures.push_back(Ref<Texture2D>());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Transform3D mesh_xform;
|
||||||
|
if (p_transforms != nullptr) {
|
||||||
|
mesh_xform = (*p_transforms)[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
RID inst = RS::get_singleton()->instance_create2(mesh->get_rid(), scenario);
|
||||||
|
RS::get_singleton()->instance_set_transform(inst, mesh_xform);
|
||||||
|
|
||||||
|
AABB aabb = mesh->get_aabb();
|
||||||
|
Vector3 ofs = aabb.get_center();
|
||||||
|
aabb.position -= ofs;
|
||||||
|
Transform3D xform;
|
||||||
|
xform.basis = Basis().rotated(Vector3(0, 1, 0), -Math_PI / 6);
|
||||||
|
xform.basis = Basis().rotated(Vector3(1, 0, 0), Math_PI / 6) * xform.basis;
|
||||||
|
AABB rot_aabb = xform.xform(aabb);
|
||||||
|
float m = MAX(rot_aabb.size.x, rot_aabb.size.y) * 0.5;
|
||||||
|
if (m == 0) {
|
||||||
|
textures.push_back(Ref<Texture2D>());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
xform.origin = -xform.basis.xform(ofs); //-ofs*m;
|
||||||
|
xform.origin.z -= rot_aabb.size.z * 2;
|
||||||
|
xform.invert();
|
||||||
|
xform = mesh_xform * xform;
|
||||||
|
|
||||||
|
RS::get_singleton()->camera_set_transform(camera, xform * Transform3D(Basis(), Vector3(0, 0, 3)));
|
||||||
|
RS::get_singleton()->camera_set_orthogonal(camera, m * 2, 0.01, 1000.0);
|
||||||
|
|
||||||
|
RS::get_singleton()->instance_set_transform(light_instance, xform * Transform3D().looking_at(Vector3(-2, -1, -1), Vector3(0, 1, 0)));
|
||||||
|
RS::get_singleton()->instance_set_transform(light_instance2, xform * Transform3D().looking_at(Vector3(+1, -1, -2), Vector3(0, 1, 0)));
|
||||||
|
|
||||||
|
ep.step(TTR("Thumbnail..."), i);
|
||||||
|
DisplayServer::get_singleton()->process_events();
|
||||||
|
Main::iteration();
|
||||||
|
Main::iteration();
|
||||||
|
Ref<Image> img = RS::get_singleton()->texture_2d_get(viewport_texture);
|
||||||
|
ERR_CONTINUE(!img.is_valid() || img->is_empty());
|
||||||
|
Ref<ImageTexture> it = ImageTexture::create_from_image(img);
|
||||||
|
|
||||||
|
RS::get_singleton()->free(inst);
|
||||||
|
|
||||||
|
textures.push_back(it);
|
||||||
|
}
|
||||||
|
|
||||||
|
RS::get_singleton()->free(viewport);
|
||||||
|
RS::get_singleton()->free(light);
|
||||||
|
RS::get_singleton()->free(light_instance);
|
||||||
|
RS::get_singleton()->free(light2);
|
||||||
|
RS::get_singleton()->free(light_instance2);
|
||||||
|
RS::get_singleton()->free(camera);
|
||||||
|
RS::get_singleton()->free(scenario);
|
||||||
|
|
||||||
|
return textures;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::set_plugin_enabled(const String &p_plugin, bool p_enabled) {
|
||||||
|
EditorNode::get_singleton()->set_addon_plugin_enabled(p_plugin, p_enabled, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EditorInterface::is_plugin_enabled(const String &p_plugin) const {
|
||||||
|
return EditorNode::get_singleton()->is_addon_plugin_enabled(p_plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Editor GUI.
|
||||||
|
|
||||||
|
Control *EditorInterface::get_base_control() const {
|
||||||
|
return EditorNode::get_singleton()->get_gui_base();
|
||||||
|
}
|
||||||
|
|
||||||
|
VBoxContainer *EditorInterface::get_editor_main_screen() const {
|
||||||
|
return EditorNode::get_singleton()->get_main_screen_control();
|
||||||
|
}
|
||||||
|
|
||||||
|
ScriptEditor *EditorInterface::get_script_editor() const {
|
||||||
|
return ScriptEditor::get_singleton();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::set_main_screen_editor(const String &p_name) {
|
||||||
|
EditorNode::get_singleton()->select_editor_by_name(p_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::set_distraction_free_mode(bool p_enter) {
|
||||||
|
EditorNode::get_singleton()->set_distraction_free_mode(p_enter);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EditorInterface::is_distraction_free_mode_enabled() const {
|
||||||
|
return EditorNode::get_singleton()->is_distraction_free_mode_enabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
float EditorInterface::get_editor_scale() const {
|
||||||
|
return EDSCALE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Editor docks.
|
||||||
|
|
||||||
|
FileSystemDock *EditorInterface::get_file_system_dock() const {
|
||||||
|
return FileSystemDock::get_singleton();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::select_file(const String &p_file) {
|
||||||
|
FileSystemDock::get_singleton()->select_file(p_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector<String> EditorInterface::get_selected_paths() const {
|
||||||
|
return FileSystemDock::get_singleton()->get_selected_paths();
|
||||||
|
}
|
||||||
|
|
||||||
|
String EditorInterface::get_current_path() const {
|
||||||
|
return FileSystemDock::get_singleton()->get_current_path();
|
||||||
|
}
|
||||||
|
|
||||||
|
String EditorInterface::get_current_directory() const {
|
||||||
|
return FileSystemDock::get_singleton()->get_current_directory();
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorInspector *EditorInterface::get_inspector() const {
|
||||||
|
return InspectorDock::get_inspector_singleton();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Object/Resource/Node editing.
|
||||||
|
|
||||||
|
void EditorInterface::inspect_object(Object *p_obj, const String &p_for_property, bool p_inspector_only) {
|
||||||
|
EditorNode::get_singleton()->push_item(p_obj, p_for_property, p_inspector_only);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::edit_resource(const Ref<Resource> &p_resource) {
|
||||||
|
EditorNode::get_singleton()->edit_resource(p_resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::edit_node(Node *p_node) {
|
||||||
|
EditorNode::get_singleton()->edit_node(p_node);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::edit_script(const Ref<Script> &p_script, int p_line, int p_col, bool p_grab_focus) {
|
||||||
|
ScriptEditor::get_singleton()->edit(p_script, p_line, p_col, p_grab_focus);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::open_scene_from_path(const String &scene_path) {
|
||||||
|
if (EditorNode::get_singleton()->is_changing_scene()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorNode::get_singleton()->open_request(scene_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::reload_scene_from_path(const String &scene_path) {
|
||||||
|
if (EditorNode::get_singleton()->is_changing_scene()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorNode::get_singleton()->reload_scene(scene_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
Node *EditorInterface::get_edited_scene_root() const {
|
||||||
|
return EditorNode::get_singleton()->get_edited_scene();
|
||||||
|
}
|
||||||
|
|
||||||
|
PackedStringArray EditorInterface::get_open_scenes() const {
|
||||||
|
PackedStringArray ret;
|
||||||
|
Vector<EditorData::EditedScene> scenes = EditorNode::get_editor_data().get_edited_scenes();
|
||||||
|
|
||||||
|
int scns_amount = scenes.size();
|
||||||
|
for (int idx_scn = 0; idx_scn < scns_amount; idx_scn++) {
|
||||||
|
if (scenes[idx_scn].root == nullptr) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ret.push_back(scenes[idx_scn].root->get_scene_file_path());
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
Error EditorInterface::save_scene() {
|
||||||
|
if (!get_edited_scene_root()) {
|
||||||
|
return ERR_CANT_CREATE;
|
||||||
|
}
|
||||||
|
if (get_edited_scene_root()->get_scene_file_path().is_empty()) {
|
||||||
|
return ERR_CANT_CREATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
save_scene_as(get_edited_scene_root()->get_scene_file_path());
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::save_scene_as(const String &p_scene, bool p_with_preview) {
|
||||||
|
EditorNode::get_singleton()->save_scene_to_path(p_scene, p_with_preview);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scene playback.
|
||||||
|
|
||||||
|
void EditorInterface::play_main_scene() {
|
||||||
|
EditorNode::get_singleton()->run_play();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::play_current_scene() {
|
||||||
|
EditorNode::get_singleton()->run_play_current();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::play_custom_scene(const String &scene_path) {
|
||||||
|
EditorNode::get_singleton()->run_play_custom(scene_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::stop_playing_scene() {
|
||||||
|
EditorNode::get_singleton()->run_stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EditorInterface::is_playing_scene() const {
|
||||||
|
return EditorNode::get_singleton()->is_run_playing();
|
||||||
|
}
|
||||||
|
|
||||||
|
String EditorInterface::get_playing_scene() const {
|
||||||
|
return EditorNode::get_singleton()->get_run_playing_scene();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::set_movie_maker_enabled(bool p_enabled) {
|
||||||
|
EditorNode::get_singleton()->set_movie_maker_enabled(p_enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool EditorInterface::is_movie_maker_enabled() const {
|
||||||
|
return EditorNode::get_singleton()->is_movie_maker_enabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Base.
|
||||||
|
|
||||||
|
void EditorInterface::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("restart_editor", "save"), &EditorInterface::restart_editor, DEFVAL(true));
|
||||||
|
|
||||||
|
// Editor tools.
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_command_palette"), &EditorInterface::get_command_palette);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_resource_filesystem"), &EditorInterface::get_resource_file_system);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_editor_paths"), &EditorInterface::get_editor_paths);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_resource_previewer"), &EditorInterface::get_resource_previewer);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_selection"), &EditorInterface::get_selection);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_editor_settings"), &EditorInterface::get_editor_settings);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("make_mesh_previews", "meshes", "preview_size"), &EditorInterface::_make_mesh_previews);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("set_plugin_enabled", "plugin", "enabled"), &EditorInterface::set_plugin_enabled);
|
||||||
|
ClassDB::bind_method(D_METHOD("is_plugin_enabled", "plugin"), &EditorInterface::is_plugin_enabled);
|
||||||
|
|
||||||
|
// Editor GUI.
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_base_control"), &EditorInterface::get_base_control);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_editor_main_screen"), &EditorInterface::get_editor_main_screen);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_script_editor"), &EditorInterface::get_script_editor);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("set_main_screen_editor", "name"), &EditorInterface::set_main_screen_editor);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_distraction_free_mode", "enter"), &EditorInterface::set_distraction_free_mode);
|
||||||
|
ClassDB::bind_method(D_METHOD("is_distraction_free_mode_enabled"), &EditorInterface::is_distraction_free_mode_enabled);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_editor_scale"), &EditorInterface::get_editor_scale);
|
||||||
|
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "distraction_free_mode"), "set_distraction_free_mode", "is_distraction_free_mode_enabled");
|
||||||
|
|
||||||
|
// Editor docks.
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_file_system_dock"), &EditorInterface::get_file_system_dock);
|
||||||
|
ClassDB::bind_method(D_METHOD("select_file", "file"), &EditorInterface::select_file);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_selected_paths"), &EditorInterface::get_selected_paths);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_current_path"), &EditorInterface::get_current_path);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_current_directory"), &EditorInterface::get_current_directory);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_inspector"), &EditorInterface::get_inspector);
|
||||||
|
|
||||||
|
// Object/Resource/Node editing.
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("inspect_object", "object", "for_property", "inspector_only"), &EditorInterface::inspect_object, DEFVAL(String()), DEFVAL(false));
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("edit_resource", "resource"), &EditorInterface::edit_resource);
|
||||||
|
ClassDB::bind_method(D_METHOD("edit_node", "node"), &EditorInterface::edit_node);
|
||||||
|
ClassDB::bind_method(D_METHOD("edit_script", "script", "line", "column", "grab_focus"), &EditorInterface::edit_script, DEFVAL(-1), DEFVAL(0), DEFVAL(true));
|
||||||
|
ClassDB::bind_method(D_METHOD("open_scene_from_path", "scene_filepath"), &EditorInterface::open_scene_from_path);
|
||||||
|
ClassDB::bind_method(D_METHOD("reload_scene_from_path", "scene_filepath"), &EditorInterface::reload_scene_from_path);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_open_scenes"), &EditorInterface::get_open_scenes);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_edited_scene_root"), &EditorInterface::get_edited_scene_root);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("save_scene"), &EditorInterface::save_scene);
|
||||||
|
ClassDB::bind_method(D_METHOD("save_scene_as", "path", "with_preview"), &EditorInterface::save_scene_as, DEFVAL(true));
|
||||||
|
|
||||||
|
// Scene playback.
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("play_main_scene"), &EditorInterface::play_main_scene);
|
||||||
|
ClassDB::bind_method(D_METHOD("play_current_scene"), &EditorInterface::play_current_scene);
|
||||||
|
ClassDB::bind_method(D_METHOD("play_custom_scene", "scene_filepath"), &EditorInterface::play_custom_scene);
|
||||||
|
ClassDB::bind_method(D_METHOD("stop_playing_scene"), &EditorInterface::stop_playing_scene);
|
||||||
|
ClassDB::bind_method(D_METHOD("is_playing_scene"), &EditorInterface::is_playing_scene);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_playing_scene"), &EditorInterface::get_playing_scene);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("set_movie_maker_enabled", "enabled"), &EditorInterface::set_movie_maker_enabled);
|
||||||
|
ClassDB::bind_method(D_METHOD("is_movie_maker_enabled"), &EditorInterface::is_movie_maker_enabled);
|
||||||
|
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "movie_maker_enabled"), "set_movie_maker_enabled", "is_movie_maker_enabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::create() {
|
||||||
|
memnew(EditorInterface);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorInterface::free() {
|
||||||
|
ERR_FAIL_COND(singleton == nullptr);
|
||||||
|
memdelete(singleton);
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorInterface::EditorInterface() {
|
||||||
|
ERR_FAIL_COND(singleton != nullptr);
|
||||||
|
singleton = this;
|
||||||
|
}
|
143
editor/editor_interface.h
Normal file
143
editor/editor_interface.h
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
/**************************************************************************/
|
||||||
|
/* editor_interface.h */
|
||||||
|
/**************************************************************************/
|
||||||
|
/* This file is part of: */
|
||||||
|
/* GODOT ENGINE */
|
||||||
|
/* https://godotengine.org */
|
||||||
|
/**************************************************************************/
|
||||||
|
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
|
||||||
|
/* 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_INTERFACE_H
|
||||||
|
#define EDITOR_INTERFACE_H
|
||||||
|
|
||||||
|
#include "core/io/resource.h"
|
||||||
|
#include "core/object/class_db.h"
|
||||||
|
#include "core/object/object.h"
|
||||||
|
#include "core/object/script_language.h"
|
||||||
|
|
||||||
|
class Control;
|
||||||
|
class EditorCommandPalette;
|
||||||
|
class EditorFileSystem;
|
||||||
|
class EditorInspector;
|
||||||
|
class EditorPaths;
|
||||||
|
class EditorResourcePreview;
|
||||||
|
class EditorSelection;
|
||||||
|
class EditorSettings;
|
||||||
|
class FileSystemDock;
|
||||||
|
class Mesh;
|
||||||
|
class Node;
|
||||||
|
class ScriptEditor;
|
||||||
|
class Texture2D;
|
||||||
|
class VBoxContainer;
|
||||||
|
|
||||||
|
class EditorInterface : public Object {
|
||||||
|
GDCLASS(EditorInterface, Object);
|
||||||
|
|
||||||
|
static EditorInterface *singleton;
|
||||||
|
|
||||||
|
// Editor tools.
|
||||||
|
|
||||||
|
TypedArray<Texture2D> _make_mesh_previews(const TypedArray<Mesh> &p_meshes, int p_preview_size);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
|
public:
|
||||||
|
static EditorInterface *get_singleton() { return singleton; }
|
||||||
|
|
||||||
|
void restart_editor(bool p_save = true);
|
||||||
|
|
||||||
|
// Editor tools.
|
||||||
|
|
||||||
|
EditorCommandPalette *get_command_palette() const;
|
||||||
|
EditorFileSystem *get_resource_file_system() const;
|
||||||
|
EditorPaths *get_editor_paths() const;
|
||||||
|
EditorResourcePreview *get_resource_previewer() const;
|
||||||
|
EditorSelection *get_selection() const;
|
||||||
|
Ref<EditorSettings> get_editor_settings() const;
|
||||||
|
|
||||||
|
Vector<Ref<Texture2D>> make_mesh_previews(const Vector<Ref<Mesh>> &p_meshes, Vector<Transform3D> *p_transforms, int p_preview_size);
|
||||||
|
|
||||||
|
void set_plugin_enabled(const String &p_plugin, bool p_enabled);
|
||||||
|
bool is_plugin_enabled(const String &p_plugin) const;
|
||||||
|
|
||||||
|
// Editor GUI.
|
||||||
|
|
||||||
|
Control *get_base_control() const;
|
||||||
|
VBoxContainer *get_editor_main_screen() const;
|
||||||
|
ScriptEditor *get_script_editor() const;
|
||||||
|
|
||||||
|
void set_main_screen_editor(const String &p_name);
|
||||||
|
void set_distraction_free_mode(bool p_enter);
|
||||||
|
bool is_distraction_free_mode_enabled() const;
|
||||||
|
|
||||||
|
float get_editor_scale() const;
|
||||||
|
|
||||||
|
// Editor docks.
|
||||||
|
|
||||||
|
FileSystemDock *get_file_system_dock() const;
|
||||||
|
void select_file(const String &p_file);
|
||||||
|
Vector<String> get_selected_paths() const;
|
||||||
|
String get_current_path() const;
|
||||||
|
String get_current_directory() const;
|
||||||
|
|
||||||
|
EditorInspector *get_inspector() const;
|
||||||
|
|
||||||
|
// Object/Resource/Node editing.
|
||||||
|
|
||||||
|
void inspect_object(Object *p_obj, const String &p_for_property = String(), bool p_inspector_only = false);
|
||||||
|
|
||||||
|
void edit_resource(const Ref<Resource> &p_resource);
|
||||||
|
void edit_node(Node *p_node);
|
||||||
|
void edit_script(const Ref<Script> &p_script, int p_line = -1, int p_col = 0, bool p_grab_focus = true);
|
||||||
|
void open_scene_from_path(const String &scene_path);
|
||||||
|
void reload_scene_from_path(const String &scene_path);
|
||||||
|
|
||||||
|
PackedStringArray get_open_scenes() const;
|
||||||
|
Node *get_edited_scene_root() const;
|
||||||
|
|
||||||
|
Error save_scene();
|
||||||
|
void save_scene_as(const String &p_scene, bool p_with_preview = true);
|
||||||
|
|
||||||
|
// Scene playback.
|
||||||
|
|
||||||
|
void play_main_scene();
|
||||||
|
void play_current_scene();
|
||||||
|
void play_custom_scene(const String &scene_path);
|
||||||
|
void stop_playing_scene();
|
||||||
|
bool is_playing_scene() const;
|
||||||
|
String get_playing_scene() const;
|
||||||
|
|
||||||
|
void set_movie_maker_enabled(bool p_enabled);
|
||||||
|
bool is_movie_maker_enabled() const;
|
||||||
|
|
||||||
|
// Base.
|
||||||
|
|
||||||
|
static void create();
|
||||||
|
static void free();
|
||||||
|
|
||||||
|
EditorInterface();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // EDITOR_INTERFACE_H
|
@ -75,6 +75,7 @@
|
|||||||
#include "editor/editor_folding.h"
|
#include "editor/editor_folding.h"
|
||||||
#include "editor/editor_help.h"
|
#include "editor/editor_help.h"
|
||||||
#include "editor/editor_inspector.h"
|
#include "editor/editor_inspector.h"
|
||||||
|
#include "editor/editor_interface.h"
|
||||||
#include "editor/editor_layouts_dialog.h"
|
#include "editor/editor_layouts_dialog.h"
|
||||||
#include "editor/editor_log.h"
|
#include "editor/editor_log.h"
|
||||||
#include "editor/editor_native_shader_source_visualizer.h"
|
#include "editor/editor_native_shader_source_visualizer.h"
|
||||||
@ -7901,11 +7902,6 @@ EditorNode::EditorNode() {
|
|||||||
print_verbose("Asset Library not available (due to using Web editor, or SSL support disabled).");
|
print_verbose("Asset Library not available (due to using Web editor, or SSL support disabled).");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add interface before adding plugins.
|
|
||||||
|
|
||||||
editor_interface = memnew(EditorInterface);
|
|
||||||
add_child(editor_interface);
|
|
||||||
|
|
||||||
// More visually meaningful to have this later.
|
// More visually meaningful to have this later.
|
||||||
raise_bottom_panel_item(AnimationPlayerEditor::get_singleton());
|
raise_bottom_panel_item(AnimationPlayerEditor::get_singleton());
|
||||||
|
|
||||||
|
@ -65,6 +65,7 @@ class TabContainer;
|
|||||||
class TextureRect;
|
class TextureRect;
|
||||||
class TextureProgressBar;
|
class TextureProgressBar;
|
||||||
class Tree;
|
class Tree;
|
||||||
|
class VBoxContainer;
|
||||||
class VSplitContainer;
|
class VSplitContainer;
|
||||||
class Window;
|
class Window;
|
||||||
|
|
||||||
@ -269,7 +270,6 @@ private:
|
|||||||
|
|
||||||
EditorCommandPalette *command_palette = nullptr;
|
EditorCommandPalette *command_palette = nullptr;
|
||||||
EditorExport *editor_export = nullptr;
|
EditorExport *editor_export = nullptr;
|
||||||
EditorInterface *editor_interface = nullptr;
|
|
||||||
EditorLog *log = nullptr;
|
EditorLog *log = nullptr;
|
||||||
EditorNativeShaderSourceVisualizer *native_shader_source_visualizer = nullptr;
|
EditorNativeShaderSourceVisualizer *native_shader_source_visualizer = nullptr;
|
||||||
EditorPlugin *editor_plugin_screen = nullptr;
|
EditorPlugin *editor_plugin_screen = nullptr;
|
||||||
|
@ -91,8 +91,7 @@ String EditorPaths::get_feature_profiles_dir() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EditorPaths::create() {
|
void EditorPaths::create() {
|
||||||
ERR_FAIL_COND(singleton != nullptr);
|
memnew(EditorPaths);
|
||||||
memnew(EditorPaths());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorPaths::free() {
|
void EditorPaths::free() {
|
||||||
@ -111,6 +110,7 @@ void EditorPaths::_bind_methods() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EditorPaths::EditorPaths() {
|
EditorPaths::EditorPaths() {
|
||||||
|
ERR_FAIL_COND(singleton != nullptr);
|
||||||
singleton = this;
|
singleton = this;
|
||||||
|
|
||||||
project_data_dir = ProjectSettings::get_singleton()->get_project_data_path();
|
project_data_dir = ProjectSettings::get_singleton()->get_project_data_path();
|
||||||
|
@ -31,15 +31,13 @@
|
|||||||
#include "editor_plugin.h"
|
#include "editor_plugin.h"
|
||||||
|
|
||||||
#include "editor/debugger/editor_debugger_node.h"
|
#include "editor/debugger/editor_debugger_node.h"
|
||||||
#include "editor/editor_command_palette.h"
|
#include "editor/editor_file_system.h"
|
||||||
|
#include "editor/editor_inspector.h"
|
||||||
|
#include "editor/editor_interface.h"
|
||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
#include "editor/editor_paths.h"
|
|
||||||
#include "editor/editor_resource_preview.h"
|
|
||||||
#include "editor/editor_settings.h"
|
|
||||||
#include "editor/editor_translation_parser.h"
|
#include "editor/editor_translation_parser.h"
|
||||||
#include "editor/editor_undo_redo_manager.h"
|
#include "editor/editor_undo_redo_manager.h"
|
||||||
#include "editor/export/editor_export.h"
|
#include "editor/export/editor_export.h"
|
||||||
#include "editor/filesystem_dock.h"
|
|
||||||
#include "editor/gui/editor_title_bar.h"
|
#include "editor/gui/editor_title_bar.h"
|
||||||
#include "editor/import/editor_import_plugin.h"
|
#include "editor/import/editor_import_plugin.h"
|
||||||
#include "editor/import/resource_importer_scene.h"
|
#include "editor/import/resource_importer_scene.h"
|
||||||
@ -51,362 +49,10 @@
|
|||||||
#include "editor/plugins/script_editor_plugin.h"
|
#include "editor/plugins/script_editor_plugin.h"
|
||||||
#include "editor/project_settings_editor.h"
|
#include "editor/project_settings_editor.h"
|
||||||
#include "editor/scene_tree_dock.h"
|
#include "editor/scene_tree_dock.h"
|
||||||
#include "main/main.h"
|
|
||||||
#include "scene/3d/camera_3d.h"
|
#include "scene/3d/camera_3d.h"
|
||||||
#include "scene/gui/popup_menu.h"
|
#include "scene/gui/popup_menu.h"
|
||||||
#include "servers/rendering_server.h"
|
#include "servers/rendering_server.h"
|
||||||
|
|
||||||
TypedArray<Texture2D> EditorInterface::_make_mesh_previews(const TypedArray<Mesh> &p_meshes, int p_preview_size) {
|
|
||||||
Vector<Ref<Mesh>> meshes;
|
|
||||||
|
|
||||||
for (int i = 0; i < p_meshes.size(); i++) {
|
|
||||||
meshes.push_back(p_meshes[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector<Ref<Texture2D>> textures = make_mesh_previews(meshes, nullptr, p_preview_size);
|
|
||||||
TypedArray<Texture2D> ret;
|
|
||||||
for (int i = 0; i < textures.size(); i++) {
|
|
||||||
ret.push_back(textures[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector<Ref<Texture2D>> EditorInterface::make_mesh_previews(const Vector<Ref<Mesh>> &p_meshes, Vector<Transform3D> *p_transforms, int p_preview_size) {
|
|
||||||
int size = p_preview_size;
|
|
||||||
|
|
||||||
RID scenario = RS::get_singleton()->scenario_create();
|
|
||||||
|
|
||||||
RID viewport = RS::get_singleton()->viewport_create();
|
|
||||||
RS::get_singleton()->viewport_set_update_mode(viewport, RS::VIEWPORT_UPDATE_ALWAYS);
|
|
||||||
RS::get_singleton()->viewport_set_scenario(viewport, scenario);
|
|
||||||
RS::get_singleton()->viewport_set_size(viewport, size, size);
|
|
||||||
RS::get_singleton()->viewport_set_transparent_background(viewport, true);
|
|
||||||
RS::get_singleton()->viewport_set_active(viewport, true);
|
|
||||||
RID viewport_texture = RS::get_singleton()->viewport_get_texture(viewport);
|
|
||||||
|
|
||||||
RID camera = RS::get_singleton()->camera_create();
|
|
||||||
RS::get_singleton()->viewport_attach_camera(viewport, camera);
|
|
||||||
|
|
||||||
RID light = RS::get_singleton()->directional_light_create();
|
|
||||||
RID light_instance = RS::get_singleton()->instance_create2(light, scenario);
|
|
||||||
|
|
||||||
RID light2 = RS::get_singleton()->directional_light_create();
|
|
||||||
RS::get_singleton()->light_set_color(light2, Color(0.7, 0.7, 0.7));
|
|
||||||
RID light_instance2 = RS::get_singleton()->instance_create2(light2, scenario);
|
|
||||||
|
|
||||||
EditorProgress ep("mlib", TTR("Creating Mesh Previews"), p_meshes.size());
|
|
||||||
|
|
||||||
Vector<Ref<Texture2D>> textures;
|
|
||||||
|
|
||||||
for (int i = 0; i < p_meshes.size(); i++) {
|
|
||||||
Ref<Mesh> mesh = p_meshes[i];
|
|
||||||
if (!mesh.is_valid()) {
|
|
||||||
textures.push_back(Ref<Texture2D>());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Transform3D mesh_xform;
|
|
||||||
if (p_transforms != nullptr) {
|
|
||||||
mesh_xform = (*p_transforms)[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
RID inst = RS::get_singleton()->instance_create2(mesh->get_rid(), scenario);
|
|
||||||
RS::get_singleton()->instance_set_transform(inst, mesh_xform);
|
|
||||||
|
|
||||||
AABB aabb = mesh->get_aabb();
|
|
||||||
Vector3 ofs = aabb.get_center();
|
|
||||||
aabb.position -= ofs;
|
|
||||||
Transform3D xform;
|
|
||||||
xform.basis = Basis().rotated(Vector3(0, 1, 0), -Math_PI / 6);
|
|
||||||
xform.basis = Basis().rotated(Vector3(1, 0, 0), Math_PI / 6) * xform.basis;
|
|
||||||
AABB rot_aabb = xform.xform(aabb);
|
|
||||||
float m = MAX(rot_aabb.size.x, rot_aabb.size.y) * 0.5;
|
|
||||||
if (m == 0) {
|
|
||||||
textures.push_back(Ref<Texture2D>());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
xform.origin = -xform.basis.xform(ofs); //-ofs*m;
|
|
||||||
xform.origin.z -= rot_aabb.size.z * 2;
|
|
||||||
xform.invert();
|
|
||||||
xform = mesh_xform * xform;
|
|
||||||
|
|
||||||
RS::get_singleton()->camera_set_transform(camera, xform * Transform3D(Basis(), Vector3(0, 0, 3)));
|
|
||||||
RS::get_singleton()->camera_set_orthogonal(camera, m * 2, 0.01, 1000.0);
|
|
||||||
|
|
||||||
RS::get_singleton()->instance_set_transform(light_instance, xform * Transform3D().looking_at(Vector3(-2, -1, -1), Vector3(0, 1, 0)));
|
|
||||||
RS::get_singleton()->instance_set_transform(light_instance2, xform * Transform3D().looking_at(Vector3(+1, -1, -2), Vector3(0, 1, 0)));
|
|
||||||
|
|
||||||
ep.step(TTR("Thumbnail..."), i);
|
|
||||||
DisplayServer::get_singleton()->process_events();
|
|
||||||
Main::iteration();
|
|
||||||
Main::iteration();
|
|
||||||
Ref<Image> img = RS::get_singleton()->texture_2d_get(viewport_texture);
|
|
||||||
ERR_CONTINUE(!img.is_valid() || img->is_empty());
|
|
||||||
Ref<ImageTexture> it = ImageTexture::create_from_image(img);
|
|
||||||
|
|
||||||
RS::get_singleton()->free(inst);
|
|
||||||
|
|
||||||
textures.push_back(it);
|
|
||||||
}
|
|
||||||
|
|
||||||
RS::get_singleton()->free(viewport);
|
|
||||||
RS::get_singleton()->free(light);
|
|
||||||
RS::get_singleton()->free(light_instance);
|
|
||||||
RS::get_singleton()->free(light2);
|
|
||||||
RS::get_singleton()->free(light_instance2);
|
|
||||||
RS::get_singleton()->free(camera);
|
|
||||||
RS::get_singleton()->free(scenario);
|
|
||||||
|
|
||||||
return textures;
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::set_main_screen_editor(const String &p_name) {
|
|
||||||
EditorNode::get_singleton()->select_editor_by_name(p_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
VBoxContainer *EditorInterface::get_editor_main_screen() {
|
|
||||||
return EditorNode::get_singleton()->get_main_screen_control();
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::edit_resource(const Ref<Resource> &p_resource) {
|
|
||||||
EditorNode::get_singleton()->edit_resource(p_resource);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::edit_node(Node *p_node) {
|
|
||||||
EditorNode::get_singleton()->edit_node(p_node);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::edit_script(const Ref<Script> &p_script, int p_line, int p_col, bool p_grab_focus) {
|
|
||||||
ScriptEditor::get_singleton()->edit(p_script, p_line, p_col, p_grab_focus);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::open_scene_from_path(const String &scene_path) {
|
|
||||||
if (EditorNode::get_singleton()->is_changing_scene()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
EditorNode::get_singleton()->open_request(scene_path);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::reload_scene_from_path(const String &scene_path) {
|
|
||||||
if (EditorNode::get_singleton()->is_changing_scene()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
EditorNode::get_singleton()->reload_scene(scene_path);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::play_main_scene() {
|
|
||||||
EditorNode::get_singleton()->run_play();
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::play_current_scene() {
|
|
||||||
EditorNode::get_singleton()->run_play_current();
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::play_custom_scene(const String &scene_path) {
|
|
||||||
EditorNode::get_singleton()->run_play_custom(scene_path);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::stop_playing_scene() {
|
|
||||||
EditorNode::get_singleton()->run_stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool EditorInterface::is_playing_scene() const {
|
|
||||||
return EditorNode::get_singleton()->is_run_playing();
|
|
||||||
}
|
|
||||||
|
|
||||||
String EditorInterface::get_playing_scene() const {
|
|
||||||
return EditorNode::get_singleton()->get_run_playing_scene();
|
|
||||||
}
|
|
||||||
|
|
||||||
Node *EditorInterface::get_edited_scene_root() {
|
|
||||||
return EditorNode::get_singleton()->get_edited_scene();
|
|
||||||
}
|
|
||||||
|
|
||||||
PackedStringArray EditorInterface::get_open_scenes() const {
|
|
||||||
PackedStringArray ret;
|
|
||||||
Vector<EditorData::EditedScene> scenes = EditorNode::get_editor_data().get_edited_scenes();
|
|
||||||
|
|
||||||
int scns_amount = scenes.size();
|
|
||||||
for (int idx_scn = 0; idx_scn < scns_amount; idx_scn++) {
|
|
||||||
if (scenes[idx_scn].root == nullptr) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
ret.push_back(scenes[idx_scn].root->get_scene_file_path());
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ScriptEditor *EditorInterface::get_script_editor() {
|
|
||||||
return ScriptEditor::get_singleton();
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::select_file(const String &p_file) {
|
|
||||||
FileSystemDock::get_singleton()->select_file(p_file);
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector<String> EditorInterface::get_selected_paths() const {
|
|
||||||
return FileSystemDock::get_singleton()->get_selected_paths();
|
|
||||||
}
|
|
||||||
|
|
||||||
String EditorInterface::get_current_path() const {
|
|
||||||
return FileSystemDock::get_singleton()->get_current_path();
|
|
||||||
}
|
|
||||||
|
|
||||||
String EditorInterface::get_current_directory() const {
|
|
||||||
return FileSystemDock::get_singleton()->get_current_directory();
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::inspect_object(Object *p_obj, const String &p_for_property, bool p_inspector_only) {
|
|
||||||
EditorNode::get_singleton()->push_item(p_obj, p_for_property, p_inspector_only);
|
|
||||||
}
|
|
||||||
|
|
||||||
EditorFileSystem *EditorInterface::get_resource_file_system() {
|
|
||||||
return EditorFileSystem::get_singleton();
|
|
||||||
}
|
|
||||||
|
|
||||||
FileSystemDock *EditorInterface::get_file_system_dock() {
|
|
||||||
return FileSystemDock::get_singleton();
|
|
||||||
}
|
|
||||||
|
|
||||||
EditorSelection *EditorInterface::get_selection() {
|
|
||||||
return EditorNode::get_singleton()->get_editor_selection();
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<EditorSettings> EditorInterface::get_editor_settings() {
|
|
||||||
return EditorSettings::get_singleton();
|
|
||||||
}
|
|
||||||
EditorPaths *EditorInterface::get_editor_paths() {
|
|
||||||
return EditorPaths::get_singleton();
|
|
||||||
}
|
|
||||||
|
|
||||||
EditorResourcePreview *EditorInterface::get_resource_previewer() {
|
|
||||||
return EditorResourcePreview::get_singleton();
|
|
||||||
}
|
|
||||||
|
|
||||||
Control *EditorInterface::get_base_control() {
|
|
||||||
return EditorNode::get_singleton()->get_gui_base();
|
|
||||||
}
|
|
||||||
|
|
||||||
float EditorInterface::get_editor_scale() const {
|
|
||||||
return EDSCALE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::set_plugin_enabled(const String &p_plugin, bool p_enabled) {
|
|
||||||
EditorNode::get_singleton()->set_addon_plugin_enabled(p_plugin, p_enabled, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool EditorInterface::is_plugin_enabled(const String &p_plugin) const {
|
|
||||||
return EditorNode::get_singleton()->is_addon_plugin_enabled(p_plugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::set_movie_maker_enabled(bool p_enabled) {
|
|
||||||
EditorNode::get_singleton()->set_movie_maker_enabled(p_enabled);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool EditorInterface::is_movie_maker_enabled() const {
|
|
||||||
return EditorNode::get_singleton()->is_movie_maker_enabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
EditorInspector *EditorInterface::get_inspector() const {
|
|
||||||
return InspectorDock::get_inspector_singleton();
|
|
||||||
}
|
|
||||||
|
|
||||||
Error EditorInterface::save_scene() {
|
|
||||||
if (!get_edited_scene_root()) {
|
|
||||||
return ERR_CANT_CREATE;
|
|
||||||
}
|
|
||||||
if (get_edited_scene_root()->get_scene_file_path().is_empty()) {
|
|
||||||
return ERR_CANT_CREATE;
|
|
||||||
}
|
|
||||||
|
|
||||||
save_scene_as(get_edited_scene_root()->get_scene_file_path());
|
|
||||||
return OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::save_scene_as(const String &p_scene, bool p_with_preview) {
|
|
||||||
EditorNode::get_singleton()->save_scene_to_path(p_scene, p_with_preview);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::set_distraction_free_mode(bool p_enter) {
|
|
||||||
EditorNode::get_singleton()->set_distraction_free_mode(p_enter);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorInterface::restart_editor(bool p_save) {
|
|
||||||
if (p_save) {
|
|
||||||
EditorNode::get_singleton()->save_all_scenes();
|
|
||||||
}
|
|
||||||
EditorNode::get_singleton()->restart_editor();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool EditorInterface::is_distraction_free_mode_enabled() const {
|
|
||||||
return EditorNode::get_singleton()->is_distraction_free_mode_enabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
EditorCommandPalette *EditorInterface::get_command_palette() const {
|
|
||||||
return EditorCommandPalette::get_singleton();
|
|
||||||
}
|
|
||||||
|
|
||||||
EditorInterface *EditorInterface::singleton = nullptr;
|
|
||||||
|
|
||||||
void EditorInterface::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("inspect_object", "object", "for_property", "inspector_only"), &EditorInterface::inspect_object, DEFVAL(String()), DEFVAL(false));
|
|
||||||
ClassDB::bind_method(D_METHOD("get_selection"), &EditorInterface::get_selection);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_editor_settings"), &EditorInterface::get_editor_settings);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_script_editor"), &EditorInterface::get_script_editor);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_base_control"), &EditorInterface::get_base_control);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_editor_scale"), &EditorInterface::get_editor_scale);
|
|
||||||
ClassDB::bind_method(D_METHOD("edit_resource", "resource"), &EditorInterface::edit_resource);
|
|
||||||
ClassDB::bind_method(D_METHOD("edit_node", "node"), &EditorInterface::edit_node);
|
|
||||||
ClassDB::bind_method(D_METHOD("edit_script", "script", "line", "column", "grab_focus"), &EditorInterface::edit_script, DEFVAL(-1), DEFVAL(0), DEFVAL(true));
|
|
||||||
ClassDB::bind_method(D_METHOD("open_scene_from_path", "scene_filepath"), &EditorInterface::open_scene_from_path);
|
|
||||||
ClassDB::bind_method(D_METHOD("reload_scene_from_path", "scene_filepath"), &EditorInterface::reload_scene_from_path);
|
|
||||||
ClassDB::bind_method(D_METHOD("play_main_scene"), &EditorInterface::play_main_scene);
|
|
||||||
ClassDB::bind_method(D_METHOD("play_current_scene"), &EditorInterface::play_current_scene);
|
|
||||||
ClassDB::bind_method(D_METHOD("play_custom_scene", "scene_filepath"), &EditorInterface::play_custom_scene);
|
|
||||||
ClassDB::bind_method(D_METHOD("stop_playing_scene"), &EditorInterface::stop_playing_scene);
|
|
||||||
ClassDB::bind_method(D_METHOD("is_playing_scene"), &EditorInterface::is_playing_scene);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_playing_scene"), &EditorInterface::get_playing_scene);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_open_scenes"), &EditorInterface::get_open_scenes);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_edited_scene_root"), &EditorInterface::get_edited_scene_root);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_resource_previewer"), &EditorInterface::get_resource_previewer);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_resource_filesystem"), &EditorInterface::get_resource_file_system);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_editor_main_screen"), &EditorInterface::get_editor_main_screen);
|
|
||||||
ClassDB::bind_method(D_METHOD("make_mesh_previews", "meshes", "preview_size"), &EditorInterface::_make_mesh_previews);
|
|
||||||
ClassDB::bind_method(D_METHOD("select_file", "file"), &EditorInterface::select_file);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_selected_paths"), &EditorInterface::get_selected_paths);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_current_path"), &EditorInterface::get_current_path);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_current_directory"), &EditorInterface::get_current_directory);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_file_system_dock"), &EditorInterface::get_file_system_dock);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_editor_paths"), &EditorInterface::get_editor_paths);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_command_palette"), &EditorInterface::get_command_palette);
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_plugin_enabled", "plugin", "enabled"), &EditorInterface::set_plugin_enabled);
|
|
||||||
ClassDB::bind_method(D_METHOD("is_plugin_enabled", "plugin"), &EditorInterface::is_plugin_enabled);
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_movie_maker_enabled", "enabled"), &EditorInterface::set_movie_maker_enabled);
|
|
||||||
ClassDB::bind_method(D_METHOD("is_movie_maker_enabled"), &EditorInterface::is_movie_maker_enabled);
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_inspector"), &EditorInterface::get_inspector);
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("save_scene"), &EditorInterface::save_scene);
|
|
||||||
ClassDB::bind_method(D_METHOD("save_scene_as", "path", "with_preview"), &EditorInterface::save_scene_as, DEFVAL(true));
|
|
||||||
ClassDB::bind_method(D_METHOD("restart_editor", "save"), &EditorInterface::restart_editor, DEFVAL(true));
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_main_screen_editor", "name"), &EditorInterface::set_main_screen_editor);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_distraction_free_mode", "enter"), &EditorInterface::set_distraction_free_mode);
|
|
||||||
ClassDB::bind_method(D_METHOD("is_distraction_free_mode_enabled"), &EditorInterface::is_distraction_free_mode_enabled);
|
|
||||||
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "distraction_free_mode"), "set_distraction_free_mode", "is_distraction_free_mode_enabled");
|
|
||||||
}
|
|
||||||
|
|
||||||
EditorInterface::EditorInterface() {
|
|
||||||
singleton = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////
|
|
||||||
void EditorPlugin::add_custom_type(const String &p_type, const String &p_base, const Ref<Script> &p_script, const Ref<Texture2D> &p_icon) {
|
void EditorPlugin::add_custom_type(const String &p_type, const String &p_base, const Ref<Script> &p_script, const Ref<Texture2D> &p_icon) {
|
||||||
EditorNode::get_editor_data().add_custom_type(p_type, p_base, p_script, p_icon);
|
EditorNode::get_editor_data().add_custom_type(p_type, p_base, p_script, p_icon);
|
||||||
}
|
}
|
||||||
|
@ -38,101 +38,20 @@
|
|||||||
class Node3D;
|
class Node3D;
|
||||||
class Button;
|
class Button;
|
||||||
class PopupMenu;
|
class PopupMenu;
|
||||||
class EditorCommandPalette;
|
|
||||||
class EditorDebuggerPlugin;
|
class EditorDebuggerPlugin;
|
||||||
class EditorExport;
|
class EditorExport;
|
||||||
class EditorExportPlugin;
|
class EditorExportPlugin;
|
||||||
class EditorFileSystem;
|
|
||||||
class EditorImportPlugin;
|
class EditorImportPlugin;
|
||||||
class EditorInspector;
|
|
||||||
class EditorInspectorPlugin;
|
class EditorInspectorPlugin;
|
||||||
|
class EditorInterface;
|
||||||
class EditorNode3DGizmoPlugin;
|
class EditorNode3DGizmoPlugin;
|
||||||
class EditorPaths;
|
|
||||||
class EditorResourceConversionPlugin;
|
class EditorResourceConversionPlugin;
|
||||||
class EditorResourcePreview;
|
|
||||||
class EditorSceneFormatImporter;
|
class EditorSceneFormatImporter;
|
||||||
class EditorScenePostImportPlugin;
|
class EditorScenePostImportPlugin;
|
||||||
class EditorSelection;
|
|
||||||
class EditorSettings;
|
|
||||||
class EditorToolAddons;
|
class EditorToolAddons;
|
||||||
class EditorTranslationParserPlugin;
|
class EditorTranslationParserPlugin;
|
||||||
class EditorUndoRedoManager;
|
class EditorUndoRedoManager;
|
||||||
class FileSystemDock;
|
|
||||||
class ScriptCreateDialog;
|
class ScriptCreateDialog;
|
||||||
class ScriptEditor;
|
|
||||||
class VBoxContainer;
|
|
||||||
|
|
||||||
class EditorInterface : public Node {
|
|
||||||
GDCLASS(EditorInterface, Node);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
static EditorInterface *singleton;
|
|
||||||
|
|
||||||
TypedArray<Texture2D> _make_mesh_previews(const TypedArray<Mesh> &p_meshes, int p_preview_size);
|
|
||||||
|
|
||||||
public:
|
|
||||||
static EditorInterface *get_singleton() { return singleton; }
|
|
||||||
|
|
||||||
VBoxContainer *get_editor_main_screen();
|
|
||||||
void edit_resource(const Ref<Resource> &p_resource);
|
|
||||||
void edit_node(Node *p_node);
|
|
||||||
void edit_script(const Ref<Script> &p_script, int p_line = -1, int p_col = 0, bool p_grab_focus = true);
|
|
||||||
void open_scene_from_path(const String &scene_path);
|
|
||||||
void reload_scene_from_path(const String &scene_path);
|
|
||||||
|
|
||||||
void play_main_scene();
|
|
||||||
void play_current_scene();
|
|
||||||
void play_custom_scene(const String &scene_path);
|
|
||||||
void stop_playing_scene();
|
|
||||||
bool is_playing_scene() const;
|
|
||||||
String get_playing_scene() const;
|
|
||||||
|
|
||||||
Node *get_edited_scene_root();
|
|
||||||
PackedStringArray get_open_scenes() const;
|
|
||||||
ScriptEditor *get_script_editor();
|
|
||||||
|
|
||||||
EditorCommandPalette *get_command_palette() const;
|
|
||||||
|
|
||||||
void select_file(const String &p_file);
|
|
||||||
Vector<String> get_selected_paths() const;
|
|
||||||
String get_current_path() const;
|
|
||||||
String get_current_directory() const;
|
|
||||||
|
|
||||||
void inspect_object(Object *p_obj, const String &p_for_property = String(), bool p_inspector_only = false);
|
|
||||||
|
|
||||||
EditorSelection *get_selection();
|
|
||||||
//EditorImportExport *get_import_export();
|
|
||||||
Ref<EditorSettings> get_editor_settings();
|
|
||||||
EditorPaths *get_editor_paths();
|
|
||||||
EditorResourcePreview *get_resource_previewer();
|
|
||||||
EditorFileSystem *get_resource_file_system();
|
|
||||||
|
|
||||||
FileSystemDock *get_file_system_dock();
|
|
||||||
|
|
||||||
Control *get_base_control();
|
|
||||||
float get_editor_scale() const;
|
|
||||||
|
|
||||||
void set_plugin_enabled(const String &p_plugin, bool p_enabled);
|
|
||||||
bool is_plugin_enabled(const String &p_plugin) const;
|
|
||||||
|
|
||||||
void set_movie_maker_enabled(bool p_enabled);
|
|
||||||
bool is_movie_maker_enabled() const;
|
|
||||||
|
|
||||||
EditorInspector *get_inspector() const;
|
|
||||||
|
|
||||||
Error save_scene();
|
|
||||||
void save_scene_as(const String &p_scene, bool p_with_preview = true);
|
|
||||||
void restart_editor(bool p_save = true);
|
|
||||||
|
|
||||||
Vector<Ref<Texture2D>> make_mesh_previews(const Vector<Ref<Mesh>> &p_meshes, Vector<Transform3D> *p_transforms, int p_preview_size);
|
|
||||||
|
|
||||||
void set_main_screen_editor(const String &p_name);
|
|
||||||
void set_distraction_free_mode(bool p_enter);
|
|
||||||
bool is_distraction_free_mode_enabled() const;
|
|
||||||
|
|
||||||
EditorInterface();
|
|
||||||
};
|
|
||||||
|
|
||||||
class EditorPlugin : public Node {
|
class EditorPlugin : public Node {
|
||||||
GDCLASS(EditorPlugin, Node);
|
GDCLASS(EditorPlugin, Node);
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include "editor_run_script.h"
|
#include "editor_run_script.h"
|
||||||
|
|
||||||
|
#include "editor/editor_interface.h"
|
||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
|
|
||||||
void EditorScript::add_root_node(Node *p_node) {
|
void EditorScript::add_root_node(Node *p_node) {
|
||||||
|
@ -31,9 +31,11 @@
|
|||||||
#ifndef EDITOR_RUN_SCRIPT_H
|
#ifndef EDITOR_RUN_SCRIPT_H
|
||||||
#define EDITOR_RUN_SCRIPT_H
|
#define EDITOR_RUN_SCRIPT_H
|
||||||
|
|
||||||
|
#include "core/object/gdvirtual.gen.inc"
|
||||||
#include "core/object/ref_counted.h"
|
#include "core/object/ref_counted.h"
|
||||||
#include "editor/editor_plugin.h"
|
#include "core/object/script_language.h"
|
||||||
|
|
||||||
|
class EditorInterface;
|
||||||
class EditorNode;
|
class EditorNode;
|
||||||
|
|
||||||
class EditorScript : public RefCounted {
|
class EditorScript : public RefCounted {
|
||||||
|
@ -31,10 +31,11 @@
|
|||||||
#ifndef SCENE_TREE_EDITOR_H
|
#ifndef SCENE_TREE_EDITOR_H
|
||||||
#define SCENE_TREE_EDITOR_H
|
#define SCENE_TREE_EDITOR_H
|
||||||
|
|
||||||
#include "editor/editor_data.h"
|
|
||||||
#include "scene/gui/dialogs.h"
|
#include "scene/gui/dialogs.h"
|
||||||
#include "scene/gui/tree.h"
|
#include "scene/gui/tree.h"
|
||||||
|
|
||||||
|
class EditorSelection;
|
||||||
|
|
||||||
class SceneTreeEditor : public Control {
|
class SceneTreeEditor : public Control {
|
||||||
GDCLASS(SceneTreeEditor, Control);
|
GDCLASS(SceneTreeEditor, Control);
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ class CanvasItemEditorViewport;
|
|||||||
class ConfirmationDialog;
|
class ConfirmationDialog;
|
||||||
class EditorData;
|
class EditorData;
|
||||||
class EditorZoomWidget;
|
class EditorZoomWidget;
|
||||||
|
class EditorSelection;
|
||||||
class HScrollBar;
|
class HScrollBar;
|
||||||
class HSplitContainer;
|
class HSplitContainer;
|
||||||
class MenuButton;
|
class MenuButton;
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
#include "scene/gui/separator.h"
|
#include "scene/gui/separator.h"
|
||||||
#include "scene/gui/texture_rect.h"
|
#include "scene/gui/texture_rect.h"
|
||||||
|
|
||||||
|
class EditorSelection;
|
||||||
class GridContainer;
|
class GridContainer;
|
||||||
|
|
||||||
// Inspector controls.
|
// Inspector controls.
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "core/core_string_names.h"
|
#include "core/core_string_names.h"
|
||||||
#include "core/input/input.h"
|
#include "core/input/input.h"
|
||||||
#include "core/os/keyboard.h"
|
#include "core/os/keyboard.h"
|
||||||
|
#include "editor/editor_interface.h"
|
||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
#include "editor/editor_scale.h"
|
#include "editor/editor_scale.h"
|
||||||
#include "editor/editor_settings.h"
|
#include "editor/editor_settings.h"
|
||||||
@ -780,7 +781,7 @@ CurveEditorPlugin::CurveEditorPlugin() {
|
|||||||
curve_plugin.instantiate();
|
curve_plugin.instantiate();
|
||||||
EditorInspector::add_inspector_plugin(curve_plugin);
|
EditorInspector::add_inspector_plugin(curve_plugin);
|
||||||
|
|
||||||
get_editor_interface()->get_resource_previewer()->add_preview_generator(memnew(CurvePreviewGenerator));
|
EditorInterface::get_singleton()->get_resource_previewer()->add_preview_generator(memnew(CurvePreviewGenerator));
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------
|
//-----------------------------------
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include "gpu_particles_collision_sdf_editor_plugin.h"
|
#include "gpu_particles_collision_sdf_editor_plugin.h"
|
||||||
|
|
||||||
|
#include "editor/editor_interface.h"
|
||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
#include "editor/gui/editor_file_dialog.h"
|
#include "editor/gui/editor_file_dialog.h"
|
||||||
|
|
||||||
@ -193,7 +194,7 @@ GPUParticlesCollisionSDF3DEditorPlugin::GPUParticlesCollisionSDF3DEditorPlugin()
|
|||||||
probe_file->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE);
|
probe_file->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE);
|
||||||
probe_file->add_filter("*.exr");
|
probe_file->add_filter("*.exr");
|
||||||
probe_file->connect("file_selected", callable_mp(this, &GPUParticlesCollisionSDF3DEditorPlugin::_sdf_save_path_and_bake));
|
probe_file->connect("file_selected", callable_mp(this, &GPUParticlesCollisionSDF3DEditorPlugin::_sdf_save_path_and_bake));
|
||||||
get_editor_interface()->get_base_control()->add_child(probe_file);
|
EditorInterface::get_singleton()->get_base_control()->add_child(probe_file);
|
||||||
probe_file->set_title(TTR("Select path for SDF Texture"));
|
probe_file->set_title(TTR("Select path for SDF Texture"));
|
||||||
|
|
||||||
GPUParticlesCollisionSDF3D::bake_begin_function = bake_func_begin;
|
GPUParticlesCollisionSDF3D::bake_begin_function = bake_func_begin;
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include "mesh_library_editor_plugin.h"
|
#include "mesh_library_editor_plugin.h"
|
||||||
|
|
||||||
|
#include "editor/editor_interface.h"
|
||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
#include "editor/editor_settings.h"
|
#include "editor/editor_settings.h"
|
||||||
#include "editor/gui/editor_file_dialog.h"
|
#include "editor/gui/editor_file_dialog.h"
|
||||||
|
@ -44,6 +44,7 @@ class ColorPickerButton;
|
|||||||
class ConfirmationDialog;
|
class ConfirmationDialog;
|
||||||
class DirectionalLight3D;
|
class DirectionalLight3D;
|
||||||
class EditorData;
|
class EditorData;
|
||||||
|
class EditorSelection;
|
||||||
class EditorSpinSlider;
|
class EditorSpinSlider;
|
||||||
class HSplitContainer;
|
class HSplitContainer;
|
||||||
class LineEdit;
|
class LineEdit;
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
#include "core/config/project_settings.h"
|
#include "core/config/project_settings.h"
|
||||||
#include "core/io/resource_loader.h"
|
#include "core/io/resource_loader.h"
|
||||||
|
#include "editor/editor_interface.h"
|
||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
#include "editor/editor_scale.h"
|
#include "editor/editor_scale.h"
|
||||||
#include "editor/editor_settings.h"
|
#include "editor/editor_settings.h"
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
#include "core/os/mutex.h"
|
#include "core/os/mutex.h"
|
||||||
|
|
||||||
|
#include "editor/editor_interface.h"
|
||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
#include "editor/editor_scale.h"
|
#include "editor/editor_scale.h"
|
||||||
#include "editor/editor_settings.h"
|
#include "editor/editor_settings.h"
|
||||||
@ -209,7 +210,7 @@ void TilesEditorPlugin::make_visible(bool p_visible) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool TilesEditorPlugin::is_tile_map_selected() {
|
bool TilesEditorPlugin::is_tile_map_selected() {
|
||||||
TypedArray<Node> selection = get_editor_interface()->get_selection()->get_selected_nodes();
|
TypedArray<Node> selection = EditorInterface::get_singleton()->get_selection()->get_selected_nodes();
|
||||||
if (selection.size() == 1 && Object::cast_to<TileMap>(selection[0])) {
|
if (selection.size() == 1 && Object::cast_to<TileMap>(selection[0])) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include "voxel_gi_editor_plugin.h"
|
#include "voxel_gi_editor_plugin.h"
|
||||||
|
|
||||||
|
#include "editor/editor_interface.h"
|
||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
#include "editor/gui/editor_file_dialog.h"
|
#include "editor/gui/editor_file_dialog.h"
|
||||||
|
|
||||||
@ -190,7 +191,7 @@ VoxelGIEditorPlugin::VoxelGIEditorPlugin() {
|
|||||||
probe_file->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE);
|
probe_file->set_file_mode(EditorFileDialog::FILE_MODE_SAVE_FILE);
|
||||||
probe_file->add_filter("*.res");
|
probe_file->add_filter("*.res");
|
||||||
probe_file->connect("file_selected", callable_mp(this, &VoxelGIEditorPlugin::_voxel_gi_save_path_and_bake));
|
probe_file->connect("file_selected", callable_mp(this, &VoxelGIEditorPlugin::_voxel_gi_save_path_and_bake));
|
||||||
get_editor_interface()->get_base_control()->add_child(probe_file);
|
EditorInterface::get_singleton()->get_base_control()->add_child(probe_file);
|
||||||
probe_file->set_title(TTR("Select path for VoxelGI Data File"));
|
probe_file->set_title(TTR("Select path for VoxelGI Data File"));
|
||||||
|
|
||||||
VoxelGI::bake_begin_function = bake_func_begin;
|
VoxelGI::bake_begin_function = bake_func_begin;
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include "editor/editor_command_palette.h"
|
#include "editor/editor_command_palette.h"
|
||||||
#include "editor/editor_feature_profile.h"
|
#include "editor/editor_feature_profile.h"
|
||||||
#include "editor/editor_file_system.h"
|
#include "editor/editor_file_system.h"
|
||||||
|
#include "editor/editor_interface.h"
|
||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
#include "editor/editor_paths.h"
|
#include "editor/editor_paths.h"
|
||||||
#include "editor/editor_resource_picker.h"
|
#include "editor/editor_resource_picker.h"
|
||||||
@ -230,10 +231,14 @@ void register_editor_types() {
|
|||||||
|
|
||||||
GLOBAL_DEF("editor/version_control/plugin_name", "");
|
GLOBAL_DEF("editor/version_control/plugin_name", "");
|
||||||
GLOBAL_DEF("editor/version_control/autoload_on_startup", false);
|
GLOBAL_DEF("editor/version_control/autoload_on_startup", false);
|
||||||
|
|
||||||
|
EditorInterface::create();
|
||||||
}
|
}
|
||||||
|
|
||||||
void unregister_editor_types() {
|
void unregister_editor_types() {
|
||||||
EditorNode::cleanup();
|
EditorNode::cleanup();
|
||||||
|
EditorInterface::free();
|
||||||
|
|
||||||
if (EditorPaths::get_singleton()) {
|
if (EditorPaths::get_singleton()) {
|
||||||
EditorPaths::free();
|
EditorPaths::free();
|
||||||
}
|
}
|
||||||
|
@ -31,12 +31,13 @@
|
|||||||
#ifndef SCENE_TREE_DOCK_H
|
#ifndef SCENE_TREE_DOCK_H
|
||||||
#define SCENE_TREE_DOCK_H
|
#define SCENE_TREE_DOCK_H
|
||||||
|
|
||||||
#include "editor/editor_data.h"
|
|
||||||
#include "editor/gui/scene_tree_editor.h"
|
#include "editor/gui/scene_tree_editor.h"
|
||||||
#include "editor/script_create_dialog.h"
|
#include "editor/script_create_dialog.h"
|
||||||
#include "scene/gui/box_container.h"
|
#include "scene/gui/box_container.h"
|
||||||
#include "scene/resources/animation.h"
|
#include "scene/resources/animation.h"
|
||||||
|
|
||||||
|
class EditorData;
|
||||||
|
class EditorSelection;
|
||||||
class EditorQuickOpen;
|
class EditorQuickOpen;
|
||||||
class MenuButton;
|
class MenuButton;
|
||||||
class ReparentDialog;
|
class ReparentDialog;
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "editor_network_profiler.h"
|
#include "editor_network_profiler.h"
|
||||||
#include "replication_editor.h"
|
#include "replication_editor.h"
|
||||||
|
|
||||||
|
#include "editor/editor_interface.h"
|
||||||
#include "editor/editor_node.h"
|
#include "editor/editor_node.h"
|
||||||
|
|
||||||
void MultiplayerEditorDebugger::_bind_methods() {
|
void MultiplayerEditorDebugger::_bind_methods() {
|
||||||
@ -119,7 +120,7 @@ MultiplayerEditorPlugin::MultiplayerEditorPlugin() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MultiplayerEditorPlugin::_open_request(const String &p_path) {
|
void MultiplayerEditorPlugin::_open_request(const String &p_path) {
|
||||||
get_editor_interface()->open_scene_from_path(p_path);
|
EditorInterface::get_singleton()->open_scene_from_path(p_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiplayerEditorPlugin::_notification(int p_what) {
|
void MultiplayerEditorPlugin::_notification(int p_what) {
|
||||||
|
Loading…
Reference in New Issue
Block a user