Browse Source

Merge pull request #69357 from TokageItLab/byebye-trigger

Remove `UPDATE_TRIGGER` mode from `ValueTrack::UpdateMode` & Match behaviors between `AnimationTree` and `AnimationPlayer`
Rémi Verschelde 2 years ago
parent
commit
a738f50886

+ 0 - 1
core/core_constants.cpp

@@ -637,7 +637,6 @@ void register_global_constants() {
 	BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_SCRIPT_VARIABLE);
 	BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_SCRIPT_VARIABLE);
 
 
 	BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_STORE_IF_NULL);
 	BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_STORE_IF_NULL);
-	BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_ANIMATE_AS_TRIGGER);
 	BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED);
 	BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED);
 	BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_SCRIPT_DEFAULT_VALUE);
 	BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_SCRIPT_DEFAULT_VALUE);
 	BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_CLASS_IS_ENUM);
 	BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_CLASS_IS_ENUM);

+ 15 - 16
core/object/object.h

@@ -113,22 +113,21 @@ enum PropertyUsageFlags {
 	PROPERTY_USAGE_RESTART_IF_CHANGED = 1 << 11,
 	PROPERTY_USAGE_RESTART_IF_CHANGED = 1 << 11,
 	PROPERTY_USAGE_SCRIPT_VARIABLE = 1 << 12,
 	PROPERTY_USAGE_SCRIPT_VARIABLE = 1 << 12,
 	PROPERTY_USAGE_STORE_IF_NULL = 1 << 13,
 	PROPERTY_USAGE_STORE_IF_NULL = 1 << 13,
-	PROPERTY_USAGE_ANIMATE_AS_TRIGGER = 1 << 14,
-	PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED = 1 << 15,
-	PROPERTY_USAGE_SCRIPT_DEFAULT_VALUE = 1 << 16,
-	PROPERTY_USAGE_CLASS_IS_ENUM = 1 << 17,
-	PROPERTY_USAGE_NIL_IS_VARIANT = 1 << 18,
-	PROPERTY_USAGE_INTERNAL = 1 << 19,
-	PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE = 1 << 20, // If the object is duplicated also this property will be duplicated.
-	PROPERTY_USAGE_HIGH_END_GFX = 1 << 21,
-	PROPERTY_USAGE_NODE_PATH_FROM_SCENE_ROOT = 1 << 22,
-	PROPERTY_USAGE_RESOURCE_NOT_PERSISTENT = 1 << 23,
-	PROPERTY_USAGE_KEYING_INCREMENTS = 1 << 24, // Used in inspector to increment property when keyed in animation player.
-	PROPERTY_USAGE_DEFERRED_SET_RESOURCE = 1 << 25, // when loading, the resource for this property can be set at the end of loading.
-	PROPERTY_USAGE_EDITOR_INSTANTIATE_OBJECT = 1 << 26, // For Object properties, instantiate them when creating in editor.
-	PROPERTY_USAGE_EDITOR_BASIC_SETTING = 1 << 27, //for project or editor settings, show when basic settings are selected.
-	PROPERTY_USAGE_READ_ONLY = 1 << 28, // Mark a property as read-only in the inspector.
-	PROPERTY_USAGE_ARRAY = 1 << 29, // Used in the inspector to group properties as elements of an array.
+	PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED = 1 << 14,
+	PROPERTY_USAGE_SCRIPT_DEFAULT_VALUE = 1 << 15,
+	PROPERTY_USAGE_CLASS_IS_ENUM = 1 << 16,
+	PROPERTY_USAGE_NIL_IS_VARIANT = 1 << 17,
+	PROPERTY_USAGE_INTERNAL = 1 << 18,
+	PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE = 1 << 19, // If the object is duplicated also this property will be duplicated.
+	PROPERTY_USAGE_HIGH_END_GFX = 1 << 20,
+	PROPERTY_USAGE_NODE_PATH_FROM_SCENE_ROOT = 1 << 21,
+	PROPERTY_USAGE_RESOURCE_NOT_PERSISTENT = 1 << 22,
+	PROPERTY_USAGE_KEYING_INCREMENTS = 1 << 23, // Used in inspector to increment property when keyed in animation player.
+	PROPERTY_USAGE_DEFERRED_SET_RESOURCE = 1 << 24, // when loading, the resource for this property can be set at the end of loading.
+	PROPERTY_USAGE_EDITOR_INSTANTIATE_OBJECT = 1 << 25, // For Object properties, instantiate them when creating in editor.
+	PROPERTY_USAGE_EDITOR_BASIC_SETTING = 1 << 26, //for project or editor settings, show when basic settings are selected.
+	PROPERTY_USAGE_READ_ONLY = 1 << 27, // Mark a property as read-only in the inspector.
+	PROPERTY_USAGE_ARRAY = 1 << 28, // Used in the inspector to group properties as elements of an array.
 
 
 	PROPERTY_USAGE_DEFAULT = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_EDITOR,
 	PROPERTY_USAGE_DEFAULT = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_EDITOR,
 	PROPERTY_USAGE_DEFAULT_INTL = PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNATIONALIZED,
 	PROPERTY_USAGE_DEFAULT_INTL = PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNATIONALIZED,

+ 15 - 17
doc/classes/@GlobalScope.xml

@@ -2877,40 +2877,38 @@
 		</constant>
 		</constant>
 		<constant name="PROPERTY_USAGE_STORE_IF_NULL" value="8192" enum="PropertyUsageFlags">
 		<constant name="PROPERTY_USAGE_STORE_IF_NULL" value="8192" enum="PropertyUsageFlags">
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_ANIMATE_AS_TRIGGER" value="16384" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED" value="16384" enum="PropertyUsageFlags">
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED" value="32768" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_SCRIPT_DEFAULT_VALUE" value="32768" enum="PropertyUsageFlags">
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_SCRIPT_DEFAULT_VALUE" value="65536" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_CLASS_IS_ENUM" value="65536" enum="PropertyUsageFlags">
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_CLASS_IS_ENUM" value="131072" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_NIL_IS_VARIANT" value="131072" enum="PropertyUsageFlags">
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_NIL_IS_VARIANT" value="262144" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_INTERNAL" value="262144" enum="PropertyUsageFlags">
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_INTERNAL" value="524288" enum="PropertyUsageFlags">
-		</constant>
-		<constant name="PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE" value="1048576" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE" value="524288" enum="PropertyUsageFlags">
 			If the property is a [Resource], a new copy of it is always created when calling [method Node.duplicate] or [method Resource.duplicate].
 			If the property is a [Resource], a new copy of it is always created when calling [method Node.duplicate] or [method Resource.duplicate].
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_HIGH_END_GFX" value="2097152" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_HIGH_END_GFX" value="1048576" enum="PropertyUsageFlags">
 			The property is only shown in the editor if modern renderers are supported (GLES3 is excluded).
 			The property is only shown in the editor if modern renderers are supported (GLES3 is excluded).
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_NODE_PATH_FROM_SCENE_ROOT" value="4194304" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_NODE_PATH_FROM_SCENE_ROOT" value="2097152" enum="PropertyUsageFlags">
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_RESOURCE_NOT_PERSISTENT" value="8388608" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_RESOURCE_NOT_PERSISTENT" value="4194304" enum="PropertyUsageFlags">
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_KEYING_INCREMENTS" value="16777216" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_KEYING_INCREMENTS" value="8388608" enum="PropertyUsageFlags">
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_DEFERRED_SET_RESOURCE" value="33554432" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_DEFERRED_SET_RESOURCE" value="16777216" enum="PropertyUsageFlags">
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_EDITOR_INSTANTIATE_OBJECT" value="67108864" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_EDITOR_INSTANTIATE_OBJECT" value="33554432" enum="PropertyUsageFlags">
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_EDITOR_BASIC_SETTING" value="134217728" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_EDITOR_BASIC_SETTING" value="67108864" enum="PropertyUsageFlags">
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_READ_ONLY" value="268435456" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_READ_ONLY" value="134217728" enum="PropertyUsageFlags">
 			The property is read-only in the [EditorInspector].
 			The property is read-only in the [EditorInspector].
 		</constant>
 		</constant>
-		<constant name="PROPERTY_USAGE_ARRAY" value="536870912" enum="PropertyUsageFlags">
+		<constant name="PROPERTY_USAGE_ARRAY" value="268435456" enum="PropertyUsageFlags">
 			The property is an array.
 			The property is an array.
 		</constant>
 		</constant>
 		<constant name="PROPERTY_USAGE_DEFAULT" value="6" enum="PropertyUsageFlags">
 		<constant name="PROPERTY_USAGE_DEFAULT" value="6" enum="PropertyUsageFlags">

+ 2 - 5
doc/classes/Animation.xml

@@ -596,15 +596,12 @@
 			[b]Note:[/b] The result value is always normalized and may not match the key value.
 			[b]Note:[/b] The result value is always normalized and may not match the key value.
 		</constant>
 		</constant>
 		<constant name="UPDATE_CONTINUOUS" value="0" enum="UpdateMode">
 		<constant name="UPDATE_CONTINUOUS" value="0" enum="UpdateMode">
-			Update between keyframes.
+			Update between keyframes and hold the value.
 		</constant>
 		</constant>
 		<constant name="UPDATE_DISCRETE" value="1" enum="UpdateMode">
 		<constant name="UPDATE_DISCRETE" value="1" enum="UpdateMode">
-			Update at the keyframes and hold the value.
-		</constant>
-		<constant name="UPDATE_TRIGGER" value="2" enum="UpdateMode">
 			Update at the keyframes.
 			Update at the keyframes.
 		</constant>
 		</constant>
-		<constant name="UPDATE_CAPTURE" value="3" enum="UpdateMode">
+		<constant name="UPDATE_CAPTURE" value="2" enum="UpdateMode">
 			Same as linear interpolation, but also interpolates from the current value (i.e. dynamically at runtime) if the first key isn't at 0 seconds.
 			Same as linear interpolation, but also interpolates from the current value (i.e. dynamically at runtime) if the first key isn't at 0 seconds.
 		</constant>
 		</constant>
 		<constant name="LOOP_NONE" value="0" enum="LoopMode">
 		<constant name="LOOP_NONE" value="0" enum="LoopMode">

+ 1 - 12
editor/animation_track_editor.cpp

@@ -2134,10 +2134,9 @@ void AnimationTrackEdit::_notification(int p_what) {
 					get_theme_icon(SNAME("InterpLinearAngle"), SNAME("EditorIcons")),
 					get_theme_icon(SNAME("InterpLinearAngle"), SNAME("EditorIcons")),
 					get_theme_icon(SNAME("InterpCubicAngle"), SNAME("EditorIcons")),
 					get_theme_icon(SNAME("InterpCubicAngle"), SNAME("EditorIcons")),
 				};
 				};
