Expand description
A library to provide types for all osu! gamemods as defined in the official mods.json file.
Individual gamemod types are generated automatically through the generate-mods binary.
§Types
In total there are three different collections for mods.
§GameModsLegacy
GameModsLegacy is a lightweight type that is essentially just bitflags for the legacy mods.
use rosu_mods::GameModsLegacy;
let hdnc = GameModsLegacy::Nightcore | GameModsLegacy::Hidden;
assert_eq!(hdnc.to_string(), "HDNC");
assert!(hdnc.contains(GameModsLegacy::DoubleTime));§GameMods
GameMods is a collection of the GameMod enum. GameMod distinguishes between each
mode so if a mod is valid for multiple modes, each of those modes will have a variant for that
mod.
use rosu_mods::{GameMod, GameMods, generated_mods::AccuracyChallengeMania};
// The `mods!` macro is only available if the `macros` feature is enabled
let mut mods: GameMods = rosu_mods::mods!(Taiko: AC HR);
// In addition to the two taiko mods, let's add a mania mod too
mods.insert(GameMod::AccuracyChallengeMania(AccuracyChallengeMania {
restart: Some(true),
..Default::default()
}));
assert_eq!(mods.to_string(), "ACHRAC");
let mut iter = mods.into_iter();
assert_eq!(iter.next(), Some(GameMod::AccuracyChallengeTaiko(Default::default())));
assert_eq!(iter.next(), Some(GameMod::HardRockTaiko(Default::default())));
assert_eq!(iter.next(), Some(GameMod::AccuracyChallengeMania(AccuracyChallengeMania {
restart: Some(true),
minimum_accuracy: None,
accuracy_judge_mode: None,
})));
assert_eq!(iter.next(), None);§GameModsIntermode
GameModsIntermode is a collection of the GameModIntermode enum. Unlike GameMod,
this enum does not distinguish between modes. As such, variants do not carry further data
because a mod may have different settings depending on the mode.
Since GameModsIntermode does not carry additional data and also consists of fewer variants,
it is generally easier to deal with than GameMods.
use rosu_mods::{GameModIntermode, GameModsIntermode};
// The `mods!` macro is only available if the `macros` feature is enabled
let mut mods: GameModsIntermode = rosu_mods::mods!(WG FI);
// Let's add some more mods
mods.extend([GameModIntermode::Easy, GameModIntermode::HardRock]);
assert_eq!(mods.to_string(), "EZFIHRWG");
let mut iter = mods.into_iter();
assert_eq!(iter.next(), Some(GameModIntermode::Easy));
assert_eq!(iter.next(), Some(GameModIntermode::FadeIn));
assert_eq!(iter.next(), Some(GameModIntermode::HardRock));
assert_eq!(iter.next(), Some(GameModIntermode::Wiggle));
assert_eq!(iter.next(), None);§Features
Modules§
- error
- Error types
- generated_
mods - Each individual
GameModas defined by osu!lazer. - intersection
- Types to calculate intersecting mods.
- iter
- Iterator types for mods.
- rkyv
rkyv - Types for (de)serialization through
rkyv. - serde
serde - Types for (de)serialization through
serde.
Macros§
- mods
macros - Short-hand macro to easily create
GameModsorGameModsIntermode.
Structs§
- Acronym
- The acronym of a
GameMod. - Game
Mods - Combination of
GameMods. - Game
Mods Intermode - Combination of
GameModIntermodes. - Game
Mods Legacy - Lightweight bitflag type for legacy mods.
Enums§
- GameMod
- A single game mod
- Game
ModIntermode - A single game mod when the mode is ignored
- Game
ModKind - The different types of a
GameMod - Game
Mode - Available game modes