i want my secondary animations to play in order. but only ability started seems to work. fix my code. remember that this is godot 4.2 and yield is not a thing anymore. also remember that the animations are all located in a control node in the hud so the code must work accordingly. fix and print out the entire code and show what changed: extends CharacterBody3D
var player_id : int = 1 var speed: float var base_speed: float = 6.0 var backward_speed: float = 4.75 var air_acceleration: float = 4.5 var jump_velocity: float = 3.5 var crouch_speed: float = 3.0 var mouse_sensitivity: float = 0.0008 var controller_sensitivity: float = 3.0 var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity") var dead: bool = false var can_primary: bool = true var can_secondary: bool = true var can_special: bool = true var can_ultimate: bool = true var is_crouching: bool = false
var max_ammo: int = 30 var current_ammo: int = 30 var reload_time: float = 10.0 var reloading: bool = false
To ensure that your secondary animations play in order in Godot 4.2, you can use the AnimationPlayer
node to manage the animations. Since yield
is no longer available, you can use await
with AnimationPlayer
's play()
method to wait for the animation to finish before starting the next one.
Here's how you can modify your code to achieve this. I will assume you have an AnimationPlayer
node in your HUD that controls the animations. The following code includes a method to play the secondary animations in order.
extends CharacterBody3D
var player_id : int = 1
var speed: float
var base_speed: float = 6.0
var backward_speed: float = 4.75
var air_acceleration: float = 4.5
var jump_velocity: float = 3.5
var crouch_speed: float = 3.0
var mouse_sensitivity: float = 0.0008
var controller_sensitivity: float = 3.0
var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
var dead: bool = false
var can_primary: bool = true
var can_secondary: bool = true
var can_special: bool = true
var can_ultimate: bool = true
var is_crouching: bool = false
var max_ammo: int = 30
var current_ammo: int = 30
var reload_time: float = 10.0
var reloading: bool = false
# Reference to the AnimationPlayer node in the HUD
@onready var animation_player: AnimationPlayer = $HUD/AnimationPlayer
# Function to play secondary animations in order
func play_secondary_animations():
if can_secondary:
can_secondary = false # Prevent further calls until done
await animation_player.play("secondary_animation_1")
await animation_player.animation_finished # Wait for the first animation to finish
await animation_player.play("secondary_animation_2")
await animation_player.animation_finished # Wait for the second animation to finish
await animation_player.play("secondary_animation_3")
await animation_player.animation_finished # Wait for the third animation to finish
can_secondary = true # Allow secondary animations to be played again
# Example of how to call the function
func _input(event):
if event.is_action_pressed("ui_accept"): # Replace with your input action
play_secondary_animations()
AnimationPlayer
node in the HUD using @onready var animation_player: AnimationPlayer = $HUD/AnimationPlayer
.play_secondary_animations()
that plays the animations in order using await
to wait for each animation to finish before starting the next one.play_secondary_animations()
function when a specific input action is pressed.Make sure to replace "secondary_animation_1"
, "secondary_animation_2"
, and "secondary_animation_3"
with the actual names of your animations in the AnimationPlayer
. Adjust the input action in the _input
function to match your game's input configuration.