## This is a somewhat more complex player example. Note how all the combos ## are completely handled by GUIDE, the player doesn't need to know which ## inputs trigger them. extends CharacterBody2D @export var speed:float = 150 @export var dash_speed_bonus:float = 250 @export var horizontal_movement:GUIDEAction @export var dash_left:GUIDEAction @export var dash_right:GUIDEAction @export var fireball_left:GUIDEAction @export var fireball_right:GUIDEAction @export var fireball_scene:PackedScene var _dash_bonus:float func _ready(): # We can use the event system to get notified whenever # the combo actions trigger. This way we don't need to check them # in _physics_process every frame. dash_left.triggered.connect(func(): _dash_bonus = -1) dash_right.triggered.connect(func(): _dash_bonus = 1) fireball_left.triggered.connect(_spawn_fireball.bind(Vector2.LEFT)) fireball_right.triggered.connect(_spawn_fireball.bind(Vector2.RIGHT)) func _physics_process(delta): # Get current left-right input var movement:float = horizontal_movement.value_axis_1d # Move any dash bonus towards zero _dash_bonus = move_toward(_dash_bonus, 0, delta) # Calculate new velocity velocity.x = movement * speed + _dash_bonus * dash_speed_bonus velocity.y = 980 move_and_slide() func _spawn_fireball(direction:Vector2) -> void: # spawn a new fireball var fireball:Node2D = fireball_scene.instantiate() # add it to the tree get_parent().add_child(fireball) # start at our position/orientation fireball.global_transform = global_transform # fly into the given direction fireball.direction = direction