cross-posted from: https://programming.dev/post/1086370

This time on my arbitrary blog: Entity component systems.

Also, highlight.js should degrade more gracefully without JS activated than last time. Note that I can’t process syntax highlighting in my build step, because I don’t have a build step.

  • TheCee@programming.devOP
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    The next example which seems to create two bubbles on the same entity is just as confusing to me. If I were to query for those bubbles, would I iterate over each of those bubbles in separate iterations, but all other components that are part of this query are the same?

    No that would be crazy.

    No, but seriously, the find operator is supposed to take only one type and not merge the types. ECS seems close enough to relational databases, but not that close.

    • TehPers@beehaw.org
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago

      In this case, would the components be combined into a list? Basically you’d have a BubbleComponent[] attached to the entity instead of just a BubbleComponent? Maybe I’m misunderstanding what the system is, is click_handler in the post a system, and if so, do systems only declare a single component of an entity as their input? From my experience, you often want to work with multiple components of the same entity in a system, for example:

      -- Mark characters with 0 or less life as dead
      function mark_dead(character: BoundaryComponent) {
          with character as movement: MovementComponent {
              character.x += movement.velocity.x * delta_secs;
              character.y += movement.velocity.y * delta_secs;
          }
      }
      

      Would there be a simpler way to query these components in the system, and what if I wanted to query for both BoundaryComponent and BubbleComponent, what would that look like?