jonascarpay / apecs

a fast, extensible, type driven Haskell ECS framework for games
392 stars 43 forks source link

Add Apecs.Experimental.Children module #132

Closed jship closed 8 months ago

jship commented 9 months ago

This PR adds Apecs.Experimental.Children to support one-to-many relationships. A "parent" entity may have multiple values of a particular component type. This is like how in apecs-physics an entity with a Body component value may have many collision Shape component values (where each Shape value is owned by another distinct entity), but general-purpose so that we can build this kind of relationship for any component types.

There is an example that demonstrates usage and is likely a good starting point to get a feel for what the interface is like.

I'm not totally sure this functionality belongs in the main apecs library, though I feel the internals are fiddly enough that it'd be nice saving others from reimplementing similar behavior. I'm finding the functionality useful in my projects, but I could also see the code being pushed into a new library if that's preferred.