bevyengine / bevyengine/bevy

Provide easy access to components of targeted entity in observers

Ouverte
#15,653 9 commentaires 1 réaction 0 personnes assignées Voir sur GitHub
A-ECS C-Feature D-Modest S-Ready-For-Implementation
Langage dominant
Rust
Étoiles
48.2k
Forks
4.8k
Merge moyen
3 j 15 h
PR mergées (30 j)
168

Description

## What problem does this solve or what need does it fill?

When writing observers, it is frequently desirable to be able to access a component on the listener entity, that is, the entity in the trigger event.

Currently there are two ways to do this: either inject a query for all components of that type and pick the one you want; or inject a DeferredWorld, and then look up the component you need on the event's entity.

bevy_mod_picking had convenience methods for injecting components directly. I'd like to see something similar for Bevy.

## What solution would you like?

I'm not sure about naming, but I was thinking of something like:

```rust
entity.observe(trigger: Trigger>, component: ListenerRef);
```
There would be a `ListenerMut` version as well. Alternate names might be `TargetRef`, `TriggerRef`, or `ObserverEntityRef`.

## What alternative(s) have you considered?

For now, I'm using DeferredWorld, as I am unsure about the overhead of injecting a Query.

## Additional context

bevy_mod_picking also provided a means to access the "target" entity and it's components, which was the entity upon which the event was triggered before bubbling, not the entity which handled the event. However, this feature was used rarely (at least by me anyway).

This is also somewhat related to a previous ticket filed by me a long time ago (#11048) - that was rejected (for good reason), but this ticket provides a much more narrowly-scoped variation of the same idea.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par examiner les API existantes Observer, Trigger, Query et DeferredWorld de Bevy, puis comparez le modèle d’accès proposé avec l’issue précédente #11048 et les méthodes pratiques de bevy_mod_picking. Le travail sera considéré comme terminé lorsqu’une API consensuelle pour l’accès immuable et mutable aux composants de l’entité listener aura été définie, et que sa conception et sa portée auront été clarifiées.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
rust
Domaine
game-dev
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.