Leafwing-Studios / leafwing_manifest

Data-driven content generation for Bevy
Apache License 2.0
73 stars 2 forks source link

Add functionality to support constructing manifests from multiple paths #2

Open alice-i-cecile opened 7 months ago

alice-i-cecile commented 7 months ago

This is useful for working with dynamic loading and unloading.

It's not clear what the best path forward here is: simply passing in a vec of paths is too naive, and doesn't really properly cover the usage pattern where this would be useful.

alice-i-cecile commented 7 months ago

From the draft split_manifest example:

//! While it's simplest to simply define all elements of the manifest in a single file, it's also possible to split the manifest into multiple files.
//!
//! This can be useful to reduce merge conflicts in a team environment, keep things organized,
//! allow for more modular content creation by grouping the content into smaller files,
//! or reduce the amount of data that needs to be loaded into memory at once.
//!
//!
//! This example showcases a simple pattern for loading manifests from multiple files.
edgarssilva commented 6 months ago

Hi, I would like to make a question/feature request that might be related to this issue.

Using the provided example raw_items the raw manifest reads a Vec of items from a file asset. How would one read a folder, or a list of files, where each file is one entry in the manifest as a RawItem?

In a situation where a RawItem has tons of fields and there is a huge variety of items, it can be rather bothersome to have it all in one file.

Also love the idea and see a lot of potential in it. Great job :)

alice-i-cecile commented 6 months ago

Yep, this is precisely the sort of usage pattern I had in mind. Shouldn't be challenging technically: it's mostly a matter of API design. If you have a strong proposal, feel free to open a PR and we'll take a look!

brandon-reinhart commented 6 months ago

My use case for this is that I'd like to be able to have mod authors insert their own manifests of a given type in a path and load those, merging items from their manifest into the game's runtime manifest.