-				Ref<Texture2D> cont_icon[4] = {
+				Ref<Texture2D> cont_icon[3] = {
 					get_theme_icon(SNAME("TrackContinuous"), SNAME("EditorIcons")),
 					get_theme_icon(SNAME("TrackContinuous"), SNAME("EditorIcons")),
 					get_theme_icon(SNAME("TrackDiscrete"), SNAME("EditorIcons")),
 					get_theme_icon(SNAME("TrackDiscrete"), SNAME("EditorIcons")),
-					get_theme_icon(SNAME("TrackTrigger"), SNAME("EditorIcons")),
 					get_theme_icon(SNAME("TrackCapture"), SNAME("EditorIcons"))
 					get_theme_icon(SNAME("TrackCapture"), SNAME("EditorIcons"))
 				};
 				};
 
 
@@ -2829,7 +2828,6 @@ void AnimationTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
 				menu->clear();
 				menu->clear();
 				menu->add_icon_item(get_theme_icon(SNAME("TrackContinuous"), SNAME("EditorIcons")), TTR("Continuous"), MENU_CALL_MODE_CONTINUOUS);
 				menu->add_icon_item(get_theme_icon(SNAME("TrackContinuous"), SNAME("EditorIcons")), TTR("Continuous"), MENU_CALL_MODE_CONTINUOUS);
 				menu->add_icon_item(get_theme_icon(SNAME("TrackDiscrete"), SNAME("EditorIcons")), TTR("Discrete"), MENU_CALL_MODE_DISCRETE);
 				menu->add_icon_item(get_theme_icon(SNAME("TrackDiscrete"), SNAME("EditorIcons")), TTR("Discrete"), MENU_CALL_MODE_DISCRETE);
