-Properly keep animation editor and viewport state while switching scene tabs
This commit is contained in:
parent
b4acd18f32
commit
1bad27e1f8
4 changed files with 67 additions and 1 deletions
|
@ -1765,6 +1765,7 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
|
|||
|
||||
int idx = editor_data.add_edited_scene(-1);
|
||||
_scene_tab_changed(idx);
|
||||
editor_data.clear_editor_states();
|
||||
|
||||
//_cleanup_scene();
|
||||
|
||||
|
|
|
@ -549,6 +549,49 @@ void AnimationPlayerEditor::ensure_visibility() {
|
|||
_animation_edit();
|
||||
}
|
||||
|
||||
Dictionary AnimationPlayerEditor::get_state() const {
|
||||
|
||||
Dictionary d;
|
||||
|
||||
d["visible"]=is_visible();
|
||||
if (is_visible() && player) {
|
||||
d["player"]=EditorNode::get_singleton()->get_edited_scene()->get_path_to(player);
|
||||
d["animation"]=player->get_current_animation();
|
||||
d["editing"]=edit_anim->is_pressed();
|
||||
}
|
||||
|
||||
return d;
|
||||
|
||||
}
|
||||
void AnimationPlayerEditor::set_state(const Dictionary& p_state) {
|
||||
|
||||
if (p_state.has("visible") && p_state["visible"]) {
|
||||
|
||||
Node *n = EditorNode::get_singleton()->get_edited_scene()->get_node(p_state["player"]);
|
||||
if (n && n->cast_to<AnimationPlayer>()) {
|
||||
player=n->cast_to<AnimationPlayer>();
|
||||
_update_player();
|
||||
show();
|
||||
set_process(true);
|
||||
ensure_visibility();
|
||||
EditorNode::get_singleton()->animation_panel_make_visible(true);
|
||||
|
||||
if (p_state.has("animation")) {
|
||||
String anim = p_state["animation"];
|
||||
_select_anim_by_name(anim);
|
||||
if (p_state.has("editing") && p_state["editing"]) {
|
||||
|
||||
edit_anim->set_pressed(true);
|
||||
_animation_edit();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void AnimationPlayerEditor::_animation_resource_edit() {
|
||||
|
||||
if (animation->get_item_count()) {
|
||||
|
|
|
@ -151,6 +151,10 @@ protected:
|
|||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
Dictionary get_state() const;
|
||||
void set_state(const Dictionary& p_state);
|
||||
|
||||
|
||||
void ensure_visibility();
|
||||
|
||||
void set_undo_redo(UndoRedo *p_undo_redo) { undo_redo=p_undo_redo; }
|
||||
|
@ -167,6 +171,9 @@ class AnimationPlayerEditorPlugin : public EditorPlugin {
|
|||
|
||||
public:
|
||||
|
||||
virtual Dictionary get_state() const { return anim_editor->get_state(); }
|
||||
virtual void set_state(const Dictionary& p_state) { anim_editor->set_state(p_state); }
|
||||
|
||||
virtual String get_name() const { return "Anim"; }
|
||||
bool has_main_screen() const { return false; }
|
||||
virtual void edit(Object *p_node);
|
||||
|
|
|
@ -2168,7 +2168,18 @@ void SpatialEditorViewport::set_state(const Dictionary& p_state) {
|
|||
view_menu->get_popup()->set_item_checked( idx, listener );
|
||||
}
|
||||
|
||||
|
||||
if (p_state.has("previewing")) {
|
||||
Node *pv = EditorNode::get_singleton()->get_edited_scene()->get_node(p_state["previewing"]);
|
||||
if (pv && pv->cast_to<Camera>()) {
|
||||
previewing=pv->cast_to<Camera>();
|
||||
previewing->connect("exit_tree",this,"_preview_exited_scene");
|
||||
VS::get_singleton()->viewport_attach_camera( viewport->get_viewport(), previewing->get_camera() ); //replace
|
||||
view_menu->hide();
|
||||
surface->update();
|
||||
preview_camera->set_pressed(true);
|
||||
preview_camera->show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Dictionary SpatialEditorViewport::get_state() const {
|
||||
|
@ -2181,6 +2192,10 @@ Dictionary SpatialEditorViewport::get_state() const {
|
|||
d["use_environment"]=camera->get_environment().is_valid();
|
||||
d["use_orthogonal"]=camera->get_projection()==Camera::PROJECTION_ORTHOGONAL;
|
||||
d["listener"]=viewport->is_audio_listener();
|
||||
if (previewing) {
|
||||
d["previewing"]=EditorNode::get_singleton()->get_edited_scene()->get_path_to(previewing);
|
||||
}
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue