I am making a simple top-down "bullet hell" game with Bevy. I've tried to create a system that takes care of the player's dashing like this:
fn player_dashing_system(
    kb: Res<Input<KeyCode>>,
    query: Query<&mut Player>
) {
    if let Ok(&mut player) = query.get_single() {
        if kb.just_pressed(KeyCode::Space) {
            player.speed = BASE_PLAYER_DASH_SPEED;
        }
    }
}
but I get this error:
error[E0308]: mismatched types
--> src\player.rs:108:15
    |
108 |     if let Ok(&mut Player) = query.get_single() {
    |               ^^^^^^^^^^^    ------------------ this expression has type `Result<&Player, QuerySingleError>`
    |               |
    |               types differ in mutability
    |               help: you can probably remove the explicit borrow: `Player`
    |
    = note:      expected reference `&Player`
            found mutable reference `&mut _`
I have tried fiddling around with the mutability of the variables but couldn't get anything to work.
Use get_single_mut.
Also remove the &mut from Ok(&mut player), otherwise the pattern will dereference the player, which is likely not what you want.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With