Skip to content

Commit 42e6dc8

Browse files
authored
Refactor EventReader::iter to read (#9631)
# Objective - The current `EventReader::iter` has been determined to cause confusion among new Bevy users. It was suggested by @JoJoJet to rename the method to better clarify its usage. - Solves #9624 ## Solution - Rename `EventReader::iter` to `EventReader::read`. - Rename `EventReader::iter_with_id` to `EventReader::read_with_id`. - Rename `ManualEventReader::iter` to `ManualEventReader::read`. - Rename `ManualEventReader::iter_with_id` to `ManualEventReader::read_with_id`. --- ## Changelog - `EventReader::iter` has been renamed to `EventReader::read`. - `EventReader::iter_with_id` has been renamed to `EventReader::read_with_id`. - `ManualEventReader::iter` has been renamed to `ManualEventReader::read`. - `ManualEventReader::iter_with_id` has been renamed to `ManualEventReader::read_with_id`. - Deprecated `EventReader::iter` - Deprecated `EventReader::iter_with_id` - Deprecated `ManualEventReader::iter` - Deprecated `ManualEventReader::iter_with_id` ## Migration Guide - Existing usages of `EventReader::iter` and `EventReader::iter_with_id` will have to be changed to `EventReader::read` and `EventReader::read_with_id` respectively. - Existing usages of `ManualEventReader::iter` and `ManualEventReader::iter_with_id` will have to be changed to `ManualEventReader::read` and `ManualEventReader::read_with_id` respectively.
1 parent fb094ea commit 42e6dc8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+108
-82
lines changed

crates/bevy_app/src/schedule_runner.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ impl Plugin for ScheduleRunnerPlugin {
9494
if let Some(app_exit_events) =
9595
app.world.get_resource_mut::<Events<AppExit>>()
9696
{
97-
if let Some(exit) = app_exit_event_reader.iter(&app_exit_events).last()
97+
if let Some(exit) = app_exit_event_reader.read(&app_exit_events).last()
9898
{
9999
return Err(exit.clone());
100100
}

crates/bevy_ecs/examples/events.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ fn sending_system(mut event_writer: EventWriter<MyEvent>) {
5252
// This system listens for events of the type MyEvent
5353
// If an event is received it will be printed to the console
5454
fn receiving_system(mut event_reader: EventReader<MyEvent>) {
55-
for my_event in event_reader.iter() {
55+
for my_event in event_reader.read() {
5656
println!(
5757
" Received message {:?}, with random value of {}",
5858
my_event.message, my_event.random_value

crates/bevy_ecs/src/event.rs

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -403,13 +403,27 @@ impl<'w, 's, E: Event> EventReader<'w, 's, E> {
403403
/// Iterates over the events this [`EventReader`] has not seen yet. This updates the
404404
/// [`EventReader`]'s event counter, which means subsequent event reads will not include events
405405
/// that happened before now.
406+
pub fn read(&mut self) -> EventIterator<'_, E> {
407+
self.reader.read(&self.events)
408+
}
409+
410+
/// Iterates over the events this [`EventReader`] has not seen yet. This updates the
411+
/// [`EventReader`]'s event counter, which means subsequent event reads will not include events
412+
/// that happened before now.
413+
#[deprecated = "use `.read()` instead."]
406414
pub fn iter(&mut self) -> EventIterator<'_, E> {
407-
self.reader.iter(&self.events)
415+
self.reader.read(&self.events)
416+
}
417+
418+
/// Like [`read`](Self::read), except also returning the [`EventId`] of the events.
419+
pub fn read_with_id(&mut self) -> EventIteratorWithId<'_, E> {
420+
self.reader.read_with_id(&self.events)
408421
}
409422

410423
/// Like [`iter`](Self::iter), except also returning the [`EventId`] of the events.
424+
#[deprecated = "use `.read_with_id() instead."]
411425
pub fn iter_with_id(&mut self) -> EventIteratorWithId<'_, E> {
412-
self.reader.iter_with_id(&self.events)
426+
self.reader.read_with_id(&self.events)
413427
}
414428

415429
/// Determines the number of events available to be read from this [`EventReader`] without consuming any.
@@ -545,12 +559,24 @@ impl<E: Event> Default for ManualEventReader<E> {
545559

546560
#[allow(clippy::len_without_is_empty)] // Check fails since the is_empty implementation has a signature other than `(&self) -> bool`
547561
impl<E: Event> ManualEventReader<E> {
562+
/// See [`EventReader::read`]
563+
pub fn read<'a>(&'a mut self, events: &'a Events<E>) -> EventIterator<'a, E> {
564+
self.read_with_id(events).without_id()
565+
}
566+
548567
/// See [`EventReader::iter`]
568+
#[deprecated = "use `.read()` instead."]
549569
pub fn iter<'a>(&'a mut self, events: &'a Events<E>) -> EventIterator<'a, E> {
550-
self.iter_with_id(events).without_id()
570+
self.read_with_id(events).without_id()
571+
}
572+
573+
/// See [`EventReader::read_with_id`]
574+
pub fn read_with_id<'a>(&'a mut self, events: &'a Events<E>) -> EventIteratorWithId<'a, E> {
575+
EventIteratorWithId::new(self, events)
551576
}
552577

553578
/// See [`EventReader::iter_with_id`]
579+
#[deprecated = "use `.read_with_id() instead."]
554580
pub fn iter_with_id<'a>(&'a mut self, events: &'a Events<E>) -> EventIteratorWithId<'a, E> {
555581
EventIteratorWithId::new(self, events)
556582
}
@@ -834,7 +860,7 @@ mod tests {
834860
events: &Events<E>,
835861
reader: &mut ManualEventReader<E>,
836862
) -> Vec<E> {
837-
reader.iter(events).cloned().collect::<Vec<E>>()
863+
reader.read(events).cloned().collect::<Vec<E>>()
838864
}
839865

840866
#[derive(Event, PartialEq, Eq, Debug)]
@@ -844,21 +870,21 @@ mod tests {
844870
let mut events = Events::<E>::default();
845871
let mut reader = events.get_reader();
846872

847-
assert!(reader.iter(&events).next().is_none());
873+
assert!(reader.read(&events).next().is_none());
848874

849875
events.send(E(0));
850-
assert_eq!(*reader.iter(&events).next().unwrap(), E(0));
851-
assert_eq!(reader.iter(&events).next(), None);
876+
assert_eq!(*reader.read(&events).next().unwrap(), E(0));
877+
assert_eq!(reader.read(&events).next(), None);
852878

853879
events.send(E(1));
854880
clear_func(&mut events);
855-
assert!(reader.iter(&events).next().is_none());
881+
assert!(reader.read(&events).next().is_none());
856882

857883
events.send(E(2));
858884
events.update();
859885
events.send(E(3));
860886

861-
assert!(reader.iter(&events).eq([E(2), E(3)].iter()));
887+
assert!(reader.read(&events).eq([E(2), E(3)].iter()));
862888
}
863889

864890
#[test]
@@ -880,7 +906,7 @@ mod tests {
880906

881907
events.extend(vec![TestEvent { i: 0 }, TestEvent { i: 1 }]);
882908
assert!(reader
883-
.iter(&events)
909+
.read(&events)
884910
.eq([TestEvent { i: 0 }, TestEvent { i: 1 }].iter()));
885911
}
886912

@@ -923,7 +949,7 @@ mod tests {
923949
events.send(TestEvent { i: 1 });
924950
events.send(TestEvent { i: 2 });
925951
let mut reader = events.get_reader();
926-
let mut iter = reader.iter(&events);
952+
let mut iter = reader.read(&events);
927953
assert_eq!(iter.len(), 3);
928954
iter.next();
929955
assert_eq!(iter.len(), 2);
@@ -994,13 +1020,13 @@ mod tests {
9941020

9951021
events.send(TestEvent { i: 0 });
9961022
events.send(TestEvent { i: 1 });
997-
assert_eq!(reader.iter(&events).count(), 2);
1023+
assert_eq!(reader.read(&events).count(), 2);
9981024

9991025
let mut old_events = Vec::from_iter(events.update_drain());
10001026
assert!(old_events.is_empty());
10011027

10021028
events.send(TestEvent { i: 2 });
1003-
assert_eq!(reader.iter(&events).count(), 1);
1029+
assert_eq!(reader.read(&events).count(), 1);
10041030

10051031
old_events.extend(events.update_drain());
10061032
assert_eq!(old_events.len(), 2);
@@ -1028,7 +1054,7 @@ mod tests {
10281054

10291055
let mut schedule = Schedule::default();
10301056
schedule.add_systems(|mut events: EventReader<TestEvent>| {
1031-
let mut iter = events.iter();
1057+
let mut iter = events.read();
10321058

10331059
assert_eq!(iter.next(), Some(&TestEvent { i: 0 }));
10341060
assert_eq!(iter.nth(2), Some(&TestEvent { i: 3 }));
@@ -1048,7 +1074,7 @@ mod tests {
10481074

10491075
let mut reader =
10501076
IntoSystem::into_system(|mut events: EventReader<TestEvent>| -> Option<TestEvent> {
1051-
events.iter().last().copied()
1077+
events.read().last().copied()
10521078
});
10531079
reader.initialize(&mut world);
10541080

crates/bevy_ecs/src/removal_detection.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ impl<'w, 's, T: Component> RemovedComponents<'w, 's, T> {
202202
/// that happened before now.
203203
pub fn iter(&mut self) -> RemovedIter<'_> {
204204
self.reader_mut_with_events()
205-
.map(|(reader, events)| reader.iter(events).cloned())
205+
.map(|(reader, events)| reader.read(events).cloned())
206206
.into_iter()
207207
.flatten()
208208
.map(RemovedComponentEntity::into)
@@ -211,7 +211,7 @@ impl<'w, 's, T: Component> RemovedComponents<'w, 's, T> {
211211
/// Like [`iter`](Self::iter), except also returning the [`EventId`] of the events.
212212
pub fn iter_with_id(&mut self) -> RemovedIterWithId<'_> {
213213
self.reader_mut_with_events()
214-
.map(|(reader, events)| reader.iter_with_id(events))
214+
.map(|(reader, events)| reader.read_with_id(events))
215215
.into_iter()
216216
.flatten()
217217
.map(map_id_events)

crates/bevy_ecs/src/schedule/condition.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -895,7 +895,7 @@ pub mod common_conditions {
895895
// calls of the run condition. Simply checking `is_empty` would not be enough.
896896
// PERF: note that `count` is efficient (not actually looping/iterating),
897897
// due to Bevy having a specialized implementation for events.
898-
move |mut reader: EventReader<T>| reader.iter().count() > 0
898+
move |mut reader: EventReader<T>| reader.read().count() > 0
899899
}
900900

901901
/// Generates a [`Condition`](super::Condition)-satisfying closure that returns `true`

crates/bevy_gilrs/src/rumble.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ pub(crate) fn play_gilrs_rumble(
136136
.retain(|_gamepad, rumbles| !rumbles.is_empty());
137137

138138
// Add new effects.
139-
for rumble in requests.iter().cloned() {
139+
for rumble in requests.read().cloned() {
140140
let gamepad = rumble.gamepad();
141141
match handle_rumble_request(&mut running_rumbles, &mut gilrs, rumble, current_time) {
142142
Ok(()) => {}

crates/bevy_input/src/gamepad.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,7 +1023,7 @@ pub fn gamepad_connection_system(
10231023
mut button_axis: ResMut<Axis<GamepadButton>>,
10241024
mut button_input: ResMut<Input<GamepadButton>>,
10251025
) {
1026-
for connection_event in connection_events.iter() {
1026+
for connection_event in connection_events.read() {
10271027
let gamepad = connection_event.gamepad;
10281028

10291029
if let GamepadConnection::Connected(info) = &connection_event.connection {
@@ -1168,7 +1168,7 @@ pub fn gamepad_axis_event_system(
11681168
mut gamepad_axis: ResMut<Axis<GamepadAxis>>,
11691169
mut axis_events: EventReader<GamepadAxisChangedEvent>,
11701170
) {
1171-
for axis_event in axis_events.iter() {
1171+
for axis_event in axis_events.read() {
11721172
let axis = GamepadAxis::new(axis_event.gamepad, axis_event.axis_type);
11731173
gamepad_axis.set(axis, axis_event.value);
11741174
}
@@ -1181,7 +1181,7 @@ pub fn gamepad_button_event_system(
11811181
mut button_input_events: EventWriter<GamepadButtonInput>,
11821182
settings: Res<GamepadSettings>,
11831183
) {
1184-
for button_event in button_changed_events.iter() {
1184+
for button_event in button_changed_events.read() {
11851185
let button = GamepadButton::new(button_event.gamepad, button_event.button_type);
11861186
let value = button_event.value;
11871187
let button_property = settings.get_button_settings(button);
@@ -1258,7 +1258,7 @@ pub fn gamepad_event_system(
12581258
mut button_input: ResMut<Input<GamepadButton>>,
12591259
) {
12601260
button_input.bypass_change_detection().clear();
1261-
for gamepad_event in gamepad_events.iter() {
1261+
for gamepad_event in gamepad_events.read() {
12621262
match gamepad_event {
12631263
GamepadEvent::Connection(connection_event) => {
12641264
connection_events.send(connection_event.clone());

crates/bevy_input/src/keyboard.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ pub fn keyboard_input_system(
5353
// Avoid clearing if it's not empty to ensure change detection is not triggered.
5454
scan_input.bypass_change_detection().clear();
5555
key_input.bypass_change_detection().clear();
56-
for event in keyboard_input_events.iter() {
56+
for event in keyboard_input_events.read() {
5757
let KeyboardInput {
5858
scan_code, state, ..
5959
} = event;

crates/bevy_input/src/mouse.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ pub fn mouse_button_input_system(
144144
mut mouse_button_input_events: EventReader<MouseButtonInput>,
145145
) {
146146
mouse_button_input.bypass_change_detection().clear();
147-
for event in mouse_button_input_events.iter() {
147+
for event in mouse_button_input_events.read() {
148148
match event.state {
149149
ButtonState::Pressed => mouse_button_input.press(event.button),
150150
ButtonState::Released => mouse_button_input.release(event.button),

crates/bevy_input/src/touch.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ pub fn touch_screen_input_system(
366366
) {
367367
touch_state.update();
368368

369-
for event in touch_input_events.iter() {
369+
for event in touch_input_events.read() {
370370
touch_state.process_touch_event(event);
371371
}
372372
}

crates/bevy_pbr/src/material.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ pub fn extract_materials<M: Material>(
608608
) {
609609
let mut changed_assets = HashSet::default();
610610
let mut removed = Vec::new();
611-
for event in events.iter() {
611+
for event in events.read() {
612612
match event {
613613
AssetEvent::Created { handle } | AssetEvent::Modified { handle } => {
614614
changed_assets.insert(handle.clone_weak());

crates/bevy_render/src/camera/camera.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -575,11 +575,11 @@ pub fn camera_system<T: CameraProjection + Component>(
575575
let primary_window = primary_window.iter().next();
576576

577577
let mut changed_window_ids = HashSet::new();
578-
changed_window_ids.extend(window_created_events.iter().map(|event| event.window));
579-
changed_window_ids.extend(window_resized_events.iter().map(|event| event.window));
578+
changed_window_ids.extend(window_created_events.read().map(|event| event.window));
579+
changed_window_ids.extend(window_resized_events.read().map(|event| event.window));
580580

581581
let changed_image_handles: HashSet<&Handle<Image>> = image_asset_events
582-
.iter()
582+
.read()
583583
.filter_map(|event| {
584584
if let AssetEvent::Modified { handle } = event {
585585
Some(handle)

crates/bevy_render/src/render_asset.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ fn extract_render_asset<A: RenderAsset>(
136136
) {
137137
let mut changed_assets = HashSet::default();
138138
let mut removed = Vec::new();
139-
for event in events.iter() {
139+
for event in events.read() {
140140
match event {
141141
AssetEvent::Created { handle } | AssetEvent::Modified { handle } => {
142142
changed_assets.insert(handle.clone_weak());

crates/bevy_render/src/render_resource/pipeline_cache.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,7 @@ impl PipelineCache {
832832
shaders: Extract<Res<Assets<Shader>>>,
833833
mut events: Extract<EventReader<AssetEvent<Shader>>>,
834834
) {
835-
for event in events.iter() {
835+
for event in events.read() {
836836
match event {
837837
AssetEvent::Created { handle } | AssetEvent::Modified { handle } => {
838838
if let Some(shader) = shaders.get(handle) {

crates/bevy_render/src/view/window/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ fn extract_windows(
161161
}
162162
}
163163

164-
for closed_window in closed.iter() {
164+
for closed_window in closed.read() {
165165
extracted_windows.remove(&closed_window.window);
166166
}
167167
// This lock will never block because `callbacks` is `pub(crate)` and this is the singular callsite where it's locked.

crates/bevy_scene/src/scene_spawner.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ pub fn scene_spawner_system(world: &mut World) {
354354
let scene_spawner = &mut *scene_spawner;
355355
for event in scene_spawner
356356
.scene_asset_event_reader
357-
.iter(scene_asset_events)
357+
.read(scene_asset_events)
358358
{
359359
if let AssetEvent::Modified { handle } = event {
360360
if scene_spawner.spawned_dynamic_scenes.contains_key(handle) {

crates/bevy_sprite/src/mesh2d/material.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ pub fn extract_materials_2d<M: Material2d>(
467467
) {
468468
let mut changed_assets = HashSet::default();
469469
let mut removed = Vec::new();
470-
for event in events.iter() {
470+
for event in events.read() {
471471
match event {
472472
AssetEvent::Created { handle } | AssetEvent::Modified { handle } => {
473473
changed_assets.insert(handle.clone_weak());

crates/bevy_sprite/src/render/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ pub fn extract_sprite_events(
327327
let SpriteAssetEvents { ref mut images } = *events;
328328
images.clear();
329329

330-
for image in image_events.iter() {
330+
for image in image_events.read() {
331331
// AssetEvent: !Clone
332332
images.push(match image {
333333
AssetEvent::Created { handle } => AssetEvent::Created {

crates/bevy_text/src/text2d.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ pub fn update_text2d_layout(
165165
mut text_query: Query<(Entity, Ref<Text>, Ref<Text2dBounds>, &mut TextLayoutInfo)>,
166166
) {
167167
// We need to consume the entire iterator, hence `last`
168-
let factor_changed = scale_factor_changed.iter().last().is_some();
168+
let factor_changed = scale_factor_changed.read().last().is_some();
169169

170170
// TODO: Support window-independent scaling: https://github.com/bevyengine/bevy/issues/5621
171171
let scale_factor = windows

crates/bevy_ui/src/layout/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ pub fn ui_layout_system(
248248
};
249249

250250
let resized = resize_events
251-
.iter()
251+
.read()
252252
.any(|resized_window| resized_window.window == primary_window_entity);
253253

254254
// update window root nodes

crates/bevy_window/src/system.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub fn exit_on_primary_closed(
4141
///
4242
/// [`WindowPlugin`]: crate::WindowPlugin
4343
pub fn close_when_requested(mut commands: Commands, mut closed: EventReader<WindowCloseRequested>) {
44-
for event in closed.iter() {
44+
for event in closed.read() {
4545
commands.entity(event.window).despawn();
4646
}
4747
}

crates/bevy_winit/src/accessibility.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ fn handle_window_focus(
4646
adapters: NonSend<AccessKitAdapters>,
4747
mut focused: EventReader<WindowFocused>,
4848
) {
49-
for event in focused.iter() {
49+
for event in focused.read() {
5050
if let Some(adapter) = adapters.get(&event.window) {
5151
adapter.update_if_active(|| {
5252
let focus_id = (*focus).unwrap_or_else(|| event.window);
@@ -68,7 +68,7 @@ fn window_closed(
6868
mut receivers: ResMut<WinitActionHandlers>,
6969
mut events: EventReader<WindowClosed>,
7070
) {
71-
for WindowClosed { window, .. } in events.iter() {
71+
for WindowClosed { window, .. } in events.read() {
7272
adapters.remove(window);
7373
receivers.remove(window);
7474
}

0 commit comments

Comments
 (0)