1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-06 12:20:30 +00:00

Add markers to animation

This commit is contained in:
chocola-mint
2024-08-31 15:57:34 +09:00
parent 76a135926a
commit ed13a840fa
18 changed files with 2445 additions and 102 deletions

View File

@@ -41,6 +41,7 @@
#include "editor/editor_undo_redo_manager.h"
#include "editor/gui/editor_bottom_panel.h"
#include "editor/gui/editor_file_dialog.h"
#include "editor/gui/editor_validation_panel.h"
#include "editor/inspector_dock.h"
#include "editor/plugins/canvas_item_editor_plugin.h" // For onion skinning.
#include "editor/plugins/node_3d_editor_plugin.h" // For onion skinning.
@@ -295,7 +296,14 @@ void AnimationPlayerEditor::_play_pressed() {
player->stop(); //so it won't blend with itself
}
ERR_FAIL_COND_EDMSG(!_validate_tracks(player->get_animation(current)), "Animation tracks may have any invalid key, abort playing.");
player->play(current);
PackedStringArray markers = track_editor->get_selected_section();
if (markers.size() == 2) {
StringName start_marker = markers[0];
StringName end_marker = markers[1];
player->play_section_with_markers(current, start_marker, end_marker);
} else {
player->play(current);
}
}
//unstop
@@ -312,7 +320,14 @@ void AnimationPlayerEditor::_play_from_pressed() {
}
ERR_FAIL_COND_EDMSG(!_validate_tracks(player->get_animation(current)), "Animation tracks may have any invalid key, abort playing.");
player->seek_internal(time, true, true, true);
player->play(current);
PackedStringArray markers = track_editor->get_selected_section();
if (markers.size() == 2) {
StringName start_marker = markers[0];
StringName end_marker = markers[1];
player->play_section_with_markers(current, start_marker, end_marker);
} else {
player->play(current);
}
}
//unstop
@@ -333,7 +348,14 @@ void AnimationPlayerEditor::_play_bw_pressed() {
player->stop(); //so it won't blend with itself
}
ERR_FAIL_COND_EDMSG(!_validate_tracks(player->get_animation(current)), "Animation tracks may have any invalid key, abort playing.");
player->play_backwards(current);
PackedStringArray markers = track_editor->get_selected_section();
if (markers.size() == 2) {
StringName start_marker = markers[0];
StringName end_marker = markers[1];
player->play_section_with_markers_backwards(current, start_marker, end_marker);
} else {
player->play_backwards(current);
}
}
//unstop
@@ -350,7 +372,14 @@ void AnimationPlayerEditor::_play_bw_from_pressed() {
}
ERR_FAIL_COND_EDMSG(!_validate_tracks(player->get_animation(current)), "Animation tracks may have any invalid key, abort playing.");
player->seek_internal(time, true, true, true);
player->play_backwards(current);
PackedStringArray markers = track_editor->get_selected_section();
if (markers.size() == 2) {
StringName start_marker = markers[0];
StringName end_marker = markers[1];
player->play_section_with_markers_backwards(current, start_marker, end_marker);
} else {
player->play_backwards(current);
}
}
//unstop
@@ -2397,3 +2426,24 @@ AnimationTrackKeyEditEditorPlugin::AnimationTrackKeyEditEditorPlugin() {
bool AnimationTrackKeyEditEditorPlugin::handles(Object *p_object) const {
return p_object->is_class("AnimationTrackKeyEdit");
}
bool EditorInspectorPluginAnimationMarkerKeyEdit::can_handle(Object *p_object) {
return Object::cast_to<AnimationMarkerKeyEdit>(p_object) != nullptr;
}
void EditorInspectorPluginAnimationMarkerKeyEdit::parse_begin(Object *p_object) {
AnimationMarkerKeyEdit *amk = Object::cast_to<AnimationMarkerKeyEdit>(p_object);
ERR_FAIL_NULL(amk);
amk_editor = memnew(AnimationMarkerKeyEditEditor(amk->animation, amk->marker_name, amk->use_fps));
add_custom_control(amk_editor);
}
AnimationMarkerKeyEditEditorPlugin::AnimationMarkerKeyEditEditorPlugin() {
amk_plugin = memnew(EditorInspectorPluginAnimationMarkerKeyEdit);
EditorInspector::add_inspector_plugin(amk_plugin);
}
bool AnimationMarkerKeyEditEditorPlugin::handles(Object *p_object) const {
return p_object->is_class("AnimationMarkerKeyEdit");
}