diff --git a/Cargo.lock b/Cargo.lock index 9c294f1..7fdd4cf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -110,9 +110,9 @@ dependencies = [ [[package]] name = "bevy_app" -version = "0.16.0-rc.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4bca06008ce3fdd611c16f212895c9fb082d1cadc6ffda068a30de6088d93cd" +checksum = "a2b6267ac23a9947d5b2725ff047a1e1add70076d85fa9fb73d044ab9bea1f3c" dependencies = [ "bevy_derive", "bevy_ecs", @@ -133,9 +133,9 @@ dependencies = [ [[package]] name = "bevy_derive" -version = "0.16.0-rc.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6462921371b9471c66e6837ac26306408067006eb4d18289af0b34b34185ec35" +checksum = "f626531b9c05c25a758ede228727bd11c2c2c8498ecbed9925044386d525a2a3" dependencies = [ "bevy_macro_utils", "quote", @@ -144,9 +144,9 @@ dependencies = [ [[package]] name = "bevy_ecs" -version = "0.16.0-rc.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d727ac7bd70932af794e09c4e7362e85b794359fb052f23ae57424d44f4a80d" +checksum = "d9e807b5d9aab3bb8dfe47e7a44c9ff088bad2ceefe299b80ac77609a87fe9d4" dependencies = [ "arrayvec", "bevy_ecs_macros", @@ -172,9 +172,9 @@ dependencies = [ [[package]] name = "bevy_ecs_macros" -version = "0.16.0-rc.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "682888510b5886d633a9ee1bb87835573358ea169fa860cc293adfbe1528acd3" +checksum = "467d7bb98aeb8dd30f36e6a773000c12a891d4f1bee2adc3841ec89cc8eaf54e" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -184,9 +184,9 @@ dependencies = [ [[package]] name = "bevy_log" -version = "0.16.0-rc.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e74bc3fbb4bb7d331299bbd312beb056ed29f68dca63de4205b428809ad8028" +checksum = "7156df8d2f11135cf71c03eb4c11132b65201fd4f51648571e59e39c9c9ee2f6" dependencies = [ "android_log-sys", "bevy_app", @@ -201,9 +201,9 @@ dependencies = [ [[package]] name = "bevy_macro_utils" -version = "0.16.0-rc.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5a6b2dcfeeccf05dc333f07b75f0622efbc7bb9363ff3bd302fe1a03da3231f" +checksum = "7a2473db70d8785b5c75d6dd951a2e51e9be2c2311122db9692c79c9d887517b" dependencies = [ "parking_lot", "proc-macro2", @@ -214,14 +214,14 @@ dependencies = [ [[package]] name = "bevy_platform" -version = "0.16.0-rc.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496a76c6ef0cff43681b66f4391a839150879e9e9913d0b6270a4b16dab886a4" +checksum = "704db2c11b7bc31093df4fbbdd3769f9606a6a5287149f4b51f2680f25834ebc" dependencies = [ "cfg-if", "critical-section", "foldhash", - "getrandom 0.2.15", + "getrandom 0.2.16", "hashbrown", "portable-atomic", "portable-atomic-util", @@ -232,15 +232,15 @@ dependencies = [ [[package]] name = "bevy_ptr" -version = "0.16.0-rc.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e675d019ae9274a337f955d39c6cdabe1cd7cac4dc1d4d9186d9727ce04ae79d" +checksum = "86f1275dfb4cfef4ffc90c3fa75408964864facf833acc932413d52aa5364ba4" [[package]] name = "bevy_reflect" -version = "0.16.0-rc.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ff6c3632f0f519c70968dc2fc11f4450fb58bba825c36e0ec22cce71cccc325" +checksum = "607ebacc31029cf2f39ac330eabf1d4bc411b159528ec08dbe6b0593eaccfd41" dependencies = [ "assert_type_match", "bevy_platform", @@ -264,9 +264,9 @@ dependencies = [ [[package]] name = "bevy_reflect_derive" -version = "0.16.0-rc.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9faad34ff682b7ea9746bf11799c75100eccc308bb27b339aba9dbd2099bc79" +checksum = "cf35e45e4eb239018369f63f2adc2107a54c329f9276d020e01eee1625b0238b" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -277,9 +277,9 @@ dependencies = [ [[package]] name = "bevy_tasks" -version = "0.16.0-rc.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3990bb6b1f48611e2617b57822dc00f7889962d91e84f0abafbc5f3b4d652f75" +checksum = "444c450b65e108855f42ecb6db0c041a56ea7d7f10cc6222f0ca95e9536a7d19" dependencies = [ "async-executor", "async-task", @@ -297,9 +297,9 @@ dependencies = [ [[package]] name = "bevy_utils" -version = "0.16.0-rc.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb01925d2d238e965b25fb6ce259fe43cb7d753f669554536f658e29f8c04c17" +checksum = "ac2da3b3c1f94dadefcbe837aaa4aa119fcea37f7bdc5307eb05b4ede1921e24" dependencies = [ "bevy_platform", "thread_local", @@ -601,9 +601,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", @@ -1589,9 +1589,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" +checksum = "6cb8234a863ea0e8cd7284fcdd4f145233eb00fee02bbdd9861aec44e6477bc5" dependencies = [ "memchr", ] diff --git a/immediate_stats/Cargo.toml b/immediate_stats/Cargo.toml index f3de99c..056806c 100644 --- a/immediate_stats/Cargo.toml +++ b/immediate_stats/Cargo.toml @@ -14,14 +14,14 @@ bevy = ["bevy_ecs", "bevy_app", "bevy_reflect", "immediate_stats_macros/bevy"] bevy_butler = ["bevy", "bevy-butler", "immediate_stats_macros/bevy_butler"] [dependencies] -bevy_app = { version = "0.16.0-rc", default-features = false, optional = true, features = [ +bevy_app = { version = "0.16.0", default-features = false, optional = true, features = [ "bevy_reflect", ] } bevy-butler = { version = "0.6.1-alpha", optional = true } -bevy_ecs = { version = "0.16.0-rc", default-features = false, optional = true, features = [ +bevy_ecs = { version = "0.16.0", default-features = false, optional = true, features = [ "bevy_reflect", ] } -bevy_reflect = { version = "0.16.0-rc", default-features = false, optional = true } +bevy_reflect = { version = "0.16.0", default-features = false, optional = true } immediate_stats_macros = { path = "../immediate_stats_macros", default-features = false } [lints.rust] -- 2.51.2 From 73fa09298940115214076eac73d8d5aa7cc94cae Mon Sep 17 00:00:00 2001 From: AlephCubed Date: Thu, 24 Apr 2025 18:00:54 -0700 Subject: [PATCH 2/3] Minor documentation improvements. --- README.md | 3 +-- immediate_stats/Cargo.toml | 2 +- immediate_stats/README.md | 3 +-- immediate_stats/src/lib.rs | 13 +++++++------ immediate_stats_macros/Cargo.toml | 2 +- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index f1958e1..7c98289 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ # Immediate Stats Game stats that reset every frame. Inspired by immediate mode rendering. - -== Todo Info about derive macro. +Includes a derive macro which propagates stat resets to any stat fields. ```rust #[derive(StatContainer)] diff --git a/immediate_stats/Cargo.toml b/immediate_stats/Cargo.toml index 056806c..e972a0f 100644 --- a/immediate_stats/Cargo.toml +++ b/immediate_stats/Cargo.toml @@ -2,7 +2,7 @@ name = "immediate_stats" version = "0.1.0" edition = "2024" -description = "A crate for making immediate-mode stats." +description = "Game stats that reset every frame. Inspired by immediate mode rendering." categories = ["game-development", "data-structures"] keywords = ["game", "gamedev", "bevy", "stats", "proc-macro"] repository = "https://github.com/AlephCubed/immediate_stats" diff --git a/immediate_stats/README.md b/immediate_stats/README.md index f1958e1..7c98289 100644 --- a/immediate_stats/README.md +++ b/immediate_stats/README.md @@ -1,8 +1,7 @@ # Immediate Stats Game stats that reset every frame. Inspired by immediate mode rendering. - -== Todo Info about derive macro. +Includes a derive macro which propagates stat resets to any stat fields. ```rust #[derive(StatContainer)] diff --git a/immediate_stats/src/lib.rs b/immediate_stats/src/lib.rs index 0a8d1e2..452da30 100644 --- a/immediate_stats/src/lib.rs +++ b/immediate_stats/src/lib.rs @@ -1,7 +1,8 @@ //! Game stats that reset every frame. //! Inspired by immediate mode rendering. //! -//! == Todo Info about derive macro. +//! Includes a [derive macro](macro@StatContainer) which propagates stat resets to any stat fields. +//! //! ```rust no_run //! # use immediate_stats::*; //! #[derive(StatContainer)] @@ -16,7 +17,7 @@ //! // The order does not matter. Bonuses are always applied before multipliers. //! assert_eq!(speed.0.total(), 30); // (10 + 5) * 2 = 30 //! -//! speed.reset_modifiers(); // Reset bonus and multiplier, so speed is back to 10. +//! speed.reset_modifiers(); // Reset speed back to 10. //! } //! } //! ``` @@ -25,7 +26,7 @@ //! //! There is build-in integration with the [Bevy Engine](https://bevyengine.org) //! via the `bevy` feature flag. -//! This adds systems for resetting `StatContainer` components and resources. +//! This adds systems for resetting [`StatContainer`] components and resources. //! #![cfg_attr(not(feature = "bevy"), doc = "```rust ignore")] #![cfg_attr(feature = "bevy", doc = "```rust")] @@ -77,7 +78,7 @@ pub mod modifier; pub mod stat; /// Implements [`reset_modifiers`](StatContainer::reset_modifiers) -/// by passing on the call to any sub-stats. +/// by propagating the call down to any `StatContainer` fields. /// ```rust /// # use immediate_stats::*; /// #[derive(StatContainer, Default, Debug, PartialEq)] @@ -110,9 +111,9 @@ pub mod stat; /// #[derive(StatContainer)] /// struct PartialReset { /// #[stat] -/// custom: Health, +/// custom: Health, // Will get reset. /// #[stat_ignore] -/// ignored: Stat, +/// ignored: Stat, // Will not get reset. /// } /// /// fn main () { diff --git a/immediate_stats_macros/Cargo.toml b/immediate_stats_macros/Cargo.toml index 86be4dd..6b6015d 100644 --- a/immediate_stats_macros/Cargo.toml +++ b/immediate_stats_macros/Cargo.toml @@ -2,7 +2,7 @@ name = "immediate_stats_macros" version = "0.1.0" edition = "2024" -description = "A crate for making immediate-mode stats." +description = "Game stats that reset every frame. Inspired by immediate mode rendering." categories = ["game-development", "data-structures"] keywords = ["game", "gamedev", "bevy", "stats", "proc-macro"] repository = "https://github.com/AlephCubed/immediate_stats" -- 2.51.2 From 4a716ea71d2750a888af7323ad6661ae50c6e992 Mon Sep 17 00:00:00 2001 From: AlephCubed Date: Thu, 24 Apr 2025 18:19:29 -0700 Subject: [PATCH 3/3] Auto propagate for any types that *contain* "Stat". --- immediate_stats/src/lib.rs | 4 ++-- immediate_stats/tests/derive.rs | 10 ++++++++++ immediate_stats_macros/src/lib.rs | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/immediate_stats/src/lib.rs b/immediate_stats/src/lib.rs index 452da30..95cbde0 100644 --- a/immediate_stats/src/lib.rs +++ b/immediate_stats/src/lib.rs @@ -99,8 +99,8 @@ pub mod stat; /// } /// ``` /// # Configuration -/// By default, it will consider any value of type `Stat` to be a sub-stat. -/// You can use `#[stat]` to add a sub-stat and `#[stat_ignore]` to ignore one. +/// By default, it will consider any field whose type contains "Stat" to be a sub-stat. +/// You can use `#[stat]` to add other sub-stats and `#[stat_ignore]` to ignore one. /// ```rust /// # use immediate_stats::*; /// # #[derive(StatContainer, Default, Debug, PartialEq)] diff --git a/immediate_stats/tests/derive.rs b/immediate_stats/tests/derive.rs index d2facd1..8bfded4 100644 --- a/immediate_stats/tests/derive.rs +++ b/immediate_stats/tests/derive.rs @@ -2,9 +2,17 @@ use immediate_stats::*; +#[derive(PartialEq, Debug)] +struct MyStat; + +impl StatContainer for MyStat { + fn reset_modifiers(&mut self) {} +} + #[derive(StatContainer, PartialEq, Debug)] struct Movement { speed: Stat, + custom: MyStat, other: bool, } @@ -17,6 +25,7 @@ fn reset() { bonus: 3, multiplier: 1.5, }, + custom: MyStat, other: true, }; @@ -26,6 +35,7 @@ fn reset() { movement, Movement { speed: Stat::new(base), + custom: MyStat, other: true } ); diff --git a/immediate_stats_macros/src/lib.rs b/immediate_stats_macros/src/lib.rs index 0617160..3ae412f 100644 --- a/immediate_stats_macros/src/lib.rs +++ b/immediate_stats_macros/src/lib.rs @@ -143,7 +143,7 @@ fn get_members_from_fields>(fields: T) -> MemberVe let mut is_stat = false; // Check if type is `Stat`. - if field.ty.to_token_stream().to_string() == "Stat" { + if field.ty.to_token_stream().to_string().contains("Stat") { is_stat = true; }