-				menu->add_icon_item(get_theme_icon(SNAME("TrackTrigger"), SNAME("EditorIcons")), TTR("Trigger"), MENU_CALL_MODE_TRIGGER);
 				menu->add_icon_item(get_theme_icon(SNAME("TrackCapture"), SNAME("EditorIcons")), TTR("Capture"), MENU_CALL_MODE_CAPTURE);
 				menu->add_icon_item(get_theme_icon(SNAME("TrackCapture"), SNAME("EditorIcons")), TTR("Capture"), MENU_CALL_MODE_CAPTURE);
 				menu->reset_size();
 				menu->reset_size();
 
 
@@ -3194,7 +3192,6 @@ void AnimationTrackEdit::_menu_selected(int p_index) {
 	switch (p_index) {
 	switch (p_index) {
 		case MENU_CALL_MODE_CONTINUOUS:
 		case MENU_CALL_MODE_CONTINUOUS:
 		case MENU_CALL_MODE_DISCRETE:
 		case MENU_CALL_MODE_DISCRETE:
-		case MENU_CALL_MODE_TRIGGER:
 		case MENU_CALL_MODE_CAPTURE: {
 		case MENU_CALL_MODE_CAPTURE: {
 			Animation::UpdateMode update_mode = Animation::UpdateMode(p_index);
 			Animation::UpdateMode update_mode = Animation::UpdateMode(p_index);
 			Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
 			Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
@@ -4322,10 +4319,6 @@ AnimationTrackEditor::TrackIndices AnimationTrackEditor::_confirm_insert(InsertD
 					h.type == Variant::TRANSFORM3D) {
 					h.type == Variant::TRANSFORM3D) {
 				update_mode = Animation::UPDATE_CONTINUOUS;
 				update_mode = Animation::UPDATE_CONTINUOUS;
 			}
 			}
-
-			if (h.usage & PROPERTY_USAGE_ANIMATE_AS_TRIGGER) {
-				update_mode = Animation::UPDATE_TRIGGER;
-			}
 		}
 		}
 	}
 	}
 
 
