added Beatmap::convert_inplace method
This commit is contained in:
+29
-13
@@ -5,7 +5,10 @@ use rosu_map::{
|
|||||||
LATEST_FORMAT_VERSION,
|
LATEST_FORMAT_VERSION,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{Difficulty, GradualDifficulty, GradualPerformance, ModeDifficulty, Performance};
|
use crate::{
|
||||||
|
catch::Catch, mania::Mania, osu::Osu, taiko::Taiko, Difficulty, GradualDifficulty,
|
||||||
|
GradualPerformance, ModeDifficulty, Performance,
|
||||||
|
};
|
||||||
|
|
||||||
pub use self::{
|
pub use self::{
|
||||||
attributes::{BeatmapAttributes, BeatmapAttributesBuilder, HitWindows},
|
attributes::{BeatmapAttributes, BeatmapAttributesBuilder, HitWindows},
|
||||||
@@ -19,7 +22,7 @@ use super::{
|
|||||||
TimingPoint,
|
TimingPoint,
|
||||||
},
|
},
|
||||||
hit_object::HitObject,
|
hit_object::HitObject,
|
||||||
mode::IGameMode,
|
mode::{ConvertStatus, IGameMode},
|
||||||
};
|
};
|
||||||
|
|
||||||
mod attributes;
|
mod attributes;
|
||||||
@@ -71,6 +74,17 @@ impl Beatmap {
|
|||||||
rosu_map::from_bytes(bytes)
|
rosu_map::from_bytes(bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns a [`BeatmapAttributesBuilder`] to calculate modified beatmap
|
||||||
|
/// attributes.
|
||||||
|
pub const fn attributes(&self) -> BeatmapAttributesBuilder {
|
||||||
|
BeatmapAttributesBuilder::new(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The beats per minute of the map.
|
||||||
|
pub fn bpm(&self) -> f64 {
|
||||||
|
bpm::bpm(self.hit_objects.last(), &self.timing_points)
|
||||||
|
}
|
||||||
|
|
||||||
/// Create a difficulty calculator for this [`Beatmap`].
|
/// Create a difficulty calculator for this [`Beatmap`].
|
||||||
pub const fn difficulty(&self) -> Difficulty<'_> {
|
pub const fn difficulty(&self) -> Difficulty<'_> {
|
||||||
Difficulty::new(self)
|
Difficulty::new(self)
|
||||||
@@ -111,6 +125,19 @@ impl Beatmap {
|
|||||||
self.breaks.iter().map(BreakPeriod::duration).sum()
|
self.breaks.iter().map(BreakPeriod::duration).sum()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Convert a [`&mut Beatmap`] to the specified mode with an argument
|
||||||
|
/// instead of a generic parameter and return the [`ConvertStatus`].
|
||||||
|
///
|
||||||
|
/// [`&mut Beatmap`]: Beatmap
|
||||||
|
pub fn convert_inplace(&mut self, mode: GameMode) -> ConvertStatus {
|
||||||
|
match mode {
|
||||||
|
GameMode::Osu => Osu::try_convert(self),
|
||||||
|
GameMode::Taiko => Taiko::try_convert(self),
|
||||||
|
GameMode::Catch => Catch::try_convert(self),
|
||||||
|
GameMode::Mania => Mania::try_convert(self),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Attempt to convert a [`&Beatmap`] to the specified mode.
|
/// Attempt to convert a [`&Beatmap`] to the specified mode.
|
||||||
///
|
///
|
||||||
/// If the conversion is incompatible, `None` is returned.
|
/// If the conversion is incompatible, `None` is returned.
|
||||||
@@ -168,17 +195,6 @@ impl Beatmap {
|
|||||||
pub fn unchecked_into_converted<'a, M: IGameMode>(self) -> Converted<'a, M> {
|
pub fn unchecked_into_converted<'a, M: IGameMode>(self) -> Converted<'a, M> {
|
||||||
Converted::unchecked_from_owned(self)
|
Converted::unchecked_from_owned(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a [`BeatmapAttributesBuilder`] to calculate modified beatmap
|
|
||||||
/// attributes.
|
|
||||||
pub const fn attributes(&self) -> BeatmapAttributesBuilder {
|
|
||||||
BeatmapAttributesBuilder::new(self)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The beats per minute of the map.
|
|
||||||
pub fn bpm(&self) -> f64 {
|
|
||||||
bpm::bpm(self.hit_objects.last(), &self.timing_points)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FromStr for Beatmap {
|
impl FromStr for Beatmap {
|
||||||
|
|||||||
Reference in New Issue
Block a user