[][src]Struct rust_action_heroes::system::movement_solver::MovementSolverSystem

pub(crate) struct MovementSolverSystem {
    reader: ReaderId<TransformedInputEvent>,
}

It reads in TransformedInputEvents and outputs MovementEvents. Sounds simple enough... This is easily the most complicated system in the game.

It was initially much more verbose, as a giant match with copy-paste almost identical code for every TransformedInputEvent. That wasn't maintainable and I ended up refactoring how movement worked from "Movable.move_up()", etc to generating MovementEvents which the current position and a delta.

The system I ended up deciding on was one where we do a bunch of logic to figure out which entities would move, then send those movements as events on a channel.

The nitty gritty of figuring out which entities to move is more complicated than it should be, but since this system doesn't actually do the moving it makes this system a bit more concise than it would be nievely.

Fields

reader: ReaderId<TransformedInputEvent>

Implementations

impl MovementSolverSystem[src]

pub(crate) fn new(reader: ReaderId<TransformedInputEvent>) -> Self[src]

Trait Implementations

impl<'s> System<'s> for MovementSolverSystem[src]

type SystemData = (Read<'s, EventChannel<TransformedInputEvent>>, Write<'s, EventChannel<MovementEvent>>, ReadStorage<'s, Movable>, ReadStorage<'s, Immovable>, ReadStorage<'s, Position>, ReadStorage<'s, Named>, ReadStorage<'s, Holding>, Entities<'s>)

The resource bundle required to execute this system. Read more

impl<'system_desc_a, 'system_desc_b> SystemDesc<'system_desc_a, 'system_desc_b, MovementSolverSystem> for MovementSolverSystem[src]

Auto Trait Implementations

impl !RefUnwindSafe for MovementSolverSystem

impl Send for MovementSolverSystem

impl Sync for MovementSolverSystem

impl Unpin for MovementSolverSystem

impl !UnwindSafe for MovementSolverSystem

Blanket Implementations

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S where
    D: AdaptFrom<S, Swp, Dwp, T>,
    Dwp: WhitePoint,
    Swp: WhitePoint,
    T: Component + Float
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Any for T where
    T: Any

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Event for T where
    T: Send + Sync + 'static, 

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Resource for T where
    T: Any + Send + Sync

impl<'a, T> RunNow<'a> for T where
    T: System<'a>, 

impl<'a, T> RunWithPool<'a> for T where
    T: System<'a>, 

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T> SetParameter for T

impl<SS, SP> SupersetOf<SS> for SP where
    SS: SubsetOf<SP>, 

impl<T> Supports<T> for T

impl<'s, S> SystemExt for S where
    S: System<'s>, 

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,