Hi!

I’ve been learning Bevy and LOVING IT, there’s only one thing confusing me. Many components appear to be created magically even if not specified in the Bundle passed to commants.spawn.

For example, when I spawn just a Sprite component, the entity seems to automatically get a Transform component, even if I didn’t give it one.

Similarly, this example spawns a Screenshot component, which apparently results in a Capturing component that can be queried later.

Are these “implicit” components documented somewhere? I took a short look at the TransformPlugin for example but I can’t seem to figure out where these components come from.

Thanks y’all!

  • CodexArcanum@lemmy.dbzer0.com
    link
    fedilink
    English
    arrow-up
    3
    ·
    2 months ago

    I’m not a bevy user but I’m writing a game in Rust so maybe I can help…

    Looking at the docs for Screenshots in particular, it definitely looks like that system uses a few “marker” components to track state while making the screen capture.

    Digging deeper into the source for the Screenshot component struct we can see what method it uses to attach these markers, and a little further into the function it uses the markers to find the screenshot entity and remove it.

    I’m not sure about Sprite but probably something in the rendering system looks for and maybe applies a Transform when components are nested or added to world space? I also don’t know if Bevy has a formal component hierarchy but something like that may be in play here with Sprite being a child or implementor of Transform, but that’s just speculation on my part.

    Hope that helps, maybe seeing how Screenshot does it will help you search in the source for Sprite to see where the Transforms are injected?

    • PotatoesFall@discuss.tchncs.deOP
      link
      fedilink
      arrow-up
      2
      ·
      2 months ago

      Thanks so much!

      I just managed to find the place where the Capturing component gets added, it’s part of the extract_screenshots system in the ScreenshotPlugin.

      For Sprite, another user found where this originates from, it’s the require attribute.

      • CodexArcanum@lemmy.dbzer0.com
        link
        fedilink
        English
        arrow-up
        3
        ·
        2 months ago

        Nice! Glad you worked it out!

        I got so excited to see a Bevy post (in the Bevy community even!) I really want to see the gamedev community here pick up and exceed reddit, SO, and other company-owned gaming forums.