Crate rosu_mods

Crate rosu_mods 

Source
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

FlagDescriptionDependencies
defaultNo features enabled
macrosEnables the mods! macropaste
serdeImplements serde::{Deserialize, Serialize} for all types and enables the serde moduleserde
rkyvImplements rkyv::{Archive, Serialize, Deserialize} for all types and enables the rkyv modulerkyv

Modules§

error
Error types
generated_mods
Each individual GameMod as defined by osu!lazer.
intersection
Types to calculate intersecting mods.
iter
Iterator types for mods.
rkyvrkyv
Types for (de)serialization through rkyv.
serdeserde
Types for (de)serialization through serde.

Macros§

modsmacros
Short-hand macro to easily create GameMods or GameModsIntermode.

Structs§

Acronym
The acronym of a GameMod.
GameMods
Combination of GameMods.
GameModsIntermode
Combination of GameModIntermodes.
GameModsLegacy
Lightweight bitflag type for legacy mods.

Enums§

GameMod
A single game mod
GameModIntermode
A single game mod when the mode is ignored
GameModKind
The different types of a GameMod
GameMode
Available game modes