@@ -4953,10 +4946,6 @@ void AnimationTrackEditor::_new_track_property_selected(String p_name) {
 					h.type == Variant::TRANSFORM3D) {
 					h.type == Variant::TRANSFORM3D) {
 				update_mode = Animation::UPDATE_CONTINUOUS;
 				update_mode = Animation::UPDATE_CONTINUOUS;
 			}
 			}
-
-			if (h.usage & PROPERTY_USAGE_ANIMATE_AS_TRIGGER) {
-				update_mode = Animation::UPDATE_TRIGGER;
-			}
 		}
 		}
 
 
 		undo_redo->create_action(TTR("Add Track"));
 		undo_redo->create_action(TTR("Add Track"));

+ 0 - 1
editor/animation_track_editor.h

@@ -138,7 +138,6 @@ class AnimationTrackEdit : public Control {
 	enum {
 	enum {
 		MENU_CALL_MODE_CONTINUOUS,
 		MENU_CALL_MODE_CONTINUOUS,
 		MENU_CALL_MODE_DISCRETE,
 		MENU_CALL_MODE_DISCRETE,
-		MENU_CALL_MODE_TRIGGER,
 		MENU_CALL_MODE_CAPTURE,
 		MENU_CALL_MODE_CAPTURE,
 		MENU_INTERPOLATION_NEAREST,
 		MENU_INTERPOLATION_NEAREST,
 		MENU_INTERPOLATION_LINEAR,
 		MENU_INTERPOLATION_LINEAR,

+ 0 - 1
editor/icons/TrackTrigger.svg

@@ -1 +0,0 @@
-<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h2v4h2v-4h2v-2zm13 0a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-3 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-3 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1z" fill="#f68f45"/></svg>

+ 31 - 21
scene/animation/animation_player.cpp

@@ -664,7 +664,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
 					}
 					}
 				}
 				}
 
 
