reactor_spatial 1.0.0

A set of 2D spatial utilities for Bevy, including handling transform propagation
Documentation
# `reactor_spatial`

A 2d transform system for the [Bevy](https://bevyengine.org/) game engine that supports Transform propagation controls.

## Core Types

### `Position2D`

The `Position2D` struct represents a 2D point in space. It has two fields: `x` and `y`, representing the Cartesian coordinates of the point.

### `Rotation2D`

The `Rotation2D` struct represents a 2D rotation. It can be used with either radians or degrees.

### `Scale2D`

The `Scale2D` struct represents a 2D scale. It has two fields: `x` and `y`, representing the scale factors for the x and y axes respectively.

### `SpatialBundle2D`

The `SpatialBundle2D` struct represents the spatial state of a transform in 2D. It contains a `Position2D`, `Rotation2D`, and `Scale2D`. It provides a convenient way to store and manipulate the spatial state of your game objects.

When you add a `SpatialBundle2D` to an entity, it will also automatically add a `SpatialBundle`, making it easy to use the spatial 2D system with Bevy's built-in transform system.

### `DrawOrder`

The `DrawOrder` struct is used to specify the draw layering of entities in your game. It is a wrapper over an f32, with higher values drawing above lower values.

## propagation Types
The following enums are used to control how the spatial components of an entity are propagated to its children.

### `PositionPropagation`
The `PositionPropagation` enum has two variants:

**Relative:** **[Default]**The position of a child entity is relative to its parent's position.

**Absolute:** The position of a child entity is absolute and does not take into account its parent's position.

### `RotationPropagation`
The `RotationPropagation` enum has two variants:

**Relative:** **[Default]**The rotation of a child entity is relative to its parent's rotation.

**Absolute:** The rotation of a child entity is absolute and does not take into account its parent's rotation.
By default, both `PositionPropagation` and `RotationPropagation` are set to `Relative`.

### `ScalePropagation`
The `ScalePropagation` enum has two variants:

**Relative:** **[Default]**The rotation of a child entity is relative to its parent's rotation.

**Absolute:** The rotation of a child entity is absolute and does not take into account its parent's rotation.

### Compasses

In addition to the above, and not included in the `SpatialBundle2D` are `Compass`, `CompassRose`, and `CompassHalfwinds`. It is very common in 2D games to need to know the compass direction a given entity is facing in order to choose which sprite to draw. These enums can be included as a component on anything with a `Rotation2D`, and as part of transform propagation, there values will be updated to match the objects rotation.

## Feature Flags

* `serde` - Adds impls for `serde:Serialize` and `serde:Deserialize`

## Usage

Add the crate to your `Cargo.toml`
Add `SpatialPlugin` to your app.