diff --git a/CHANGELOG.md b/CHANGELOG.md index f8d9524d..00d65835 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 your rustflags field. This can also be disabled by removing the `backtrace` feature. - Initial unicode support for font rendering. - Kerning support for font rendering. +- Added `set_next` method to `OamIterator` to avoid repeated boilerplate when dealing with unmanaged objects. ### Fixed diff --git a/agb/src/display/object/unmanaged/object.rs b/agb/src/display/object/unmanaged/object.rs index 9059f4ca..bcc36a4e 100644 --- a/agb/src/display/object/unmanaged/object.rs +++ b/agb/src/display/object/unmanaged/object.rs @@ -71,6 +71,27 @@ pub struct OamIterator<'oam> { frame_data: &'oam UnsafeCell, } +impl<'oam> OamIterator<'oam> { + /// Sets the next oam slot with the provided `object`. + /// + /// Is equivalent to the following: + /// ```no_run + /// # #![no_main] + /// # #![no_std] + /// # use agb::display::object::{OamIterator, ObjectUnmanaged}; + /// # fn set_next_example(oam_iterator: &mut OamIterator, object: &ObjectUnmanaged) { + /// if let Some(slot) = oam_iterator.next() { + /// slot.set(object); + /// } + /// # } + /// ``` + pub fn set_next(&mut self, object: &ObjectUnmanaged) { + if let Some(slot) = self.next() { + slot.set(object); + } + } +} + /// A slot in Oam that you can write to. Note that you must call [OamSlot::set] /// or else it is a bug and will panic when dropped. ///