[−][src]Struct rust_action_heroes::system::movement_solver::MovementSolverSystem
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
fn run(
&mut self,
(input_channel, move_channel, movables, immovables, positions, names, holdings, entities): Self::SystemData
)
[src]
&mut self,
(input_channel, move_channel, movables, immovables, positions, names, holdings, entities): Self::SystemData
)
fn running_time(&self) -> RunningTime
fn accessor(&'b self) -> AccessorCow<'a, 'b, Self>
fn setup(&mut self, world: &mut World)
fn dispose(self, world: &mut World)
impl<'system_desc_a, 'system_desc_b> SystemDesc<'system_desc_a, 'system_desc_b, MovementSolverSystem> for MovementSolverSystem
[src]
fn build(self, world: &mut World) -> 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]
D: AdaptFrom<S, Swp, Dwp, T>,
Dwp: WhitePoint,
Swp: WhitePoint,
T: Component + Float,
fn adapt_into_using<M>(self, method: M) -> D where
M: TransformMatrix<Swp, Dwp, T>,
[src]
M: TransformMatrix<Swp, Dwp, T>,
fn adapt_into(self) -> D
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Any for T where
T: Any,
T: Any,
fn get_type_id(&self) -> TypeId
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Event for T where
T: Send + Sync + 'static,
T: Send + Sync + 'static,
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Resource for T where
T: Any + Send + Sync,
T: Any + Send + Sync,
impl<'a, T> RunNow<'a> for T where
T: System<'a>,
T: System<'a>,
fn run_now(&mut self, world: &'a World)
fn setup(&mut self, world: &mut World)
fn dispose(self: Box<T>, world: &mut World)
impl<'a, T> RunWithPool<'a> for T where
T: System<'a>,
T: System<'a>,
fn setup(&mut self, world: &mut World)
fn run(&mut self, world: &'a World, &ThreadPool)
fn reads(&self, reads: &mut Vec<ResourceId>)
fn writes(&self, writes: &mut Vec<ResourceId>)
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T> SetParameter for T
fn set<T>(&mut self, value: T) -> <T as Parameter<Self>>::Result where
T: Parameter<Self>,
T: Parameter<Self>,
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
SS: SubsetOf<SP>,
fn to_subset(&self) -> Option<SS>
fn is_in_subset(&self) -> bool
unsafe fn to_subset_unchecked(&self) -> SS
fn from_subset(element: &SS) -> SP
impl<T> Supports<T> for T
impl<'s, S> SystemExt for S where
S: System<'s>,
S: System<'s>,
fn pausable<V>(self, value: V) -> Pausable<S, V> where
V: 'static + Send + Sync + Default + PartialEq<V>,
V: 'static + Send + Sync + Default + PartialEq<V>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,