Trouv / bevy_ecs_ldtk

ECS-friendly ldtk plugin for bevy, leveraging bevy_ecs_tilemap
Other
664 stars 75 forks source link

Spawn hook #156

Open geieredgar opened 1 year ago

geieredgar commented 1 year ago

Hello, first I want to thank you for this useful crate. I am currently using it for a hobby project.

This is my suggestion for a possible solution to fix #47. It is implemented without breaking changes.

The first commit adds a new SpawnHook trait. It defines an associated Param type which allows accessing more from the world when executing the process_ldtk_levels system. The DefaultSpawnHook type implements SpawnHook and does the spawning in the same way as before.

The second commit adds a new spawn module that adds another implementation of the SpawnHook trait, the Registry. The registry allows hooking up individual functions that implement SystemParamFunction and using another trait called SpawnFunction that can be used with types that implement From<SpawnFunction::Input<'a>>.

I will add documentation and more examples if there is an interest in these additions.

Trouv commented 1 year ago

Thanks for all the contributions yesterday! This is very interesting. Actually, this particular issue is one I've been thinking about a lot lately, so this couldn't have come at a better time. Defining custom Params for the process_ldtk_levels system is especially interesting to me. I'll have a closer look at this some time in the future, and I can't promise right now that this is the solution that I will adopt, but it has some interesting ideas that I hadn't considered before.