diff --git a/src/registry.rs b/src/registry.rs index 28fa30c..c7b1de5 100644 --- a/src/registry.rs +++ b/src/registry.rs @@ -2,14 +2,18 @@ use bevy_ecs::prelude::*; use std::any::TypeId; use std::collections::HashMap; +/// A function used to merge effects with [`EffectMode::Merge`](crate::EffectMode::Merge), which must be registered in the [registry](EffectMergeRegistry). pub type EffectMergeFn = fn(world: &mut World, old: Entity, incoming: Entity); +/// Stores the effect merge logic for each registered component. +/// New components can be registered by providing a [`EffectMergeFn`] to the [`register`](EffectMergeRegistry::register) method. #[derive(Resource, Default)] pub struct EffectMergeRegistry { pub(crate) merges: HashMap, } impl EffectMergeRegistry { + /// Registers a [`EffectMergeFn`] to be run whenever two `T` status effects are merged. pub fn register(&mut self, f: EffectMergeFn) -> &mut Self { self.merges.insert(TypeId::of::(), f); self diff --git a/src/timer.rs b/src/timer.rs index 1acb9d1..9176283 100644 --- a/src/timer.rs +++ b/src/timer.rs @@ -17,6 +17,7 @@ impl Plugin for TimerPlugin { } } +/// Registers the default merge logic for [`Lifetime`] and [`Delay`]. pub fn register_timer_merge_functions(registry: &mut EffectMergeRegistry) { registry .register::(merge_timer::)