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::pressedwill returntruebetween a press and a release event.ButtonInput::just_pressedwill returntruefor one frame after a press event.ButtonInput::just_releasedwill returntruefor 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_pressedorButtonInput::clear_just_releasedinstead. - Calling
ButtonInput::clearorButtonInput::resetimmediately 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::pressmethod for each press event. - Call the
ButtonInput::releasemethod for each release event. - Call the
ButtonInput::clearmethod 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?
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}More examples
13fn keyboard_input_system(
14 keyboard_input: Res<ButtonInput<KeyCode>>,
15 key_input: Res<ButtonInput<Key>>,
16) {
17 // KeyCode is used when you want the key location across different keyboard layouts
18 // See https://w3c.github.io/uievents-code/#code-value-tables for the locations
19 if keyboard_input.pressed(KeyCode::KeyA) {
20 info!("'A' currently pressed");
21 }
22
23 if keyboard_input.just_pressed(KeyCode::KeyA) {
24 info!("'A' just pressed");
25 }
26 if keyboard_input.just_released(KeyCode::KeyA) {
27 info!("'A' just released");
28 }
29
30 // Key is used when you want a specific key, no matter where it is located.
31 // This is useful for symbols that have a specific connotation, e.g. '?' for
32 // a help menu or '+'/'-' for zoom
33 let key = Key::Character("?".into());
34 if key_input.pressed(key.clone()) {
35 info!("'?' currently pressed");
36 }
37 if key_input.just_pressed(key.clone()) {
38 info!("'?' just pressed");
39 }
40 if key_input.just_released(key) {
41 info!("'?' just released");
42 }
43}72fn update_bloom_settings(
73 camera: Single<(Entity, &Tonemapping, Option<&mut Bloom>), With<Camera>>,
74 mut text: Single<&mut Text>,
75 mut commands: Commands,
76 keycode: Res<ButtonInput<KeyCode>>,
77 time: Res<Time>,
78) {
79 let (camera_entity, tonemapping, bloom) = camera.into_inner();
80
81 match bloom {
82 Some(mut bloom) => {
83 text.0 = "Bloom (Toggle: Space)\n".to_string();
84 text.push_str(&format!("(Q/A) Intensity: {:.2}\n", bloom.intensity));
85 text.push_str(&format!(
86 "(W/S) Low-frequency boost: {:.2}\n",
87 bloom.low_frequency_boost
88 ));
89 text.push_str(&format!(
90 "(E/D) Low-frequency boost curvature: {:.2}\n",
91 bloom.low_frequency_boost_curvature
92 ));
93 text.push_str(&format!(
94 "(R/F) High-pass frequency: {:.2}\n",
95 bloom.high_pass_frequency
96 ));
97 text.push_str(&format!(
98 "(T/G) Mode: {}\n",
99 match bloom.composite_mode {
100 BloomCompositeMode::EnergyConserving => "Energy-conserving",
101 BloomCompositeMode::Additive => "Additive",
102 }
103 ));
104 text.push_str(&format!(
105 "(Y/H) Threshold: {:.2}\n",
106 bloom.prefilter.threshold
107 ));
108 text.push_str(&format!(
109 "(U/J) Threshold softness: {:.2}\n",
110 bloom.prefilter.threshold_softness
111 ));
112 text.push_str(&format!("(I/K) Horizontal Scale: {:.2}\n", bloom.scale.x));
113
114 if keycode.just_pressed(KeyCode::Space) {
115 commands.entity(camera_entity).remove::<Bloom>();
116 }
117
118 let dt = time.delta_secs();
119
120 if keycode.pressed(KeyCode::KeyA) {
121 bloom.intensity -= dt / 10.0;
122 }
123 if keycode.pressed(KeyCode::KeyQ) {
124 bloom.intensity += dt / 10.0;
125 }
126 bloom.intensity = bloom.intensity.clamp(0.0, 1.0);
127
128 if keycode.pressed(KeyCode::KeyS) {
129 bloom.low_frequency_boost -= dt / 10.0;
130 }
131 if keycode.pressed(KeyCode::KeyW) {
132 bloom.low_frequency_boost += dt / 10.0;
133 }
134 bloom.low_frequency_boost = bloom.low_frequency_boost.clamp(0.0, 1.0);
135
136 if keycode.pressed(KeyCode::KeyD) {
137 bloom.low_frequency_boost_curvature -= dt / 10.0;
138 }
139 if keycode.pressed(KeyCode::KeyE) {
140 bloom.low_frequency_boost_curvature += dt / 10.0;
141 }
142 bloom.low_frequency_boost_curvature =
143 bloom.low_frequency_boost_curvature.clamp(0.0, 1.0);
144
145 if keycode.pressed(KeyCode::KeyF) {
146 bloom.high_pass_frequency -= dt / 10.0;
147 }
148 if keycode.pressed(KeyCode::KeyR) {
149 bloom.high_pass_frequency += dt / 10.0;
150 }
151 bloom.high_pass_frequency = bloom.high_pass_frequency.clamp(0.0, 1.0);
152
153 if keycode.pressed(KeyCode::KeyG) {
154 bloom.composite_mode = BloomCompositeMode::Additive;
155 }
156 if keycode.pressed(KeyCode::KeyT) {
157 bloom.composite_mode = BloomCompositeMode::EnergyConserving;
158 }
159
160 if keycode.pressed(KeyCode::KeyH) {
161 bloom.prefilter.threshold -= dt;
162 }
163 if keycode.pressed(KeyCode::KeyY) {
164 bloom.prefilter.threshold += dt;
165 }
166 bloom.prefilter.threshold = bloom.prefilter.threshold.max(0.0);
167
168 if keycode.pressed(KeyCode::KeyJ) {
169 bloom.prefilter.threshold_softness -= dt / 10.0;
170 }
171 if keycode.pressed(KeyCode::KeyU) {
172 bloom.prefilter.threshold_softness += dt / 10.0;
173 }
174 bloom.prefilter.threshold_softness = bloom.prefilter.threshold_softness.clamp(0.0, 1.0);
175
176 if keycode.pressed(KeyCode::KeyK) {
177 bloom.scale.x -= dt * 2.0;
178 }
179 if keycode.pressed(KeyCode::KeyI) {
180 bloom.scale.x += dt * 2.0;
181 }
182 bloom.scale.x = bloom.scale.x.clamp(0.0, 16.0);
183 }
184
185 None => {
186 text.0 = "Bloom: Off (Toggle: Space)\n".to_string();
187
188 if keycode.just_pressed(KeyCode::Space) {
189 commands.entity(camera_entity).insert(Bloom::default());
190 }
191 }
192 }
193
194 text.push_str(&format!("(O) Tonemapping: {tonemapping:?}\n"));
195 if keycode.just_pressed(KeyCode::KeyO) {
196 commands
197 .entity(camera_entity)
198 .insert(next_tonemap(tonemapping));
199 }
200}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.
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
72fn pause(
73 keyboard_input: Res<ButtonInput<KeyCode>>,
74 music_controller: Query<&AudioSink, With<MyMusic>>,
75) {
76 let Ok(sink) = music_controller.single() else {
77 return;
78 };
79
80 if keyboard_input.just_pressed(KeyCode::Space) {
81 sink.toggle_playback();
82 }
83}
84
85fn mute(
86 keyboard_input: Res<ButtonInput<KeyCode>>,
87 mut music_controller: Query<&mut AudioSink, With<MyMusic>>,
88) {
89 let Ok(mut sink) = music_controller.single_mut() else {
90 return;
91 };
92
93 if keyboard_input.just_pressed(KeyCode::KeyM) {
94 sink.toggle_mute();
95 }
96}
97
98fn volume(
99 keyboard_input: Res<ButtonInput<KeyCode>>,
100 mut music_controller: Query<&mut AudioSink, With<MyMusic>>,
101) {
102 let Ok(mut sink) = music_controller.single_mut() else {
103 return;
104 };
105
106 if keyboard_input.just_pressed(KeyCode::Equal) {
107 let current_volume = sink.volume();
108 sink.set_volume(current_volume.increase_by_percentage(10.0));
109 } else if keyboard_input.just_pressed(KeyCode::Minus) {
110 let current_volume = sink.volume();
111 sink.set_volume(current_volume.increase_by_percentage(-10.0));
112 }
113}81fn toggle_override(input: Res<ButtonInput<KeyCode>>, mut window: Single<&mut Window>) {
82 if input.just_pressed(KeyCode::Enter) {
83 let scale_factor_override = window.resolution.scale_factor_override();
84 window
85 .resolution
86 .set_scale_factor_override(scale_factor_override.xor(Some(1.0)));
87 }
88}
89
90/// This system changes the scale factor override when up or down is pressed
91fn change_scale_factor(input: Res<ButtonInput<KeyCode>>, mut window: Single<&mut Window>) {
92 let scale_factor_override = window.resolution.scale_factor_override();
93 if input.just_pressed(KeyCode::ArrowUp) {
94 window
95 .resolution
96 .set_scale_factor_override(scale_factor_override.map(|n| n + 1.0));
97 } else if input.just_pressed(KeyCode::ArrowDown) {
98 window
99 .resolution
100 .set_scale_factor_override(scale_factor_override.map(|n| (n - 1.0).max(1.0)));
101 }
102}17fn screenshot_on_spacebar(
18 mut commands: Commands,
19 input: Res<ButtonInput<KeyCode>>,
20 mut counter: Local<u32>,
21) {
22 if input.just_pressed(KeyCode::Space) {
23 let path = format!("./screenshot-{}.png", *counter);
24 *counter += 1;
25 commands
26 .spawn(Screenshot::primary_window())
27 .observe(save_to_disk(path));
28 }
29}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?
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}More examples
74fn customize_config(input: Res<ButtonInput<KeyCode>>, mut overlay: ResMut<FpsOverlayConfig>) {
75 if input.just_pressed(KeyCode::Digit1) {
76 // Changing resource will affect overlay
77 if overlay.text_color == OverlayColor::GREEN {
78 overlay.text_color = OverlayColor::RED;
79 } else {
80 overlay.text_color = OverlayColor::GREEN;
81 }
82 }
83 if input.just_pressed(KeyCode::Digit2) {
84 overlay.text_config.font_size -= 2.0;
85 }
86 if input.just_pressed(KeyCode::Digit3) {
87 overlay.text_config.font_size += 2.0;
88 }
89 if input.just_pressed(KeyCode::Digit4) {
90 overlay.enabled = !overlay.enabled;
91 }
92 if input.just_released(KeyCode::Digit5) {
93 overlay.frame_time_graph_config.enabled = !overlay.frame_time_graph_config.enabled;
94 }
95}13fn keyboard_input_system(
14 keyboard_input: Res<ButtonInput<KeyCode>>,
15 key_input: Res<ButtonInput<Key>>,
16) {
17 // KeyCode is used when you want the key location across different keyboard layouts
18 // See https://w3c.github.io/uievents-code/#code-value-tables for the locations
19 if keyboard_input.pressed(KeyCode::KeyA) {
20 info!("'A' currently pressed");
21 }
22
23 if keyboard_input.just_pressed(KeyCode::KeyA) {
24 info!("'A' just pressed");
25 }
26 if keyboard_input.just_released(KeyCode::KeyA) {
27 info!("'A' just released");
28 }
29
30 // Key is used when you want a specific key, no matter where it is located.
31 // This is useful for symbols that have a specific connotation, e.g. '?' for
32 // a help menu or '+'/'-' for zoom
33 let key = Key::Character("?".into());
34 if key_input.pressed(key.clone()) {
35 info!("'?' currently pressed");
36 }
37 if key_input.just_pressed(key.clone()) {
38 info!("'?' just pressed");
39 }
40 if key_input.just_released(key) {
41 info!("'?' just released");
42 }
43}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.
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 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> 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> 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 to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
PartialReflect, combines reflect_clone and
take in a useful fashion, automatically constructing an appropriate
ReflectCloneError if the downcast fails. Read moreSource§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<'_> ⓘ
Source§fn to_dynamic_struct(&self) -> DynamicStruct
fn to_dynamic_struct(&self) -> DynamicStruct
DynamicStruct from this struct.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, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> InitializeFromFunction<T> for T
impl<T> InitializeFromFunction<T> for T
Source§fn initialize_from_function(f: fn() -> T) -> T
fn initialize_from_function(f: fn() -> T) -> T
Source§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<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
Source§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<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<Ret> SpawnIfAsync<(), Ret> for Ret
impl<Ret> SpawnIfAsync<(), Ret> for Ret
Source§impl<T, O> SuperFrom<T> for Owhere
O: From<T>,
impl<T, O> SuperFrom<T> for Owhere
O: From<T>,
Source§fn super_from(input: T) -> O
fn super_from(input: T) -> O
Source§impl<T, O, M> SuperInto<O, M> for Twhere
O: SuperFrom<T, M>,
impl<T, O, M> SuperInto<O, M> for Twhere
O: SuperFrom<T, M>,
Source§fn super_into(self) -> O
fn super_into(self) -> O
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.