Automatically registers a system to be added to the app.
# Parameters
- `plugin = PluginType` - Required unless the `default_plugin` feature is enabled and `#[auto_plugin(default_plugin)]` is in scope. Specifies which plugin should register this system.
- `after_build` - Optional. Injects this macro's tokens at the end of the plugin build instead of the start.
- `schedule = ScheduleName` - Required. Specifies which schedule to add the system to.
- `pipe_in = [sys1, sys2, ...]` - Optional. Pipes inputs into the system in order, so `pipe_in(a, b)` becomes `a.pipe(b).pipe(<system>)`.
- `generics(T1, T2, ...)` - Optional. Specifies concrete types for generic parameters.
Note: Clippy will complain if you have duplicate generic type names. For those you can use named generics: `generics(A = ..., B = ...)`.
- `config(..)`
- `in_set = SetName` - Optional. See [`bevy IntoScheduleConfigs in_set`](https://docs.rs/bevy/0.16.1/bevy/prelude/trait.IntoScheduleConfigs.html#method.in_set)
- `before = SetName or system` - Optional. See [`bevy IntoScheduleConfigs before`](https://docs.rs/bevy/0.16.1/bevy/prelude/trait.IntoScheduleConfigs.html#method.before)
- `after = SetName or system` - Optional. See [`bevy IntoScheduleConfigs after`](https://docs.rs/bevy/0.16.1/bevy/prelude/trait.IntoScheduleConfigs.html#method.after)
- `run_if = Condition` - Optional. See [`bevy IntoScheduleConfigs run_if`](https://docs.rs/bevy/0.16.1/bevy/prelude/trait.IntoScheduleConfigs.html#method.run_if)
- `distributive_run_if = Condition` - Optional. See [`bevy IntoScheduleConfigs run_if_inner`](https://docs.rs/bevy/0.16.1/bevy/prelude/trait.IntoScheduleConfigs.html#method.run_if_inner)
- `ambiguous_with = System` - Optional. See [`bevy IntoScheduleConfigs ambiguous_with`](https://docs.rs/bevy/0.16.1/bevy/prelude/trait.IntoScheduleConfigs.html#method.ambiguous_with)
- `ambiguous_with_all = bool` - Optional. See [`bevy IntoScheduleConfigs ambiguous_with_all`](https://docs.rs/bevy/0.16.1/bevy/prelude/trait.IntoScheduleConfigs.html#method.ambiguous_with_all)
- `after_ignore_deferred = SetName or system` - Optional. See [`bevy IntoScheduleConfigs after_ignore_deferred`](https://docs.rs/bevy/0.16.1/bevy/prelude/trait.IntoScheduleConfigs.html#method.after_ignore_deferred)
- `before_ignore_deferred = SetName or system` - Optional. See [`bevy IntoScheduleConfigs before_ignore_deferred`](https://docs.rs/bevy/0.16.1/bevy/prelude/trait.IntoScheduleConfigs.html#method.before_ignore_deferred)
# Example
```rust
use bevy::prelude::*;
use bevy_auto_plugin::prelude::*;
#[derive(AutoPlugin)]
#[auto_plugin(impl_plugin_trait)]
struct MyPlugin;
#[derive(Resource, Debug, Default)]
struct FooResource(usize);
#[auto_system(plugin = MyPlugin, schedule = Update)]
fn foo_system(mut foo_res: ResMut<FooResource>) {
foo_res.0 += 1;
}
```
# Example (with pipe_in)
```rust
use bevy::prelude::*;
use bevy_auto_plugin::prelude::*;
#[derive(AutoPlugin)]
#[auto_plugin(impl_plugin_trait)]
struct MyPlugin;
fn get_name() -> String {
"World".to_string()
}
fn greet_name(name: In<String>) -> String {
format!("Hello, {}!", *name)
}
#[auto_system(plugin = MyPlugin, schedule = Startup, pipe_in = [get_name, greet_name])]
fn print_greeting(greeting: In<String>) {
println!("{}", *greeting);
}
```
# Example (with system set)
```rust
use bevy::prelude::*;
use bevy_auto_plugin::prelude::*;
#[derive(SystemSet, Debug, Hash, PartialEq, Eq, Clone)]
enum TestSet { First, Second }
#[derive(AutoPlugin)]
#[auto_plugin(impl_plugin_trait)]
struct MyPlugin;
#[derive(Resource, Debug, Default)]
struct FooResource(usize);
#[auto_system(plugin = MyPlugin, schedule = Update, config(in_set = TestSet::First))]
fn foo_system(mut foo_res: ResMut<FooResource>) {
foo_res.0 += 1;
}
```