-				if (update_mode == Animation::UPDATE_CONTINUOUS || update_mode == Animation::UPDATE_CAPTURE || (p_delta == 0 && update_mode == Animation::UPDATE_DISCRETE)) { //delta == 0 means seek
+				if (update_mode == Animation::UPDATE_CONTINUOUS || update_mode == Animation::UPDATE_CAPTURE) {
 					Variant value = a->value_track_interpolate(i, p_time);
 					Variant value = a->value_track_interpolate(i, p_time);
 
 
 					if (value == Variant()) {
 					if (value == Variant()) {
@@ -681,15 +681,23 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
 						pa->value_accum = Animation::interpolate_variant(pa->value_accum, value, p_interp);
 						pa->value_accum = Animation::interpolate_variant(pa->value_accum, value, p_interp);
 					}
 					}
 
 
-				} else if (p_is_current && p_delta != 0) {
+				} else {
 					List<int> indices;
 					List<int> indices;
-					if (p_started) {
-						int first_key = a->track_find_key(i, p_prev_time, true);
-						if (first_key >= 0) {
-							indices.push_back(first_key);
+
+					if (p_seeked) {
+						int found_key = a->track_find_key(i, p_time);
+						if (found_key >= 0) {
+							indices.push_back(found_key);
 						}
 						}
+					} else {
+						if (p_started) {
+							int first_key = a->track_find_key(i, p_prev_time, true);
+							if (first_key >= 0) {
+								indices.push_back(first_key);
+							}
+						}
+						a->track_get_key_indices_in_range(i, p_time, p_delta, &indices, p_looped_flag);
 					}
 					}
-					a->track_get_key_indices_in_range(i, p_time, p_delta, &indices, p_looped_flag);
 
 
 					for (int &F : indices) {
 					for (int &F : indices) {
 						Variant value = a->track_get_key_value(i, F);
 						Variant value = a->track_get_key_value(i, F);
@@ -740,21 +748,26 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
 				if (!nc->node) {
 				if (!nc->node) {
 					continue;
 					continue;
 				}
 				}
-				if (p_delta == 0) {
-					continue;
-				}
 				if (!p_is_current) {
 				if (!p_is_current) {
 					break;
 					break;
 				}
 				}
 
 
 				List<int> indices;
 				List<int> indices;
-				if (p_started) {
-					int first_key = a->track_find_key(i, p_prev_time, true);
-					if (first_key >= 0) {
-						indices.push_back(first_key);
+
+				if (p_seeked) {
+					int found_key = a->track_find_key(i, p_time);
+					if (found_key >= 0) {
+						indices.push_back(found_key);
+					}
+				} else {
+					if (p_started) {
+						int first_key = a->track_find_key(i, p_prev_time, true);
+						if (first_key >= 0) {
+							indices.push_back(first_key);
+						}
 					}
 					}
+					a->track_get_key_indices_in_range(i, p_time, p_delta, &indices, p_looped_flag);
 				}
 				}
-				a->track_get_key_indices_in_range(i, p_time, p_delta, &indices, p_looped_flag);
 
 
 				for (int &E : indices) {
 				for (int &E : indices) {
 					StringName method = a->method_track_get_name(i, E);
 					StringName method = a->method_track_get_name(i, E);
@@ -798,9 +811,6 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
 				if (!nc->node) {
 				if (!nc->node) {
 					continue;
 					continue;
 				}
 				}
-				if (p_delta == 0) {
-					continue;
-				}
 
 
 				if (p_seeked) {
 				if (p_seeked) {
 					//find whatever should be playing
 					//find whatever should be playing
@@ -910,7 +920,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
 					continue;
 					continue;
 				}
 				}
 
 
-				if (p_delta == 0 || p_seeked) {
+				if (p_seeked) {
 					//seek
 					//seek
 					int idx = a->track_find_key(i, p_time);
 					int idx = a->track_find_key(i, p_time);
 					if (idx < 0) {
 					if (idx < 0) {
@@ -1056,7 +1066,7 @@ void AnimationPlayer::_animation_process2(double p_delta, bool p_started) {
 
 
 	accum_pass++;
 	accum_pass++;
 
 
-	_animation_process_data(c.current, p_delta, 1.0f, c.seeked && p_delta != 0, p_started);
+	_animation_process_data(c.current, p_delta, 1.0f, c.seeked, p_started);
 	if (p_delta != 0) {
 	if (p_delta != 0) {
 		c.seeked = false;
 		c.seeked = false;
 	}
 	}
@@ -2135,7 +2145,7 @@ void AnimationPlayer::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("advance", "delta"), &AnimationPlayer::advance);
 	ClassDB::bind_method(D_METHOD("advance", "delta"), &AnimationPlayer::advance);
 
 
 	ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "root_node"), "set_root", "get_root");
 	ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "root_node"), "set_root", "get_root");
-	ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "current_animation", PROPERTY_HINT_ENUM, "", PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_ANIMATE_AS_TRIGGER), "set_current_animation", "get_current_animation");
+	ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "current_animation", PROPERTY_HINT_ENUM, "", PROPERTY_USAGE_EDITOR), "set_current_animation", "get_current_animation");
 	ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "assigned_animation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_assigned_animation", "get_assigned_animation");
 	ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "assigned_animation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_assigned_animation", "get_assigned_animation");
 	ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "autoplay", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_autoplay", "get_autoplay");
 	ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "autoplay", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_autoplay", "get_autoplay");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "reset_on_save", PROPERTY_HINT_NONE, ""), "set_reset_on_save_enabled", "is_reset_on_save_enabled");
 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "reset_on_save", PROPERTY_HINT_NONE, ""), "set_reset_on_save_enabled", "is_reset_on_save_enabled");

