pub struct Single<'world, 'state, D: QueryData, F: QueryFilter = (), Desc: SingleDescriptor<'world, 'state, D, F> = ()>(pub <Desc::D as WorldQuery>::Item<'world>);Expand description
Get single entity from query
§Example
Before using Single:
pub fn snap_camera(
players: Query<&Transform, With<Player>>,
mut cameras: Query<&mut Transform, (With<Camera>, Without<Player>)>,
) {
let player = players.single();
let mut camera = cameras.single_mut();
camera.translation = player.translation.xy().extend(100.0);
}After using Single:
pub fn snap_camera(
player: Single<&Transform, With<Player>>,
mut camera: Single<&mut Transform, (With<Camera>, Without<Player>)>,
) {
camera.translation = player.translation.xy().extend(100.0);
}Or like this:
pub fn snap_camera(
Single(player): Single<&Transform, With<Player>>,
Single(mut camera): Single<&mut Transform, (With<Camera>, Without<Player>)>,
) {
camera.translation = player.translation.xy().extend(100.0);
}§Example with multiple components
Before using Single:
pub fn move_with_wasd(
mut players: Query<(&mut KinematicCharacterController, &Player)>,
input: Res<ButtonInput<KeyCode>>,
time: Res<Time>,
) {
let (mut controller, player) = players.single_mut();
const WASD_DISPATCH: [(KeyCode, Vec2); 4] = [
(KeyCode::KeyW, Vec2::Y),
(KeyCode::KeyA, Vec2::NEG_X),
(KeyCode::KeyS, Vec2::NEG_Y),
(KeyCode::KeyD, Vec2::X),
];
let mut translation = None;
for (key, vector) in WASD_DISPATCH {
if input.pressed(key) {
translation = Some(translation.unwrap_or(Vec2::ZERO) + vector);
}
}
controller.translation =
translation.map(|t| t.normalize() * player.speed * time.delta_seconds());
}After using Single:
pub fn move_with_wasd(
Single((
mut controller,
player
)): Single<(&mut KinematicCharacterController, &Player)>,
input: Res<ButtonInput<KeyCode>>,
time: Res<Time>,
) {
const WASD_DISPATCH: [(KeyCode, Vec2); 4] = [
(KeyCode::KeyW, Vec2::Y),
(KeyCode::KeyA, Vec2::NEG_X),
(KeyCode::KeyS, Vec2::NEG_Y),
(KeyCode::KeyD, Vec2::X),
];
let mut translation = None;
for (key, vector) in WASD_DISPATCH {
if input.pressed(key) {
translation = Some(translation.unwrap_or(Vec2::ZERO) + vector);
}
}
controller.translation =
translation.map(|t| t.normalize() * player.speed * time.delta_seconds());
}§Example with SystemParam
Before using Single:
pub fn example(
mut param_set: ParamSet<(
Query<Entity>,
Query<&mut SpritesheetAnimation>
)>,
) {
let entities = param_set.p0();
let mut animation = param_set.p1().single_mut();
// ...
}After using Single:
pub fn example(
mut param_set: ParamSet<(
Query<Entity>,
Single<&mut SpritesheetAnimation>
)>,
) {
let entities = param_set.p0();
let Single(mut animation) = param_set.p1();
// ...
}Tuple Fields§
§0: <Desc::D as WorldQuery>::Item<'world>Trait Implementations§
Source§impl<'world, 'state, D: QueryData, F: QueryFilter, Desc: SingleDescriptor<'world, 'state, D, F>> Deref for Single<'world, 'state, D, F, Desc>
impl<'world, 'state, D: QueryData, F: QueryFilter, Desc: SingleDescriptor<'world, 'state, D, F>> Deref for Single<'world, 'state, D, F, Desc>
Source§impl<'world, 'state, D: QueryData, F: QueryFilter, Desc: SingleDescriptor<'world, 'state, D, F>> DerefMut for Single<'world, 'state, D, F, Desc>
impl<'world, 'state, D: QueryData, F: QueryFilter, Desc: SingleDescriptor<'world, 'state, D, F>> DerefMut for Single<'world, 'state, D, F, Desc>
Source§impl<'ww, 'ss, D: QueryData + 'static, F: QueryFilter + 'static> SystemParam for Single<'ww, 'ss, D, F>
impl<'ww, 'ss, D: QueryData + 'static, F: QueryFilter + 'static> SystemParam for Single<'ww, 'ss, D, F>
Source§type State = QueryState<D, F>
type State = QueryState<D, F>
Used to store data which persists across invocations of a system.
Source§type Item<'w, 's> = Single<'w, 's, D, F>
type Item<'w, 's> = Single<'w, 's, D, F>
The item type returned when constructing this system param.
The value of this associated type should be
Self, instantiated with new lifetimes. Read moreSource§fn init_state(world: &mut World, system_meta: &mut SystemMeta) -> Self::State
fn init_state(world: &mut World, system_meta: &mut SystemMeta) -> Self::State
Registers any
World access used by this SystemParam
and creates a new instance of this param’s State.Source§unsafe fn new_archetype(
state: &mut Self::State,
archetype: &Archetype,
system_meta: &mut SystemMeta,
)
unsafe fn new_archetype( state: &mut Self::State, archetype: &Archetype, system_meta: &mut SystemMeta, )
For the specified
Archetype, registers the components accessed by this SystemParam (if applicable).a Read moreSource§unsafe fn get_param<'w, 's>(
state: &'s mut Self::State,
system_meta: &SystemMeta,
world: UnsafeWorldCell<'w>,
change_tick: Tick,
) -> Self::Item<'w, 's>
unsafe fn get_param<'w, 's>( state: &'s mut Self::State, system_meta: &SystemMeta, world: UnsafeWorldCell<'w>, change_tick: Tick, ) -> Self::Item<'w, 's>
Creates a parameter to be passed into a
SystemParamFunction. Read moreSource§fn apply(state: &mut Self::State, system_meta: &SystemMeta, world: &mut World)
fn apply(state: &mut Self::State, system_meta: &SystemMeta, world: &mut World)
Applies any deferred mutations stored in this
SystemParam’s state.
This is used to apply Commands during apply_deferred.Source§fn queue(
state: &mut Self::State,
system_meta: &SystemMeta,
world: DeferredWorld<'_>,
)
fn queue( state: &mut Self::State, system_meta: &SystemMeta, world: DeferredWorld<'_>, )
Queues any deferred mutations to be applied at the next
apply_deferred.impl<'w, 's, D: ReadOnlyQueryData + 'static, F: QueryFilter + 'static> ReadOnlySystemParam for Single<'w, 's, D, F>
Auto Trait Implementations§
impl<'world, 'state, D, F, Desc> Freeze for Single<'world, 'state, D, F, Desc>
impl<'world, 'state, D, F, Desc> RefUnwindSafe for Single<'world, 'state, D, F, Desc>where
<<Desc as SingleDescriptor<'world, 'state, D, F>>::D as WorldQuery>::Item<'world>: RefUnwindSafe,
impl<'world, 'state, D, F, Desc> Send for Single<'world, 'state, D, F, Desc>
impl<'world, 'state, D, F, Desc> Sync for Single<'world, 'state, D, F, Desc>
impl<'world, 'state, D, F, Desc> Unpin for Single<'world, 'state, D, F, Desc>
impl<'world, 'state, D, F, Desc> UnwindSafe for Single<'world, 'state, D, F, Desc>where
<<Desc as SingleDescriptor<'world, 'state, D, F>>::D as WorldQuery>::Item<'world>: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.