conditional_commands 0.4.0

bevy ecs extension traits
Documentation
# Conditional Commands


Implements three extension traits 
* ```ConditionalInsertComponentsExt``` for ```EntityCommands``` and ```EntityMut```\
    with methods:
    - ```insert_if```
    - ```insert_if_else```
    - ```insert_bundle_if```
    - ```insert_bundle_if_else```
    - ```insert_some```
    - ```insert_some_or_else```
    - ```insert_bundle_some```
    - ```insert_bundle_some_or_else```
* ```ConditionalChildBuilderExt``` for ```EntityCommands```\
    with method:
    - ```with_children_if```
* ```ConditionalWorldChildBuilderExt``` for ```EntityMut```\
    with method:
    - ```with_children_if```

that allow for conditional component, bundle, and child insertion without the need for an intermediate ```EntityCommands``` or ```EntityMut``` binding.
* Supports Bevy 0.7
#
## Version 0.4
* ```insert_some_or_else``` methods. If present, insert the inner value of an ```Option```, otherwise insert the alternative value

## New for Version 0.3

* ```insert_some``` methods. If present, insert the inner value of an ```Option```.

## Version 0.2


* Implementated traits for ```EntityMut```.

* ```*_if_else``` methods.

    ```rust
    use conditional_commands::*;

    #[derive(Component)]
    struct Even;

    #[derive(Component)]
    struct Odd;

    fn exclusive_system(world: &mut World) {
        for n in 0..10 {
            world.spawn()
            .insert_if_else(n % 2 == 0, Even, Odd);
        }
    }
    ```

#

## Usage


Add to your Cargo.toml ```[Dependencies]``` section

```
conditional_commands = "0.2"
```

Then access with the ```use``` declaration

```rust
use conditional_commands::*;
```
#

## Motivating Contrived ECS Fizz-Buzz Example


```rust
use bevy::prelude::*;

#[derive(Component)]

struct Number(usize);

#[derive(Component)]

struct Fizz;

#[derive(Component)]

struct Buzz;

fn fizz_buzz<const N: usize>(
    mut commands: Commands
) {
    for n in 1 ..= N {
        let mut entity_commands = commands.spawn();
        if n % 3 {
            (0, 0) => { entity_commands.insert_bundle((Fizz, Buzz)); },
            (0, _) => { entity_commands.insert(Fizz); },
            (_, 0) => { entity_commands.insert(Buzz); },
            _ => { entity_commands.insert(Number(n)); }
        }
    }
}
```
With Conditional Commands we no longer need the intermediate EntityCommands binding.

```rust
use conditional_commands::*;

fn fizz_buzz<const N: usize>(
    mut commands: Commands
) {
    for n in 1 ..= N {
        commands
        .spawn()
        .insert_if(0 < n % 3 && 0 < n % 5, Number(n))
        .insert_if(n % 3 == 0, Fizz)
        .insert_if(n % 5 == 0, Buzz);
    }
}
```