+ 4 - 4
scene/animation/animation_tree.cpp

@@ -586,7 +586,7 @@ bool AnimationTree::_update_caches(AnimationPlayer *player) {
 							track_value->object = child;
 							track_value->object = child;
 						}
 						}
 
 
-						track_value->is_discrete = anim->value_track_get_update_mode(i) == Animation::UPDATE_DISCRETE || anim->value_track_get_update_mode(i) == Animation::UPDATE_TRIGGER;
+						track_value->is_discrete = anim->value_track_get_update_mode(i) == Animation::UPDATE_DISCRETE;
 						track_value->is_using_angle = anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_LINEAR_ANGLE || anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_CUBIC_ANGLE;
 						track_value->is_using_angle = anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_LINEAR_ANGLE || anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_CUBIC_ANGLE;
 
 
 						track_value->subpath = leftover_path;
 						track_value->subpath = leftover_path;
@@ -803,11 +803,11 @@ bool AnimationTree::_update_caches(AnimationPlayer *player) {
 				TrackCacheValue *track_value = static_cast<TrackCacheValue *>(track);
 				TrackCacheValue *track_value = static_cast<TrackCacheValue *>(track);
 				bool was_discrete = track_value->is_discrete;
 				bool was_discrete = track_value->is_discrete;
 				bool was_using_angle = track_value->is_using_angle;
 				bool was_using_angle = track_value->is_using_angle;
-				track_value->is_discrete |= anim->value_track_get_update_mode(i) == Animation::UPDATE_DISCRETE || anim->value_track_get_update_mode(i) == Animation::UPDATE_TRIGGER;
+				track_value->is_discrete |= anim->value_track_get_update_mode(i) == Animation::UPDATE_DISCRETE;
 				track_value->is_using_angle |= anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_LINEAR_ANGLE || anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_CUBIC_ANGLE;
 				track_value->is_using_angle |= anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_LINEAR_ANGLE || anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_CUBIC_ANGLE;
 
 
 				if (was_discrete != track_value->is_discrete) {
 				if (was_discrete != track_value->is_discrete) {
-					ERR_PRINT_ED("Value track: " + String(path) + " with different update modes are blended. Blending prioritizes Discrete/Trigger mode, so other update mode tracks will not be blended.");
+					ERR_PRINT_ED("Value track: " + String(path) + " with different update modes are blended. Blending prioritizes Discrete mode, so other update mode tracks will not be blended.");
 				}
 				}
 				if (was_using_angle != track_value->is_using_angle) {
 				if (was_using_angle != track_value->is_using_angle) {
 					WARN_PRINT_ED("Value track: " + String(path) + " with different interpolation types for rotation are blended. Blending prioritizes angle interpolation, so the blending result uses the shortest path referenced to the initial (RESET animation) value.");
 					WARN_PRINT_ED("Value track: " + String(path) + " with different interpolation types for rotation are blended. Blending prioritizes angle interpolation, so the blending result uses the shortest path referenced to the initial (RESET animation) value.");
@@ -1670,7 +1670,7 @@ void AnimationTree::_process_graph(double p_delta) {
 					TrackCacheValue *t = static_cast<TrackCacheValue *>(track);
 					TrackCacheValue *t = static_cast<TrackCacheValue *>(track);
 
 
 					if (t->is_discrete) {
 					if (t->is_discrete) {
-						break; // Don't overwrite the value set by UPDATE_DISCRETE or UPDATE_TRIGGER.
+						break; // Don't overwrite the value set by UPDATE_DISCRETE.
 					}
 					}
 
 
 					if (t->init_value.get_type() == Variant::BOOL) {
 					if (t->init_value.get_type() == Variant::BOOL) {

+ 1 - 2
scene/resources/animation.cpp

@@ -2709,7 +2709,7 @@ void Animation::value_track_set_update_mode(int p_track, UpdateMode p_mode) {
 	ERR_FAIL_INDEX(p_track, tracks.size());
 	ERR_FAIL_INDEX(p_track, tracks.size());
 	Track *t = tracks[p_track];
 	Track *t = tracks[p_track];
 	ERR_FAIL_COND(t->type != TYPE_VALUE);
 	ERR_FAIL_COND(t->type != TYPE_VALUE);
-	ERR_FAIL_INDEX((int)p_mode, 4);
+	ERR_FAIL_INDEX((int)p_mode, 3);
 
 
 	ValueTrack *vt = static_cast<ValueTrack *>(t);
 	ValueTrack *vt = static_cast<ValueTrack *>(t);
 	vt->update_mode = p_mode;
 	vt->update_mode = p_mode;
@@ -3896,7 +3896,6 @@ void Animation::_bind_methods() {
 
 
 	BIND_ENUM_CONSTANT(UPDATE_CONTINUOUS);
 	BIND_ENUM_CONSTANT(UPDATE_CONTINUOUS);
 	BIND_ENUM_CONSTANT(UPDATE_DISCRETE);
 	BIND_ENUM_CONSTANT(UPDATE_DISCRETE);
-	BIND_ENUM_CONSTANT(UPDATE_TRIGGER);
 	BIND_ENUM_CONSTANT(UPDATE_CAPTURE);
 	BIND_ENUM_CONSTANT(UPDATE_CAPTURE);
 
 
 	BIND_ENUM_CONSTANT(LOOP_NONE);
 	BIND_ENUM_CONSTANT(LOOP_NONE);

+ 0 - 1
scene/resources/animation.h

@@ -64,7 +64,6 @@ public:
 	enum UpdateMode {
 	enum UpdateMode {
 		UPDATE_CONTINUOUS,
 		UPDATE_CONTINUOUS,
 		UPDATE_DISCRETE,
 		UPDATE_DISCRETE,
-		UPDATE_TRIGGER,
 		UPDATE_CAPTURE,
 		UPDATE_CAPTURE,
 	};
 	};