mirror of
https://github.com/godotengine/godot
synced 2024-09-04 21:48:31 +00:00
Merge pull request #57368 from TokageItLab/fix-delta-for-animation-tree
This commit is contained in:
commit
2279edeaf0
|
@ -854,10 +854,10 @@ void AnimationNodeStateMachineEditor::_state_machine_pos_draw() {
|
|||
}
|
||||
to.y = from.y;
|
||||
|
||||
double len = MAX(0.0001, current_length);
|
||||
float len = MAX(0.0001, current_length);
|
||||
|
||||
double pos = CLAMP(play_pos, 0, len);
|
||||
double c = pos / len;
|
||||
float pos = CLAMP(play_pos, 0, len);
|
||||
float c = pos / len;
|
||||
Color fg = get_theme_color(SNAME("font_color"), SNAME("Label"));
|
||||
Color bg = fg;
|
||||
bg.a *= 0.3;
|
||||
|
|
|
@ -159,11 +159,11 @@ class AnimationNodeStateMachineEditor : public AnimationTreeNodeEditorPlugin {
|
|||
StringName last_blend_from_node;
|
||||
StringName last_current_node;
|
||||
Vector<StringName> last_travel_path;
|
||||
double last_play_pos;
|
||||
double play_pos;
|
||||
double current_length;
|
||||
float last_play_pos;
|
||||
float play_pos;
|
||||
float current_length;
|
||||
|
||||
double error_time;
|
||||
float error_time;
|
||||
String error_text;
|
||||
|
||||
EditorFileDialog *open_file;
|
||||
|
|
|
@ -88,7 +88,7 @@ void AnimationNode::get_child_nodes(List<ChildNode> *r_child_nodes) {
|
|||
}
|
||||
}
|
||||
|
||||
void AnimationNode::blend_animation(const StringName &p_animation, real_t p_time, real_t p_delta, bool p_seeked, real_t p_blend, int p_pingponged) {
|
||||
void AnimationNode::blend_animation(const StringName &p_animation, double p_time, double p_delta, bool p_seeked, real_t p_blend, int p_pingponged) {
|
||||
ERR_FAIL_COND(!state);
|
||||
ERR_FAIL_COND(!state->player->has_animation(p_animation));
|
||||
|
||||
|
@ -119,13 +119,13 @@ void AnimationNode::blend_animation(const StringName &p_animation, real_t p_time
|
|||
state->animation_states.push_back(anim_state);
|
||||
}
|
||||
|
||||
real_t AnimationNode::_pre_process(const StringName &p_base_path, AnimationNode *p_parent, State *p_state, real_t p_time, bool p_seek, const Vector<StringName> &p_connections) {
|
||||
double AnimationNode::_pre_process(const StringName &p_base_path, AnimationNode *p_parent, State *p_state, double p_time, bool p_seek, const Vector<StringName> &p_connections) {
|
||||
base_path = p_base_path;
|
||||
parent = p_parent;
|
||||
connections = p_connections;
|
||||
state = p_state;
|
||||
|
||||
real_t t = process(p_time, p_seek);
|
||||
double t = process(p_time, p_seek);
|
||||
|
||||
state = nullptr;
|
||||
parent = nullptr;
|
||||
|
@ -144,7 +144,7 @@ void AnimationNode::make_invalid(const String &p_reason) {
|
|||
state->invalid_reasons += String::utf8("• ") + p_reason;
|
||||
}
|
||||
|
||||
real_t AnimationNode::blend_input(int p_input, real_t p_time, bool p_seek, real_t p_blend, FilterAction p_filter, bool p_optimize) {
|
||||
double AnimationNode::blend_input(int p_input, double p_time, bool p_seek, real_t p_blend, FilterAction p_filter, bool p_optimize) {
|
||||
ERR_FAIL_INDEX_V(p_input, inputs.size(), 0);
|
||||
ERR_FAIL_COND_V(!state, 0);
|
||||
|
||||
|
@ -163,7 +163,7 @@ real_t AnimationNode::blend_input(int p_input, real_t p_time, bool p_seek, real_
|
|||
|
||||
//inputs.write[p_input].last_pass = state->last_pass;
|
||||
real_t activity = 0.0;
|
||||
real_t ret = _blend_node(node_name, blend_tree->get_node_connection_array(node_name), nullptr, node, p_time, p_seek, p_blend, p_filter, p_optimize, &activity);
|
||||
double ret = _blend_node(node_name, blend_tree->get_node_connection_array(node_name), nullptr, node, p_time, p_seek, p_blend, p_filter, p_optimize, &activity);
|
||||
|
||||
Vector<AnimationTree::Activity> *activity_ptr = state->tree->input_activity_map.getptr(base_path);
|
||||
|
||||
|
@ -174,11 +174,11 @@ real_t AnimationNode::blend_input(int p_input, real_t p_time, bool p_seek, real_
|
|||
return ret;
|
||||
}
|
||||
|
||||
real_t AnimationNode::blend_node(const StringName &p_sub_path, Ref<AnimationNode> p_node, real_t p_time, bool p_seek, real_t p_blend, FilterAction p_filter, bool p_optimize) {
|
||||
double AnimationNode::blend_node(const StringName &p_sub_path, Ref<AnimationNode> p_node, double p_time, bool p_seek, real_t p_blend, FilterAction p_filter, bool p_optimize) {
|
||||
return _blend_node(p_sub_path, Vector<StringName>(), this, p_node, p_time, p_seek, p_blend, p_filter, p_optimize);
|
||||
}
|
||||
|
||||
real_t AnimationNode::_blend_node(const StringName &p_subpath, const Vector<StringName> &p_connections, AnimationNode *p_new_parent, Ref<AnimationNode> p_node, real_t p_time, bool p_seek, real_t p_blend, FilterAction p_filter, bool p_optimize, real_t *r_max) {
|
||||
double AnimationNode::_blend_node(const StringName &p_subpath, const Vector<StringName> &p_connections, AnimationNode *p_new_parent, Ref<AnimationNode> p_node, double p_time, bool p_seek, real_t p_blend, FilterAction p_filter, bool p_optimize, real_t *r_max) {
|
||||
ERR_FAIL_COND_V(!p_node.is_valid(), 0);
|
||||
ERR_FAIL_COND_V(!state, 0);
|
||||
|
||||
|
@ -796,7 +796,7 @@ void AnimationTree::_clear_caches() {
|
|||
cache_valid = false;
|
||||
}
|
||||
|
||||
void AnimationTree::_process_graph(real_t p_delta) {
|
||||
void AnimationTree::_process_graph(double p_delta) {
|
||||
_update_properties(); //if properties need updating, update them
|
||||
|
||||
//check all tracks, see if they need modification
|
||||
|
@ -1335,10 +1335,10 @@ void AnimationTree::_process_graph(real_t p_delta) {
|
|||
t->playing = false;
|
||||
playing_caches.erase(t);
|
||||
} else {
|
||||
real_t start_ofs = a->audio_track_get_key_start_offset(i, idx);
|
||||
double start_ofs = a->audio_track_get_key_start_offset(i, idx);
|
||||
start_ofs += time - a->track_get_key_time(i, idx);
|
||||
real_t end_ofs = a->audio_track_get_key_end_offset(i, idx);
|
||||
real_t len = stream->get_length();
|
||||
double end_ofs = a->audio_track_get_key_end_offset(i, idx);
|
||||
double len = stream->get_length();
|
||||
|
||||
if (start_ofs > len - end_ofs) {
|
||||
t->object->call("stop");
|
||||
|
@ -1374,9 +1374,9 @@ void AnimationTree::_process_graph(real_t p_delta) {
|
|||
t->playing = false;
|
||||
playing_caches.erase(t);
|
||||
} else {
|
||||
real_t start_ofs = a->audio_track_get_key_start_offset(i, idx);
|
||||
real_t end_ofs = a->audio_track_get_key_end_offset(i, idx);
|
||||
real_t len = stream->get_length();
|
||||
double start_ofs = a->audio_track_get_key_start_offset(i, idx);
|
||||
double end_ofs = a->audio_track_get_key_end_offset(i, idx);
|
||||
double len = stream->get_length();
|
||||
|
||||
t->object->call("set_stream", stream);
|
||||
t->object->call("play", start_ofs);
|
||||
|
@ -1407,7 +1407,7 @@ void AnimationTree::_process_graph(real_t p_delta) {
|
|||
}
|
||||
}
|
||||
} else if (t->len > 0) {
|
||||
real_t len = t->start > time ? (a->get_length() - t->start) + time : time - t->start;
|
||||
double len = t->start > time ? (a->get_length() - t->start) + time : time - t->start;
|
||||
|
||||
if (len > t->len) {
|
||||
stop = true;
|
||||
|
@ -1455,7 +1455,7 @@ void AnimationTree::_process_graph(real_t p_delta) {
|
|||
|
||||
Ref<Animation> anim = player2->get_animation(anim_name);
|
||||
|
||||
real_t at_anim_pos = 0.0;
|
||||
double at_anim_pos = 0.0;
|
||||
|
||||
switch (anim->get_loop_mode()) {
|
||||
case Animation::LoopMode::LOOP_NONE: {
|
||||
|
|
|
@ -83,7 +83,7 @@ public:
|
|||
Vector<real_t> blends;
|
||||
State *state = nullptr;
|
||||
|
||||
real_t _pre_process(const StringName &p_base_path, AnimationNode *p_parent, State *p_state, real_t p_time, bool p_seek, const Vector<StringName> &p_connections);
|
||||
double _pre_process(const StringName &p_base_path, AnimationNode *p_parent, State *p_state, double p_time, bool p_seek, const Vector<StringName> &p_connections);
|
||||
|
||||
//all this is temporary
|
||||
StringName base_path;
|
||||
|
@ -96,12 +96,12 @@ public:
|
|||
Array _get_filters() const;
|
||||
void _set_filters(const Array &p_filters);
|
||||
friend class AnimationNodeBlendTree;
|
||||
real_t _blend_node(const StringName &p_subpath, const Vector<StringName> &p_connections, AnimationNode *p_new_parent, Ref<AnimationNode> p_node, real_t p_time, bool p_seek, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true, real_t *r_max = nullptr);
|
||||
double _blend_node(const StringName &p_subpath, const Vector<StringName> &p_connections, AnimationNode *p_new_parent, Ref<AnimationNode> p_node, double p_time, bool p_seek, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true, real_t *r_max = nullptr);
|
||||
|
||||
protected:
|
||||
void blend_animation(const StringName &p_animation, real_t p_time, real_t p_delta, bool p_seeked, real_t p_blend, int p_pingponged = 0);
|
||||
real_t blend_node(const StringName &p_sub_path, Ref<AnimationNode> p_node, real_t p_time, bool p_seek, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true);
|
||||
real_t blend_input(int p_input, real_t p_time, bool p_seek, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true);
|
||||
void blend_animation(const StringName &p_animation, double p_time, double p_delta, bool p_seeked, real_t p_blend, int p_pingponged = 0);
|
||||
double blend_node(const StringName &p_sub_path, Ref<AnimationNode> p_node, double p_time, bool p_seek, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true);
|
||||
double blend_input(int p_input, double p_time, bool p_seek, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true);
|
||||
|
||||
void make_invalid(const String &p_reason);
|
||||
|
||||
|
@ -234,8 +234,8 @@ private:
|
|||
|
||||
struct TrackCacheAudio : public TrackCache {
|
||||
bool playing = false;
|
||||
real_t start = 0.0;
|
||||
real_t len = 0.0;
|
||||
double start = 0.0;
|
||||
double len = 0.0;
|
||||
|
||||
TrackCacheAudio() {
|
||||
type = Animation::TYPE_AUDIO;
|
||||
|
@ -265,7 +265,7 @@ private:
|
|||
|
||||
void _clear_caches();
|
||||
bool _update_caches(AnimationPlayer *player);
|
||||
void _process_graph(real_t p_delta);
|
||||
void _process_graph(double p_delta);
|
||||
|
||||
uint64_t setup_pass = 1;
|
||||
uint64_t process_pass = 1;
|
||||
|
|
|
@ -2609,7 +2609,7 @@ Variant Animation::value_track_interpolate(int p_track, double p_time) const {
|
|||
|
||||
void Animation::_value_track_get_key_indices_in_range(const ValueTrack *vt, double from_time, double to_time, List<int> *p_indices) const {
|
||||
if (from_time != length && to_time == length) {
|
||||
to_time = length * 1.001; //include a little more if at the end
|
||||
to_time = length + CMP_EPSILON; //include a little more if at the end
|
||||
}
|
||||
int to = _find(vt->values, to_time);
|
||||
|
||||
|
@ -2730,7 +2730,7 @@ Animation::UpdateMode Animation::value_track_get_update_mode(int p_track) const
|
|||
template <class T>
|
||||
void Animation::_track_get_key_indices_in_range(const Vector<T> &p_array, double from_time, double to_time, List<int> *p_indices) const {
|
||||
if (from_time != length && to_time == length) {
|
||||
to_time = length * 1.01; //include a little more if at the end
|
||||
to_time = length + CMP_EPSILON; //include a little more if at the end
|
||||
}
|
||||
|
||||
int to = _find(p_array, to_time);
|
||||
|
@ -3081,7 +3081,7 @@ void Animation::track_get_key_indices_in_range(int p_track, double p_time, doubl
|
|||
|
||||
void Animation::_method_track_get_key_indices_in_range(const MethodTrack *mt, double from_time, double to_time, List<int> *p_indices) const {
|
||||
if (from_time != length && to_time == length) {
|
||||
to_time = length * 1.01; //include a little more if at the end
|
||||
to_time = length + CMP_EPSILON; //include a little more if at the end
|
||||
}
|
||||
|
||||
int to = _find(mt->methods, to_time);
|
||||
|
|
Loading…
Reference in a new issue