mirror of
https://github.com/godotengine/godot.git
synced 2024-11-22 04:06:14 +00:00
Remove UPDATE_TRIGGER & Match behaviors between AnimationTree/Player
#69357
This commit is contained in:
parent
7bffdca41c
commit
83135aa122
@ -637,7 +637,6 @@ void register_global_constants() {
|
||||
BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_SCRIPT_VARIABLE);
|
||||
|
||||
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_SCRIPT_DEFAULT_VALUE);
|
||||
BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_CLASS_IS_ENUM);
|
||||
|
@ -113,22 +113,21 @@ enum PropertyUsageFlags {
|
||||
PROPERTY_USAGE_RESTART_IF_CHANGED = 1 << 11,
|
||||
PROPERTY_USAGE_SCRIPT_VARIABLE = 1 << 12,
|
||||
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_INTL = PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_INTERNATIONALIZED,
|
||||
|
@ -2877,40 +2877,38 @@
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_STORE_IF_NULL" value="8192" enum="PropertyUsageFlags">
|
||||
</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 name="PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED" value="32768" enum="PropertyUsageFlags">
|
||||
<constant name="PROPERTY_USAGE_SCRIPT_DEFAULT_VALUE" value="32768" enum="PropertyUsageFlags">
|
||||
</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 name="PROPERTY_USAGE_CLASS_IS_ENUM" value="131072" enum="PropertyUsageFlags">
|
||||
<constant name="PROPERTY_USAGE_NIL_IS_VARIANT" value="131072" enum="PropertyUsageFlags">
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_NIL_IS_VARIANT" value="262144" enum="PropertyUsageFlags">
|
||||
<constant name="PROPERTY_USAGE_INTERNAL" value="262144" enum="PropertyUsageFlags">
|
||||
</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].
|
||||
</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).
|
||||
</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 name="PROPERTY_USAGE_RESOURCE_NOT_PERSISTENT" value="8388608" enum="PropertyUsageFlags">
|
||||
<constant name="PROPERTY_USAGE_RESOURCE_NOT_PERSISTENT" value="4194304" enum="PropertyUsageFlags">
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_KEYING_INCREMENTS" value="16777216" enum="PropertyUsageFlags">
|
||||
<constant name="PROPERTY_USAGE_KEYING_INCREMENTS" value="8388608" enum="PropertyUsageFlags">
|
||||
</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 name="PROPERTY_USAGE_EDITOR_INSTANTIATE_OBJECT" value="67108864" enum="PropertyUsageFlags">
|
||||
<constant name="PROPERTY_USAGE_EDITOR_INSTANTIATE_OBJECT" value="33554432" enum="PropertyUsageFlags">
|
||||
</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 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].
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_ARRAY" value="536870912" enum="PropertyUsageFlags">
|
||||
<constant name="PROPERTY_USAGE_ARRAY" value="268435456" enum="PropertyUsageFlags">
|
||||
The property is an array.
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_DEFAULT" value="6" enum="PropertyUsageFlags">
|
||||
|
@ -596,15 +596,12 @@
|
||||
[b]Note:[/b] The result value is always normalized and may not match the key value.
|
||||
</constant>
|
||||
<constant name="UPDATE_CONTINUOUS" value="0" enum="UpdateMode">
|
||||
Update between keyframes.
|
||||
Update between keyframes and hold the value.
|
||||
</constant>
|
||||
<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.
|
||||
</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.
|
||||
</constant>
|
||||
<constant name="LOOP_NONE" value="0" enum="LoopMode">
|
||||
|
@ -2134,10 +2134,9 @@ void AnimationTrackEdit::_notification(int p_what) {
|
||||
get_theme_icon(SNAME("InterpLinearAngle"), 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("TrackDiscrete"), SNAME("EditorIcons")),
|
||||
get_theme_icon(SNAME("TrackTrigger"), 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->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("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->reset_size();
|
||||
|
||||
@ -3194,7 +3192,6 @@ void AnimationTrackEdit::_menu_selected(int p_index) {
|
||||
switch (p_index) {
|
||||
case MENU_CALL_MODE_CONTINUOUS:
|
||||
case MENU_CALL_MODE_DISCRETE:
|
||||
case MENU_CALL_MODE_TRIGGER:
|
||||
case MENU_CALL_MODE_CAPTURE: {
|
||||
Animation::UpdateMode update_mode = Animation::UpdateMode(p_index);
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
@ -4322,10 +4319,6 @@ AnimationTrackEditor::TrackIndices AnimationTrackEditor::_confirm_insert(InsertD
|
||||
h.type == Variant::TRANSFORM3D) {
|
||||
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) {
|
||||
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"));
|
||||
|
@ -138,7 +138,6 @@ class AnimationTrackEdit : public Control {
|
||||
enum {
|
||||
MENU_CALL_MODE_CONTINUOUS,
|
||||
MENU_CALL_MODE_DISCRETE,
|
||||
MENU_CALL_MODE_TRIGGER,
|
||||
MENU_CALL_MODE_CAPTURE,
|
||||
MENU_INTERPOLATION_NEAREST,
|
||||
MENU_INTERPOLATION_LINEAR,
|
||||
|
@ -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>
|
Before Width: | Height: | Size: 328 B |
@ -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);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
} else if (p_is_current && p_delta != 0) {
|
||||
} else {
|
||||
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) {
|
||||
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) {
|
||||
continue;
|
||||
}
|
||||
if (p_delta == 0) {
|
||||
continue;
|
||||
}
|
||||
if (!p_is_current) {
|
||||
break;
|
||||
}
|
||||
|
||||
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) {
|
||||
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) {
|
||||
continue;
|
||||
}
|
||||
if (p_delta == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (p_seeked) {
|
||||
//find whatever should be playing
|
||||
@ -910,7 +920,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
|
||||
continue;
|
||||
}
|
||||
|
||||
if (p_delta == 0 || p_seeked) {
|
||||
if (p_seeked) {
|
||||
//seek
|
||||
int idx = a->track_find_key(i, p_time);
|
||||
if (idx < 0) {
|
||||
@ -1056,7 +1066,7 @@ void AnimationPlayer::_animation_process2(double p_delta, bool p_started) {
|
||||
|
||||
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) {
|
||||
c.seeked = false;
|
||||
}
|
||||
@ -2135,7 +2145,7 @@ void AnimationPlayer::_bind_methods() {
|
||||
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::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, "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");
|
||||
|
@ -586,7 +586,7 @@ bool AnimationTree::_update_caches(AnimationPlayer *player) {
|
||||
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->subpath = leftover_path;
|
||||
@ -803,11 +803,11 @@ bool AnimationTree::_update_caches(AnimationPlayer *player) {
|
||||
TrackCacheValue *track_value = static_cast<TrackCacheValue *>(track);
|
||||
bool was_discrete = track_value->is_discrete;
|
||||
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;
|
||||
|
||||
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) {
|
||||
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);
|
||||
|
||||
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) {
|
||||
|
@ -2709,7 +2709,7 @@ void Animation::value_track_set_update_mode(int p_track, UpdateMode p_mode) {
|
||||
ERR_FAIL_INDEX(p_track, tracks.size());
|
||||
Track *t = tracks[p_track];
|
||||
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);
|
||||
vt->update_mode = p_mode;
|
||||
@ -3896,7 +3896,6 @@ void Animation::_bind_methods() {
|
||||
|
||||
BIND_ENUM_CONSTANT(UPDATE_CONTINUOUS);
|
||||
BIND_ENUM_CONSTANT(UPDATE_DISCRETE);
|
||||
BIND_ENUM_CONSTANT(UPDATE_TRIGGER);
|
||||
BIND_ENUM_CONSTANT(UPDATE_CAPTURE);
|
||||
|
||||
BIND_ENUM_CONSTANT(LOOP_NONE);
|
||||
|
@ -64,7 +64,6 @@ public:
|
||||
enum UpdateMode {
|
||||
UPDATE_CONTINUOUS,
|
||||
UPDATE_DISCRETE,
|
||||
UPDATE_TRIGGER,
|
||||
UPDATE_CAPTURE,
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user