1
0
mirror of https://github.com/godotengine/godot.git synced 2025-12-07 17:36:07 +00:00

Add editor setting for FPS mode and compat

This commit is contained in:
kobewi
2025-01-30 14:01:48 +01:00
parent ee4acfbfbf
commit 0b397d979d
6 changed files with 33 additions and 10 deletions

View File

@@ -520,6 +520,12 @@
<member name="editors/animation/default_create_reset_tracks" type="bool" setter="" getter=""> <member name="editors/animation/default_create_reset_tracks" type="bool" setter="" getter="">
If [code]true[/code], create a [code]RESET[/code] track when creating a new animation track. This track can be used to restore the animation to a "default" state. If [code]true[/code], create a [code]RESET[/code] track when creating a new animation track. This track can be used to restore the animation to a "default" state.
</member> </member>
<member name="editors/animation/default_fps_compatibility" type="bool" setter="" getter="">
Controls whether [AnimationPlayer] will apply snapping to nearest integer FPS when snapping is in Seconds mode. The option is remembered locally for a scene and this option only determines the default value when scene doesn't have local state yet.
</member>
<member name="editors/animation/default_fps_mode" type="int" setter="" getter="">
Default step mode for [AnimationPlayer] (seconds or FPS). The option is remembered locally for a scene and this option only determines the default value when scene doesn't have local state yet.
</member>
<member name="editors/animation/onion_layers_future_color" type="Color" setter="" getter=""> <member name="editors/animation/onion_layers_future_color" type="Color" setter="" getter="">
The modulate color to use for "future" frames displayed in the animation editor's onion skinning feature. The modulate color to use for "future" frames displayed in the animation editor's onion skinning feature.
</member> </member>

View File

@@ -3894,6 +3894,7 @@ bool AnimationTrackEditor::has_keying() const {
Dictionary AnimationTrackEditor::get_state() const { Dictionary AnimationTrackEditor::get_state() const {
Dictionary state; Dictionary state;
state["fps_mode"] = timeline->is_using_fps(); state["fps_mode"] = timeline->is_using_fps();
state["fps_compat"] = fps_compat->is_pressed();
state["zoom"] = zoom->get_value(); state["zoom"] = zoom->get_value();
state["offset"] = timeline->get_value(); state["offset"] = timeline->get_value();
state["v_scroll"] = scroll->get_v_scroll_bar()->get_value(); state["v_scroll"] = scroll->get_v_scroll_bar()->get_value();
@@ -3909,27 +3910,34 @@ void AnimationTrackEditor::set_state(const Dictionary &p_state) {
snap_mode->select(0); snap_mode->select(0);
} }
_snap_mode_changed(snap_mode->get_selected()); _snap_mode_changed(snap_mode->get_selected());
} else {
snap_mode->select(0);
_snap_mode_changed(snap_mode->get_selected());
} }
if (p_state.has("fps_compat")) {
fps_compat->set_pressed(p_state["fps_compat"]);
}
if (p_state.has("zoom")) { if (p_state.has("zoom")) {
zoom->set_value(p_state["zoom"]); zoom->set_value(p_state["zoom"]);
} else {
zoom->set_value(1.0);
} }
if (p_state.has("offset")) { if (p_state.has("offset")) {
timeline->set_value(p_state["offset"]); timeline->set_value(p_state["offset"]);
} else {
timeline->set_value(0);
} }
if (p_state.has("v_scroll")) { if (p_state.has("v_scroll")) {
scroll->get_v_scroll_bar()->set_value(p_state["v_scroll"]); scroll->get_v_scroll_bar()->set_value(p_state["v_scroll"]);
} else {
scroll->get_v_scroll_bar()->set_value(0);
} }
} }
void AnimationTrackEditor::clear() {
snap_mode->select(EDITOR_GET("editors/animation/default_fps_mode"));
_snap_mode_changed(snap_mode->get_selected());
fps_compat->set_pressed(EDITOR_GET("editors/animation/default_fps_compatibility"));
zoom->set_value(1.0);
timeline->set_value(0);
scroll->get_v_scroll_bar()->set_value(0);
}
void AnimationTrackEditor::cleanup() { void AnimationTrackEditor::cleanup() {
set_animation(Ref<Animation>(), read_only); set_animation(Ref<Animation>(), read_only);
} }
@@ -7704,9 +7712,9 @@ AnimationTrackEditor::AnimationTrackEditor() {
snap_mode = memnew(OptionButton); snap_mode = memnew(OptionButton);
snap_mode->add_item(TTR("Seconds")); snap_mode->add_item(TTR("Seconds"));
snap_mode->add_item(TTR("FPS")); snap_mode->add_item(TTR("FPS"));
snap_mode->set_disabled(true);
bottom_hf->add_child(snap_mode); bottom_hf->add_child(snap_mode);
snap_mode->connect(SceneStringName(item_selected), callable_mp(this, &AnimationTrackEditor::_snap_mode_changed)); snap_mode->connect(SceneStringName(item_selected), callable_mp(this, &AnimationTrackEditor::_snap_mode_changed));
snap_mode->set_disabled(true);
bottom_hf->add_child(memnew(VSeparator)); bottom_hf->add_child(memnew(VSeparator));

View File

@@ -916,6 +916,7 @@ public:
Dictionary get_state() const; Dictionary get_state() const;
void set_state(const Dictionary &p_state); void set_state(const Dictionary &p_state);
void clear();
void cleanup(); void cleanup();

View File

@@ -899,6 +899,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/polygon_editor/auto_bake_delay", 1.5, "-1.0,10.0,0.01"); EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "editors/polygon_editor/auto_bake_delay", 1.5, "-1.0,10.0,0.01");
// Animation // Animation
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "editors/animation/default_fps_mode", 0, "Seconds,FPS");
_initial_set("editors/animation/default_fps_compatibility", true);
_initial_set("editors/animation/autorename_animation_tracks", true); _initial_set("editors/animation/autorename_animation_tracks", true);
_initial_set("editors/animation/confirm_insert_track", true, true); _initial_set("editors/animation/confirm_insert_track", true, true);
_initial_set("editors/animation/default_create_bezier_tracks", false, true); _initial_set("editors/animation/default_create_bezier_tracks", false, true);

View File

@@ -923,6 +923,10 @@ void AnimationPlayerEditor::set_state(const Dictionary &p_state) {
} }
} }
void AnimationPlayerEditor::clear() {
track_editor->clear();
}
void AnimationPlayerEditor::_animation_resource_edit() { void AnimationPlayerEditor::_animation_resource_edit() {
String current = _get_current(); String current = _get_current();
if (current != String()) { if (current != String()) {

View File

@@ -266,6 +266,7 @@ public:
AnimationTrackEditor *get_track_editor() { return track_editor; } AnimationTrackEditor *get_track_editor() { return track_editor; }
Dictionary get_state() const; Dictionary get_state() const;
void set_state(const Dictionary &p_state); void set_state(const Dictionary &p_state);
void clear();
void ensure_visibility(); void ensure_visibility();
@@ -298,6 +299,7 @@ protected:
public: public:
virtual Dictionary get_state() const override { return anim_editor->get_state(); } virtual Dictionary get_state() const override { return anim_editor->get_state(); }
virtual void set_state(const Dictionary &p_state) override { anim_editor->set_state(p_state); } virtual void set_state(const Dictionary &p_state) override { anim_editor->set_state(p_state); }
virtual void clear() override { anim_editor->clear(); }
virtual String get_plugin_name() const override { return "Anim"; } virtual String get_plugin_name() const override { return "Anim"; }
bool has_main_screen() const override { return false; } bool has_main_screen() const override { return false; }