keeshond_datapack lets you easily load resources for your game and cache them in memory,
mapped via pathname and accessible by simple numeric ID lookup. Define how they load
with the DataObject trait, by implementing a function that takes a Read + Seek object.
Define where they load from by instantiating a source::Source.
Datapack is used by Keeshond but can work with any engine.
- Implement the DataObject trait for each type of object you want to be able to load in.
- Instantiate a source::SourceManager object and give it a source::Source such as a source::FilesystemSource
- Create a folder for each package on disk (if using FilesystemSource).
- Create subfolders within each package for each data type and place files within.
- Instantiate a DataStore for each data type you want to load.
- Use DataStore::load_package() to ensure the package is loaded at start.
- When creating objects that need resources, use DataStore::get_id() or DataStore::get_id_mut() to get a DataId. Store this id somewhere it can be used later, as these functions do involve a couple hash lookups.
- When using a resource, use DataStore::get() or DataStore::get_mut() with your id to get a reference to it so you can use it.
Pathnames are of the form
path/to/file.png. They must match exactly, including the use of one
forward slash as a separator, and no separators at the beginning or end. The package name and
data type folders are not included (they are implied). Pathnames are also case-sensitive even on
platforms with case-insensitive filesystems (Windows, macOS).
Storage that allows lookup and access of DataObjects of a given type
An optional companion to a DataStore. If you have data that needs initialization with a backend (for example, textures you need to upload to a GPU), PreparedStore provides a way to handle this in a two-step process that is borrow-checker-friendly.
Return type when loading information from a DataStore
Return type for when PreparedStore operations fail
Trust settings for a given DataObject resource type
Represents a data item loaded from a package. Implement this trait to allow the system to load new types of data.
A numeric ID used to refer to a DataObject of a specific type.