pub struct ButtonInput<T>{ /* private fields */ }
Expand description
A “press-able” input of type T
.
§Usage
This type can be used as a resource to keep the current state of an input, by reacting to events from the input. For a given input value:
ButtonInput::pressed
will returntrue
between a press and a release event.ButtonInput::just_pressed
will returntrue
for one frame after a press event.ButtonInput::just_released
will returntrue
for one frame after a release event.
§Multiple systems
In case multiple systems are checking for ButtonInput::just_pressed
or ButtonInput::just_released
but only one should react, for example when modifying a
Resource
, you should consider clearing the input state, either by:
- Using
ButtonInput::clear_just_pressed
orButtonInput::clear_just_released
instead. - Calling
ButtonInput::clear
orButtonInput::reset
immediately after the state change.
§Performance
For all operations, the following conventions are used:
- n is the number of stored inputs.
- m is the number of input arguments passed to the method.
- *-suffix denotes an amortized cost.
- ~-suffix denotes an expected cost.
See Rust’s std::collections doc on performance for more details on the conventions used here.
ButtonInput operations | Computational complexity |
---|---|
ButtonInput::any_just_pressed | O(m)~ |
ButtonInput::any_just_released | O(m)~ |
ButtonInput::any_pressed | O(m)~ |
ButtonInput::get_just_pressed | O(n) |
ButtonInput::get_just_released | O(n) |
ButtonInput::get_pressed | O(n) |
ButtonInput::just_pressed | O(1)~ |
ButtonInput::just_released | O(1)~ |
ButtonInput::pressed | O(1)~ |
ButtonInput::press | O(1)~* |
ButtonInput::release | O(1)~* |
ButtonInput::release_all | O(n)~* |
ButtonInput::clear_just_pressed | O(1)~ |
ButtonInput::clear_just_released | O(1)~ |
ButtonInput::reset_all | O(n) |
ButtonInput::clear | O(n) |
§Window focus
ButtonInput<KeyCode>
is tied to window focus. For example, if the user holds a button
while the window loses focus, ButtonInput::just_released
will be triggered. Similarly if the window
regains focus, ButtonInput::just_pressed
will be triggered.
ButtonInput<GamepadButton>
is independent of window focus.
§Examples
Reading and checking against the current set of pressed buttons:
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(
Update,
print_mouse.run_if(resource_changed::<ButtonInput<MouseButton>>),
)
.add_systems(
Update,
print_keyboard.run_if(resource_changed::<ButtonInput<KeyCode>>),
)
.run();
}
fn print_mouse(mouse: Res<ButtonInput<MouseButton>>) {
println!("Mouse: {:?}", mouse.get_pressed().collect::<Vec<_>>());
}
fn print_keyboard(keyboard: Res<ButtonInput<KeyCode>>) {
if keyboard.any_pressed([KeyCode::ControlLeft, KeyCode::ControlRight])
&& keyboard.any_pressed([KeyCode::AltLeft, KeyCode::AltRight])
&& keyboard.any_pressed([KeyCode::ShiftLeft, KeyCode::ShiftRight])
&& keyboard.any_pressed([KeyCode::SuperLeft, KeyCode::SuperRight])
&& keyboard.pressed(KeyCode::KeyL)
{
println!("On Windows this opens LinkedIn.");
} else {
println!("keyboard: {:?}", keyboard.get_pressed().collect::<Vec<_>>());
}
}
§Note
When adding this resource for a new input type, you should:
- Call the
ButtonInput::press
method for each press event. - Call the
ButtonInput::release
method for each release event. - Call the
ButtonInput::clear
method at each frame start, before processing events.
Note: Calling clear
from a ResMut
will trigger change detection.
It may be preferable to use DetectChangesMut::bypass_change_detection
to avoid causing the resource to always be marked as changed.
Implementations§
Source§impl<T> ButtonInput<T>
impl<T> ButtonInput<T>
Sourcepub fn pressed(&self, input: T) -> bool
pub fn pressed(&self, input: T) -> bool
Returns true
if the input
has been pressed.
Examples found in repository?
More examples
13fn keyboard_input_system(keyboard_input: Res<ButtonInput<KeyCode>>) {
14 if keyboard_input.pressed(KeyCode::KeyA) {
15 info!("'A' currently pressed");
16 }
17
18 if keyboard_input.just_pressed(KeyCode::KeyA) {
19 info!("'A' just pressed");
20 }
21 if keyboard_input.just_released(KeyCode::KeyA) {
22 info!("'A' just released");
23 }
24}
135fn trigger_hooks(
136 mut commands: Commands,
137 keys: Res<ButtonInput<KeyCode>>,
138 index: Res<MyComponentIndex>,
139) {
140 for (key, entity) in index.iter() {
141 if !keys.pressed(*key) {
142 commands.entity(*entity).remove::<MyComponent>();
143 }
144 }
145 for key in keys.get_just_pressed() {
146 commands.spawn(MyComponent(*key));
147 }
148}
16fn mouse_click_system(mouse_button_input: Res<ButtonInput<MouseButton>>) {
17 if mouse_button_input.pressed(MouseButton::Left) {
18 info!("left mouse currently pressed");
19 }
20
21 if mouse_button_input.just_pressed(MouseButton::Left) {
22 info!("left mouse just pressed");
23 }
24
25 if mouse_button_input.just_released(MouseButton::Left) {
26 info!("left mouse just released");
27 }
28}
120fn trigger_shake_on_space(
121 time: Res<Time>,
122 keyboard_input: Res<ButtonInput<KeyCode>>,
123 mut screen_shake: ResMut<ScreenShake>,
124) {
125 if keyboard_input.pressed(KeyCode::Space) {
126 let screen_shake_clone = screen_shake.clone();
127 screen_shake.start_shake(
128 MAX_ANGLE,
129 MAX_OFFSET,
130 screen_shake_clone.trauma + TRAUMA_INCREMENT * time.delta_secs(),
131 Vec2 { x: 0.0, y: 0.0 },
132 ); // final_position should be your current player position
133 }
134}
604fn adjust_color_grading_option(
605 mut color_grading: Single<&mut ColorGrading>,
606 input: Res<ButtonInput<KeyCode>>,
607 currently_selected_option: Res<SelectedColorGradingOption>,
608) {
609 let mut delta = 0.0;
610 if input.pressed(KeyCode::ArrowLeft) {
611 delta -= OPTION_ADJUSTMENT_SPEED;
612 }
613 if input.pressed(KeyCode::ArrowRight) {
614 delta += OPTION_ADJUSTMENT_SPEED;
615 }
616
617 if delta != 0.0 {
618 let new_value = currently_selected_option.get(color_grading.as_ref()) + delta;
619 currently_selected_option.set(&mut color_grading, new_value);
620 }
621}
- examples/3d/post_processing.rs
- examples/audio/spatial_audio_2d.rs
- examples/audio/spatial_audio_3d.rs
- examples/3d/lighting.rs
- examples/camera/first_person_view_model.rs
- examples/state/custom_transitions.rs
- examples/state/states.rs
- examples/state/sub_states.rs
- examples/camera/2d_top_down_camera.rs
- examples/3d/depth_of_field.rs
- examples/games/breakout.rs
- examples/state/computed_states.rs
- examples/3d/spotlight.rs
- examples/3d/volumetric_fog.rs
- examples/movement/physics_in_fixed_timestep.rs
- examples/testbed/full_ui.rs
- examples/3d/generate_custom_mesh.rs
- examples/3d/irradiance_volumes.rs
- examples/ui/scroll.rs
- examples/stress_tests/bevymark.rs
- examples/3d/mixed_lighting.rs
- examples/gizmos/light_gizmos.rs
- examples/3d/ssr.rs
- examples/2d/rotation.rs
- examples/3d/visibility_range.rs
- examples/3d/tonemapping.rs
- examples/3d/auto_exposure.rs
- examples/camera/camera_orbit.rs
- examples/3d/clustered_decals.rs
- examples/games/alien_cake_addict.rs
- examples/3d/blend_modes.rs
- examples/gizmos/2d_gizmos.rs
- examples/2d/2d_viewport_to_world.rs
- examples/gizmos/3d_gizmos.rs
- examples/3d/../helpers/camera_controller.rs
- examples/3d/bloom_3d.rs
- examples/3d/fog.rs
- examples/2d/bloom_2d.rs
- examples/3d/transmission.rs
Sourcepub fn any_pressed(&self, inputs: impl IntoIterator<Item = T>) -> bool
pub fn any_pressed(&self, inputs: impl IntoIterator<Item = T>) -> bool
Returns true
if any item in inputs
has been pressed.
Examples found in repository?
More examples
130fn update_system(
131 camera: Single<(&mut DistanceFog, &mut Transform)>,
132 mut text: Single<&mut Text>,
133 time: Res<Time>,
134 keycode: Res<ButtonInput<KeyCode>>,
135) {
136 let now = time.elapsed_secs();
137 let delta = time.delta_secs();
138
139 let (mut fog, mut transform) = camera.into_inner();
140
141 // Orbit camera around pyramid
142 let orbit_scale = 8.0 + ops::sin(now / 10.0) * 7.0;
143 *transform = Transform::from_xyz(
144 ops::cos(now / 5.0) * orbit_scale,
145 12.0 - orbit_scale / 2.0,
146 ops::sin(now / 5.0) * orbit_scale,
147 )
148 .looking_at(Vec3::ZERO, Vec3::Y);
149
150 // Fog Information
151 text.0 = format!("Fog Falloff: {:?}\nFog Color: {:?}", fog.falloff, fog.color);
152
153 // Fog Falloff Mode Switching
154 text.push_str("\n\n1 / 2 / 3 - Fog Falloff Mode");
155
156 if keycode.pressed(KeyCode::Digit1) {
157 if let FogFalloff::Linear { .. } = fog.falloff {
158 // No change
159 } else {
160 fog.falloff = FogFalloff::Linear {
161 start: 5.0,
162 end: 20.0,
163 };
164 };
165 }
166
167 if keycode.pressed(KeyCode::Digit2) {
168 if let FogFalloff::Exponential { .. } = fog.falloff {
169 // No change
170 } else if let FogFalloff::ExponentialSquared { density } = fog.falloff {
171 fog.falloff = FogFalloff::Exponential { density };
172 } else {
173 fog.falloff = FogFalloff::Exponential { density: 0.07 };
174 };
175 }
176
177 if keycode.pressed(KeyCode::Digit3) {
178 if let FogFalloff::Exponential { density } = fog.falloff {
179 fog.falloff = FogFalloff::ExponentialSquared { density };
180 } else if let FogFalloff::ExponentialSquared { .. } = fog.falloff {
181 // No change
182 } else {
183 fog.falloff = FogFalloff::Exponential { density: 0.07 };
184 };
185 }
186
187 // Linear Fog Controls
188 if let FogFalloff::Linear { start, end } = &mut fog.falloff {
189 text.push_str("\nA / S - Move Start Distance\nZ / X - Move End Distance");
190
191 if keycode.pressed(KeyCode::KeyA) {
192 *start -= delta * 3.0;
193 }
194 if keycode.pressed(KeyCode::KeyS) {
195 *start += delta * 3.0;
196 }
197 if keycode.pressed(KeyCode::KeyZ) {
198 *end -= delta * 3.0;
199 }
200 if keycode.pressed(KeyCode::KeyX) {
201 *end += delta * 3.0;
202 }
203 }
204
205 // Exponential Fog Controls
206 if let FogFalloff::Exponential { density } = &mut fog.falloff {
207 text.push_str("\nA / S - Change Density");
208
209 if keycode.pressed(KeyCode::KeyA) {
210 *density -= delta * 0.5 * *density;
211 if *density < 0.0 {
212 *density = 0.0;
213 }
214 }
215 if keycode.pressed(KeyCode::KeyS) {
216 *density += delta * 0.5 * *density;
217 }
218 }
219
220 // ExponentialSquared Fog Controls
221 if let FogFalloff::ExponentialSquared { density } = &mut fog.falloff {
222 text.push_str("\nA / S - Change Density");
223
224 if keycode.pressed(KeyCode::KeyA) {
225 *density -= delta * 0.5 * *density;
226 if *density < 0.0 {
227 *density = 0.0;
228 }
229 }
230 if keycode.pressed(KeyCode::KeyS) {
231 *density += delta * 0.5 * *density;
232 }
233 }
234
235 // RGBA Controls
236 text.push_str("\n\n- / = - Red\n[ / ] - Green\n; / ' - Blue\n. / ? - Alpha");
237
238 // We're performing various operations in the sRGB color space,
239 // so we convert the fog color to sRGB here, then modify it,
240 // and finally when we're done we can convert it back and set it.
241 let mut fog_color = Srgba::from(fog.color);
242 if keycode.pressed(KeyCode::Minus) {
243 fog_color.red = (fog_color.red - 0.1 * delta).max(0.0);
244 }
245
246 if keycode.any_pressed([KeyCode::Equal, KeyCode::NumpadEqual]) {
247 fog_color.red = (fog_color.red + 0.1 * delta).min(1.0);
248 }
249
250 if keycode.pressed(KeyCode::BracketLeft) {
251 fog_color.green = (fog_color.green - 0.1 * delta).max(0.0);
252 }
253
254 if keycode.pressed(KeyCode::BracketRight) {
255 fog_color.green = (fog_color.green + 0.1 * delta).min(1.0);
256 }
257
258 if keycode.pressed(KeyCode::Semicolon) {
259 fog_color.blue = (fog_color.blue - 0.1 * delta).max(0.0);
260 }
261
262 if keycode.pressed(KeyCode::Quote) {
263 fog_color.blue = (fog_color.blue + 0.1 * delta).min(1.0);
264 }
265
266 if keycode.pressed(KeyCode::Period) {
267 fog_color.alpha = (fog_color.alpha - 0.1 * delta).max(0.0);
268 }
269
270 if keycode.pressed(KeyCode::Slash) {
271 fog_color.alpha = (fog_color.alpha + 0.1 * delta).min(1.0);
272 }
273
274 fog.color = Color::from(fog_color);
275}
Sourcepub fn all_pressed(&self, inputs: impl IntoIterator<Item = T>) -> bool
pub fn all_pressed(&self, inputs: impl IntoIterator<Item = T>) -> bool
Returns true
if all items in inputs
have been pressed.
Sourcepub fn release_all(&mut self)
pub fn release_all(&mut self)
Registers a release for all currently pressed inputs.
Sourcepub fn just_pressed(&self, input: T) -> bool
pub fn just_pressed(&self, input: T) -> bool
Returns true
if the input
has been pressed during the current frame.
Note: This function does not imply information regarding the current state of ButtonInput::pressed
or ButtonInput::just_released
.
Examples found in repository?
More examples
- examples/testbed/2d.rs
- examples/testbed/3d.rs
- examples/testbed/ui.rs
- examples/audio/audio_control.rs
- examples/window/scale_factor_override.rs
- examples/input/keyboard_modifiers.rs
- examples/input/keyboard_input.rs
- examples/ui/ui_texture_atlas.rs
- examples/window/monitor_info.rs
- examples/state/sub_states.rs
- examples/window/screenshot.rs
- examples/stress_tests/many_gizmos.rs
- examples/3d/atmospheric_fog.rs
- examples/window/window_settings.rs
- examples/3d/depth_of_field.rs
- examples/input/mouse_input.rs
- examples/state/computed_states.rs
- examples/state/custom_transitions.rs
- examples/ecs/one_shot_systems.rs
- examples/ecs/run_conditions.rs
- examples/input/text_input.rs
- examples/math/bounding_2d.rs
- examples/input/mouse_grab.rs
- examples/audio/pitch.rs
- examples/ecs/entity_disabling.rs
- examples/ui/ui_scaling.rs
- examples/window/window_resizing.rs
- examples/ui/overflow_debug.rs
- examples/window/low_power.rs
- examples/shader/shader_material_wesl.rs
- examples/ecs/observers.rs
- examples/window/custom_user_event.rs
- examples/games/loading_screen.rs
- examples/audio/spatial_audio_2d.rs
- examples/dev_tools/fps_overlay.rs
- examples/3d/tonemapping.rs
- examples/3d/shadow_caster_receiver.rs
- examples/audio/spatial_audio_3d.rs
- examples/3d/shadow_biases.rs
- examples/camera/projection_zoom.rs
- examples/games/stepping.rs
- examples/math/cubic_splines.rs
- examples/3d/clearcoat.rs
- examples/3d/occlusion_culling.rs
- examples/window/custom_cursor_image.rs
- examples/3d/order_independent_transparency.rs
- examples/window/window_drag_move.rs
- examples/3d/irradiance_volumes.rs
- examples/transforms/align.rs
- examples/testbed/full_ui.rs
- examples/shader/shader_prepass.rs
- examples/ecs/fallible_params.rs
- examples/ui/directional_navigation.rs
- examples/3d/generate_custom_mesh.rs
- examples/3d/parallax_mapping.rs
- examples/3d/motion_blur.rs
- examples/3d/wireframe.rs
- examples/2d/wireframe_2d.rs
- examples/3d/lighting.rs
- examples/3d/reflection_probes.rs
- examples/gizmos/light_gizmos.rs
- examples/3d/specular_tint.rs
- examples/3d/visibility_range.rs
- examples/3d/volumetric_fog.rs
- examples/stress_tests/many_foxes.rs
- examples/3d/auto_exposure.rs
- examples/3d/ssr.rs
- examples/3d/blend_modes.rs
- examples/gizmos/2d_gizmos.rs
- examples/math/random_sampling.rs
- examples/3d/anisotropy.rs
- examples/3d/deferred_rendering.rs
- examples/math/sampling_primitives.rs
- examples/3d/anti_aliasing.rs
- examples/animation/animated_mesh_control.rs
- examples/gizmos/3d_gizmos.rs
- examples/3d/ssao.rs
- examples/3d/../helpers/camera_controller.rs
- examples/3d/bloom_3d.rs
- examples/2d/bloom_2d.rs
- examples/3d/transmission.rs
Sourcepub fn any_just_pressed(&self, inputs: impl IntoIterator<Item = T>) -> bool
pub fn any_just_pressed(&self, inputs: impl IntoIterator<Item = T>) -> bool
Returns true
if any item in inputs
has been pressed during the current frame.
Sourcepub fn clear_just_pressed(&mut self, input: T) -> bool
pub fn clear_just_pressed(&mut self, input: T) -> bool
Clears the just_pressed
state of the input
and returns true
if the input
has just been pressed.
Future calls to ButtonInput::just_pressed
for the given input will return false until a new press event occurs.
Sourcepub fn just_released(&self, input: T) -> bool
pub fn just_released(&self, input: T) -> bool
Returns true
if the input
has been released during the current frame.
Note: This function does not imply information regarding the current state of ButtonInput::pressed
or ButtonInput::just_pressed
.
Examples found in repository?
13fn keyboard_input_system(keyboard_input: Res<ButtonInput<KeyCode>>) {
14 if keyboard_input.pressed(KeyCode::KeyA) {
15 info!("'A' currently pressed");
16 }
17
18 if keyboard_input.just_pressed(KeyCode::KeyA) {
19 info!("'A' just pressed");
20 }
21 if keyboard_input.just_released(KeyCode::KeyA) {
22 info!("'A' just released");
23 }
24}
More examples
16fn mouse_click_system(mouse_button_input: Res<ButtonInput<MouseButton>>) {
17 if mouse_button_input.pressed(MouseButton::Left) {
18 info!("left mouse currently pressed");
19 }
20
21 if mouse_button_input.just_pressed(MouseButton::Left) {
22 info!("left mouse just pressed");
23 }
24
25 if mouse_button_input.just_released(MouseButton::Left) {
26 info!("left mouse just released");
27 }
28}
325fn mouse_handler(
326 mut commands: Commands,
327 args: Res<Args>,
328 time: Res<Time>,
329 mouse_button_input: Res<ButtonInput<MouseButton>>,
330 window: Query<&Window>,
331 bird_resources: ResMut<BirdResources>,
332 mut counter: ResMut<BevyCounter>,
333 mut rng: Local<Option<ChaCha8Rng>>,
334 mut wave: Local<usize>,
335) {
336 let Ok(window) = window.single() else {
337 return;
338 };
339
340 if rng.is_none() {
341 // We're seeding the PRNG here to make this example deterministic for testing purposes.
342 // This isn't strictly required in practical use unless you need your app to be deterministic.
343 *rng = Some(ChaCha8Rng::seed_from_u64(42));
344 }
345 let rng = rng.as_mut().unwrap();
346
347 if mouse_button_input.just_released(MouseButton::Left) {
348 counter.color = Color::linear_rgb(rng.r#gen(), rng.r#gen(), rng.r#gen());
349 }
350
351 if mouse_button_input.pressed(MouseButton::Left) {
352 let spawn_count = (BIRDS_PER_SECOND as f64 * time.delta_secs_f64()) as usize;
353 spawn_birds(
354 &mut commands,
355 args.into_inner(),
356 &window.resolution,
357 &mut counter,
358 spawn_count,
359 bird_resources.into_inner(),
360 None,
361 *wave,
362 );
363 *wave += 1;
364 }
365}
127fn run_camera_controller(
128 time: Res<Time>,
129 mut windows: Query<&mut Window>,
130 accumulated_mouse_motion: Res<AccumulatedMouseMotion>,
131 accumulated_mouse_scroll: Res<AccumulatedMouseScroll>,
132 mouse_button_input: Res<ButtonInput<MouseButton>>,
133 key_input: Res<ButtonInput<KeyCode>>,
134 mut toggle_cursor_grab: Local<bool>,
135 mut mouse_cursor_grab: Local<bool>,
136 mut query: Query<(&mut Transform, &mut CameraController), With<Camera>>,
137) {
138 let dt = time.delta_secs();
139
140 let Ok((mut transform, mut controller)) = query.single_mut() else {
141 return;
142 };
143
144 if !controller.initialized {
145 let (yaw, pitch, _roll) = transform.rotation.to_euler(EulerRot::YXZ);
146 controller.yaw = yaw;
147 controller.pitch = pitch;
148 controller.initialized = true;
149 info!("{}", *controller);
150 }
151 if !controller.enabled {
152 return;
153 }
154
155 let mut scroll = 0.0;
156
157 let amount = match accumulated_mouse_scroll.unit {
158 MouseScrollUnit::Line => accumulated_mouse_scroll.delta.y,
159 MouseScrollUnit::Pixel => accumulated_mouse_scroll.delta.y / 16.0,
160 };
161 scroll += amount;
162 controller.walk_speed += scroll * controller.scroll_factor * controller.walk_speed;
163 controller.run_speed = controller.walk_speed * 3.0;
164
165 // Handle key input
166 let mut axis_input = Vec3::ZERO;
167 if key_input.pressed(controller.key_forward) {
168 axis_input.z += 1.0;
169 }
170 if key_input.pressed(controller.key_back) {
171 axis_input.z -= 1.0;
172 }
173 if key_input.pressed(controller.key_right) {
174 axis_input.x += 1.0;
175 }
176 if key_input.pressed(controller.key_left) {
177 axis_input.x -= 1.0;
178 }
179 if key_input.pressed(controller.key_up) {
180 axis_input.y += 1.0;
181 }
182 if key_input.pressed(controller.key_down) {
183 axis_input.y -= 1.0;
184 }
185
186 let mut cursor_grab_change = false;
187 if key_input.just_pressed(controller.keyboard_key_toggle_cursor_grab) {
188 *toggle_cursor_grab = !*toggle_cursor_grab;
189 cursor_grab_change = true;
190 }
191 if mouse_button_input.just_pressed(controller.mouse_key_cursor_grab) {
192 *mouse_cursor_grab = true;
193 cursor_grab_change = true;
194 }
195 if mouse_button_input.just_released(controller.mouse_key_cursor_grab) {
196 *mouse_cursor_grab = false;
197 cursor_grab_change = true;
198 }
199 let cursor_grab = *mouse_cursor_grab || *toggle_cursor_grab;
200
201 // Apply movement update
202 if axis_input != Vec3::ZERO {
203 let max_speed = if key_input.pressed(controller.key_run) {
204 controller.run_speed
205 } else {
206 controller.walk_speed
207 };
208 controller.velocity = axis_input.normalize() * max_speed;
209 } else {
210 let friction = controller.friction.clamp(0.0, 1.0);
211 controller.velocity *= 1.0 - friction;
212 if controller.velocity.length_squared() < 1e-6 {
213 controller.velocity = Vec3::ZERO;
214 }
215 }
216 let forward = *transform.forward();
217 let right = *transform.right();
218 transform.translation += controller.velocity.x * dt * right
219 + controller.velocity.y * dt * Vec3::Y
220 + controller.velocity.z * dt * forward;
221
222 // Handle cursor grab
223 if cursor_grab_change {
224 if cursor_grab {
225 for mut window in &mut windows {
226 if !window.focused {
227 continue;
228 }
229
230 window.cursor_options.grab_mode = CursorGrabMode::Locked;
231 window.cursor_options.visible = false;
232 }
233 } else {
234 for mut window in &mut windows {
235 window.cursor_options.grab_mode = CursorGrabMode::None;
236 window.cursor_options.visible = true;
237 }
238 }
239 }
240
241 // Handle mouse input
242 if accumulated_mouse_motion.delta != Vec2::ZERO && cursor_grab {
243 // Apply look update
244 controller.pitch = (controller.pitch
245 - accumulated_mouse_motion.delta.y * RADIANS_PER_DOT * controller.sensitivity)
246 .clamp(-PI / 2., PI / 2.);
247 controller.yaw -=
248 accumulated_mouse_motion.delta.x * RADIANS_PER_DOT * controller.sensitivity;
249 transform.rotation = Quat::from_euler(EulerRot::ZYX, 0.0, controller.yaw, controller.pitch);
250 }
251}
Sourcepub fn any_just_released(&self, inputs: impl IntoIterator<Item = T>) -> bool
pub fn any_just_released(&self, inputs: impl IntoIterator<Item = T>) -> bool
Returns true
if any item in inputs
has just been released.
Sourcepub fn all_just_released(&self, inputs: impl IntoIterator<Item = T>) -> bool
pub fn all_just_released(&self, inputs: impl IntoIterator<Item = T>) -> bool
Returns true
if all items in inputs
have just been released.
Sourcepub fn all_just_pressed(&self, inputs: impl IntoIterator<Item = T>) -> bool
pub fn all_just_pressed(&self, inputs: impl IntoIterator<Item = T>) -> bool
Returns true
if all items in inputs
have been just pressed.
Sourcepub fn clear_just_released(&mut self, input: T) -> bool
pub fn clear_just_released(&mut self, input: T) -> bool
Clears the just_released
state of the input
and returns true
if the input
has just been released.
Future calls to ButtonInput::just_released
for the given input will return false until a new release event occurs.
Sourcepub fn reset(&mut self, input: T)
pub fn reset(&mut self, input: T)
Clears the pressed
, just_pressed
and just_released
data of the input
.
Sourcepub fn reset_all(&mut self)
pub fn reset_all(&mut self)
Clears the pressed
, just_pressed
, and just_released
data for every input.
See also ButtonInput::clear
for simulating elapsed time steps.
Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Clears the just pressed
and just released
data for every input.
See also ButtonInput::reset_all
for a full reset.
Sourcepub fn get_pressed(&self) -> impl ExactSizeIterator
pub fn get_pressed(&self) -> impl ExactSizeIterator
An iterator visiting every pressed input in arbitrary order.
Sourcepub fn get_just_pressed(&self) -> impl ExactSizeIterator
pub fn get_just_pressed(&self) -> impl ExactSizeIterator
An iterator visiting every just pressed input in arbitrary order.
Note: Returned elements do not imply information regarding the current state of ButtonInput::pressed
or ButtonInput::just_released
.
Examples found in repository?
135fn trigger_hooks(
136 mut commands: Commands,
137 keys: Res<ButtonInput<KeyCode>>,
138 index: Res<MyComponentIndex>,
139) {
140 for (key, entity) in index.iter() {
141 if !keys.pressed(*key) {
142 commands.entity(*entity).remove::<MyComponent>();
143 }
144 }
145 for key in keys.get_just_pressed() {
146 commands.spawn(MyComponent(*key));
147 }
148}
Sourcepub fn get_just_released(&self) -> impl ExactSizeIterator
pub fn get_just_released(&self) -> impl ExactSizeIterator
An iterator visiting every just released input in arbitrary order.
Note: Returned elements do not imply information regarding the current state of ButtonInput::pressed
or ButtonInput::just_pressed
.
Trait Implementations§
Source§impl<T> Clone for ButtonInput<T>
impl<T> Clone for ButtonInput<T>
Source§fn clone(&self) -> ButtonInput<T>
fn clone(&self) -> ButtonInput<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<T> Debug for ButtonInput<T>
impl<T> Debug for ButtonInput<T>
Source§impl<T> Default for ButtonInput<T>
impl<T> Default for ButtonInput<T>
Source§fn default() -> ButtonInput<T>
fn default() -> ButtonInput<T>
Source§impl<T> FromArg for &'static ButtonInput<T>
impl<T> FromArg for &'static ButtonInput<T>
Source§impl<T> FromArg for &'static mut ButtonInput<T>
impl<T> FromArg for &'static mut ButtonInput<T>
Source§impl<T> FromArg for ButtonInput<T>
impl<T> FromArg for ButtonInput<T>
Source§impl<T> FromReflect for ButtonInput<T>
impl<T> FromReflect for ButtonInput<T>
Source§fn from_reflect(
reflect: &(dyn PartialReflect + 'static),
) -> Option<ButtonInput<T>>
fn from_reflect( reflect: &(dyn PartialReflect + 'static), ) -> Option<ButtonInput<T>>
Self
from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Self
using,
constructing the value using from_reflect
if that fails. Read moreSource§impl<T> GetOwnership for &ButtonInput<T>
impl<T> GetOwnership for &ButtonInput<T>
Source§impl<T> GetOwnership for &mut ButtonInput<T>
impl<T> GetOwnership for &mut ButtonInput<T>
Source§impl<T> GetOwnership for ButtonInput<T>
impl<T> GetOwnership for ButtonInput<T>
Source§impl<T> GetTypeRegistration for ButtonInput<T>
impl<T> GetTypeRegistration for ButtonInput<T>
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration
for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Source§impl<T> IntoReturn for &ButtonInput<T>
impl<T> IntoReturn for &ButtonInput<T>
Source§fn into_return<'into_return>(self) -> Return<'into_return>where
&ButtonInput<T>: 'into_return,
fn into_return<'into_return>(self) -> Return<'into_return>where
&ButtonInput<T>: 'into_return,
Source§impl<T> IntoReturn for &mut ButtonInput<T>
impl<T> IntoReturn for &mut ButtonInput<T>
Source§fn into_return<'into_return>(self) -> Return<'into_return>where
&mut ButtonInput<T>: 'into_return,
fn into_return<'into_return>(self) -> Return<'into_return>where
&mut ButtonInput<T>: 'into_return,
Source§impl<T> IntoReturn for ButtonInput<T>
impl<T> IntoReturn for ButtonInput<T>
Source§fn into_return<'into_return>(self) -> Return<'into_return>where
ButtonInput<T>: 'into_return,
fn into_return<'into_return>(self) -> Return<'into_return>where
ButtonInput<T>: 'into_return,
Source§impl<T> PartialReflect for ButtonInput<T>
impl<T> PartialReflect for ButtonInput<T>
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn try_apply(
&mut self,
value: &(dyn PartialReflect + 'static),
) -> Result<(), ApplyError>
fn try_apply( &mut self, value: &(dyn PartialReflect + 'static), ) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<ButtonInput<T>>) -> ReflectOwned
fn reflect_owned(self: Box<ButtonInput<T>>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<ButtonInput<T>>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<ButtonInput<T>>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
Source§fn into_partial_reflect(self: Box<ButtonInput<T>>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<ButtonInput<T>>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
Source§fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
Source§fn reflect_partial_eq(
&self,
value: &(dyn PartialReflect + 'static),
) -> Option<bool>
fn reflect_partial_eq( &self, value: &(dyn PartialReflect + 'static), ) -> Option<bool>
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Self
using reflection. Read moreSource§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Source§fn clone_value(&self) -> Box<dyn PartialReflect>
fn clone_value(&self) -> Box<dyn PartialReflect>
reflect_clone
. To convert reflected values to dynamic ones, use to_dynamic
.Self
into its dynamic representation. Read moreSource§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl<T> Reflect for ButtonInput<T>
impl<T> Reflect for ButtonInput<T>
Source§fn into_any(self: Box<ButtonInput<T>>) -> Box<dyn Any>
fn into_any(self: Box<ButtonInput<T>>) -> Box<dyn Any>
Box<dyn Any>
. Read moreSource§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut dyn Any
. Read moreSource§fn into_reflect(self: Box<ButtonInput<T>>) -> Box<dyn Reflect>
fn into_reflect(self: Box<ButtonInput<T>>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
Source§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
Source§impl<T> Struct for ButtonInput<T>
impl<T> Struct for ButtonInput<T>
Source§fn field(&self, name: &str) -> Option<&(dyn PartialReflect + 'static)>
fn field(&self, name: &str) -> Option<&(dyn PartialReflect + 'static)>
name
as a &dyn PartialReflect
.Source§fn field_mut(
&mut self,
name: &str,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_mut( &mut self, name: &str, ) -> Option<&mut (dyn PartialReflect + 'static)>
name
as a
&mut dyn PartialReflect
.Source§fn field_at(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
fn field_at(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
index
as a
&dyn PartialReflect
.Source§fn field_at_mut(
&mut self,
index: usize,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_at_mut( &mut self, index: usize, ) -> Option<&mut (dyn PartialReflect + 'static)>
index
as a &mut dyn PartialReflect
.Source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
index
.Source§fn iter_fields(&self) -> FieldIter<'_> ⓘ
fn iter_fields(&self) -> FieldIter<'_> ⓘ
fn to_dynamic_struct(&self) -> DynamicStruct
Source§fn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
to_dynamic_struct
insteadDynamicStruct
.Source§fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
None
if TypeInfo
is not available.Source§impl<T> TypePath for ButtonInput<T>
impl<T> TypePath for ButtonInput<T>
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
Source§impl<T> Typed for ButtonInput<T>
impl<T> Typed for ButtonInput<T>
impl<T> Resource for ButtonInput<T>
Auto Trait Implementations§
impl<T> Freeze for ButtonInput<T>
impl<T> RefUnwindSafe for ButtonInput<T>where
T: RefUnwindSafe,
impl<T> Send for ButtonInput<T>
impl<T> Sync for ButtonInput<T>
impl<T> Unpin for ButtonInput<T>where
T: Unpin,
impl<T> UnwindSafe for ButtonInput<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn 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>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which 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)
&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)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.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>
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>
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)
&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)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path
.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident
.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name
.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
Typed::type_info
.Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self
using default()
.
Source§impl<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moreSource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moreSource§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian()
.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.