### Godot version

4.0.rc1

### System information

Windows 10

### Issue description

I'm not 100% sure what's causing it, but something in the blend tree of the animation tree doesn't play the correct animations when running. 

The problem happens when you jump for a 2nd time. It plays the fall animation for 1 loop before switching to the jump animation. It should only play the jump animation when moving upwards. Same effect happens rarely with the idle playing while jumping. 

![BlendTreeBug](https://user-images.githubusercontent.com/48493009/217973489-f5e84658-7fdc-4ba8-8a59-d23ab2611236.gif)



I think it has something to do with the transition nodes and some kind of blend between the 2 animations. Even though the xfade time is set to 0 on all transition nodes. Here's an image of the whole animation tree/ blend tree.

![AnimationTree](https://user-images.githubusercontent.com/48493009/217973509-c1c61888-a7a5-4d59-b2db-8f55d47f6679.PNG)



I have a simple script, mostly made of integrated/default code + a small amount I added for adjusting what animation to play in the blend tree. 3 animations. Idle, jump, and fall, shown below.

![bugProjectCode](https://user-images.githubusercontent.com/48493009/217973524-1931d8da-b0f7-46d3-9236-888c45712557.PNG)



### Steps to reproduce

open included project, start game, press jump button (space) twice. (it works like it should the first time. But only the first time)

### Minimal reproduction project

[BlendTreeBug.zip](https://github.com/godotengine/godot/files/10702792/BlendTreeBug.zip)

make_invalid(vformat(RTR("Animation not found: '%s'"), animation));
		}
		return 0;
	}
	Ref<Animation> anim = ap->get_animation(animation);
	double anim_size = (double)anim->get_length();
	double step = 0.0;
	double prev_time = cur_time;
	Animation::LoopedFlag looped_flag = Animation::LOOPED_FLAG_NONE;
	bool node_backward = play_mode == PLAY_MODE_BACKWARD;
	if (p_seek) {
		step = p_time - cur_time;
		cur_time = p_time;
	} else {
		p_time *= backward ? -1.0 : 1.0;
		cur_time = cur_time + p_time;
		step = p_time;
	}
	if (anim->get_loop_mode() == Animation::LOOP_PINGPONG) {
		if (!Math::is_zero_approx(anim_size)) {
			if (prev_time >= 0 && cur_time < 0) {
				backward = !backward;
				looped_flag = node_backward ? Animation::LOOPED_FLAG_END : Animation::LOOPED_FLAG_START;
			}
			if (prev_time <= anim_size && cur_time > anim_size) {
				backward = !backward;
				looped_flag = node_backward ? Animation::LOOPED_FLAG_START : Animation::LOOPED_FLAG_END;
			}
			cur_time = Math::pingpong(cur_time, anim_size);
		}