From 8e125fdd9fcd6d8fde67c230d254edd07c9f5132 Mon Sep 17 00:00:00 2001 From: Louis Capitanchik <contact@louiscap.co> Date: Sun, 22 Oct 2023 02:35:14 +0100 Subject: [PATCH] Add README.md --- README.md | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..f8392ab --- /dev/null +++ b/README.md @@ -0,0 +1,81 @@ +# Micro Game Macros + + + + +A collection of utility macros for building games + +## Macros + +For executable examples, visit the rustdoc and/or read the doctests in `src/lib.rs` + +### JSON Loader + +Generate a Bevy asset loader for a given asset, supporting JSON files that define a single instance of that asset type, or a +list of that asset type. Instances of an asset need to be identifiable, though the property that is used to identify a particular +asset is customisable + +```rust +#[derive(JsonLoader, TypePath, TypeUuid, Serialize, Deserialize)] +#[loader( + extension = "asset.json", uuid = "00000000-0000-0000-0000-000000000000", + storage = inner_module::SimpleAssetLocator, + asset_name = some_asset_prop, index_name = set_of_assets +)] +#[uuid = "00000000-0000-0000-0000-000000000001"] +pub struct MyAsset { + /// The asset identifier needs to implement [std::fmt::Display] + #[asset_id] + uniq_ident: usize, +} +``` + +### Asset System + +Generate a set of structs and systems for managed loading in a Bevy game + +```rust +use bevy::prelude::{Image, Res, Resource}; +use micro_games_macros::asset_system; + +#[asset_system] +pub struct AssetHandles { + my_asset: Image, +} + +pub fn loading_system(mut loader: AssetHandlesLoader) { + loader.load_my_asset("path/to/asset.png", "Asset"); +} +pub fn use_asset_system(assets: Res<AssetHandles>) { + let handle = assets.my_asset("Asset"); +} +``` + +### From Inner + +Derive an impl of `From<T>` for structs that wrap a single inner type (Tuple and Named Property structs are supported) + +```rust +use micro_game_macros::FromInner; + +#[derive(FromInner)] +struct MyType(usize); + +fn example() { + let value = MyType::from(123usize); +} +``` + +### Kayak Widget + +A simple derive for Kayak UI's "Widget" trait + +```rust +use micro_game_macros::Widget; + +#[derive(Widget)] +struct MyComponent; + +// ... Other Kayak Setup ... + +``` \ No newline at end of file -- GitLab