Skip to content

Document idiomatic way to sort rollback related queries #107

@JonathanPicques

Description

@JonathanPicques

I don't know what is the best way to sort queries, so far I've used

fn system(
    mut query: Query<(&Player), With<Rollback>>,
) {
    let mut query = query.iter_mut().collect::<Vec<_>>();
    query.sort_by(|(player_a, ..), (player_b, ..)| player_a.cmp(player_b));
}

This solution is fine, but as opposed to the example below, Player has an handle to perform a stable sort ...

fn system(
    mut query: Query<(&Rollback, &mut Transform, &mut PlatformController)>,
    order: Res<RollbackOrdered>,
) {
    let mut query = query.iter_mut().collect::<Vec<_>>();
    query.sort_by(|(rollback_a, ..), (rollback_b, ..)| {
        order
            .order(**rollback_a)
            .cmp(&order.order(**rollback_b)) // this is ugly :D
    });

    for (_, mut transform, mut controller) in query {
        // do stuff
    }
}

... whereas here, neither Transform nor PlatformController has a stable sort discriminant
This looks like the best approach, but it is not documented nor used in examples, so I might be using it wrong

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions