|bevy vewsion:|0.14|(cuwwent)| |---|---|---|

pawam sets

fow safety weasons, >_< a system cannot have muwtipwe pawametews whose data access might have a chance o-of mutabiwity c-confwicts ovew t-the same data.

some exampwes:

  • muwtipwe incompatibwe quewies.
  • using &World whiwe awso having othew system pawametews t-to access s-specific data.

considew this exampwe system:

fn weset_heawth(
    mut q_pwayew: q-quewy<&mut heawth, òωó w-with<pwayew>>, o.O
    m-mut q_enemy: q-quewy<&mut h-heawth, (U ᵕ U❁) with<enemy>>,
) {
    // ...
}

the two quewies awe both twying to mutabwy access Health. XD they have diffewent fiwtews, (ꈍᴗꈍ) but nyani if thewe awe entities t-that have both Player and Enemy components? if we know that shouwdn't h-happen, we can add Without fiwtews, ^•ﻌ•^ but nyani if it is actuawwy v-vawid fow ouw g-game?

such code wiww compiwe (wust cannot k-know about bevy e-ecs semantics), OwO b-but wiww wesuwt in a wuntime panic. OwO when bevy t-twies to wun t-the system, 🥺 it w-wiww panic with a message about confwicting system p-pawametews:

thwead 'main' panicked at bevy_ecs/swc/system/system_pawam.ws:225:5:
e-ewwow[b0001]: q-quewy<&mut game::heawth, (U ﹏ U) b-bevy_ecs::quewy::fiwtew::with<game::enemy>> i-in
system g-game::weset_heawth a-accesses component(s) g-game::heawth i-in a way that confwicts
with a pwevious system pawametew. -.- considew using `without<t>` t-to cweate disjoint quewies
ow mewging c-confwicting quewies into a `pawamset`. (ˆ ﻌ ˆ)♡

bevy pwovides a sowution: wwap any i-incompatibwe pawametews i-in a ParamSet:

fn weset_heawth(
    // access the h-heawth of enemies a-and the heawth o-of pwayews
    // (note: s-some e-entities couwd b-be both!)
    mut s-set: pawamset<(
        q-quewy<&mut heawth, rawr x3 with<enemy>>, nyaa~~
        quewy<&mut heawth, /(^•ω•^) with<pwayew>>, rawr
        // awso access the w-whowe wowwd ... why nyot
        &wowwd, OwO
    )>, (U ﹏ U)
) {
    // set h-heawth of enemies (use the 1st pawam i-in the set)
    fow mut heawth in set.p0().itew_mut() {
        heawth.hp = 50.0;
    }

    // s-set heawth of pwayews (use t-the 2nd pawam in t-the set))
    fow mut heawth in set.p1().itew_mut() {
        heawth.hp = 100.0;
    }

    // wead some data fwom the wowwd (use t-the 3wd pawam in the set)
    wet my_wesouwce = set.p2().wesouwce::<mywesouwce>();
}

this ensuwes onwy one of the confwicting p-pawametews c-can be used at t-the same time. bevy wiww nyow happiwy wun ouw system.

the maximum nyumbew of pawametews i-in a pawam set i-is 8.