Why do components only allow primitive values

I’m interested in a technical reason why a component in ECSx only allows for primitive values like float, atoms, etc and not something like structs or tuples. For example, rather than a PositionX and PositionY as separate components, instead have a Position component that stores both x and y coords. I feel like there’s a technical reason like something to do with how ETS works or something but I couldn’t find anything in the code, docs, or blog post that gave a clue and it’s piquing my curiosity.

3 Likes

My guess, based on the original stated goals of the project:

  • Type-checking for all component data

Supporting compound product data types like structs would mean ECSx has to build or bring a much more involved Ecto-schema style solution for component structure definition, coercion, and validation.

Nothing I know about ECSx’s implementation or how ETS works suggests to me that this is impossible: but I’d imagine it’s not a priority for the framework devs.

1 Like

Hi @pjode, please see the post in this issue which answers your question :slightly_smiling_face:

Thanks! I must’ve missed that issue in my searching. I wasn’t suggesting that as a feature, more for my own learning so I appreciate the answer

1 Like