#mod #osu #lazer

rosu-mods

为osu! mods提供的库

2个版本

0.1.1 2024年8月17日
0.1.0 2024年7月4日

#308编码

Download history 153/week @ 2024-07-01 148/week @ 2024-07-08 24/week @ 2024-07-15 54/week @ 2024-07-22 38/week @ 2024-07-29 47/week @ 2024-08-05 198/week @ 2024-08-12

340 每月下载量
用于 2 crates

MIT 许可证

755KB
16K SLoC

crates.io docs

rosu-mods

rosu-mods是一个库,提供官方mods.json文件中定义的所有osu!游戏模组的类型。

通过generate-mods二进制文件自动生成单个游戏模组类型。

类型

总共有三个不同的mod集合。

GameModsLegacy

GameModsLegacy是一个轻量级类型,本质上是对旧版mod的位标志。

use rosu_mods::GameModsLegacy;

let hdnc = GameModsLegacy::Nightcore | GameModsLegacy::Hidden;
assert_eq!(hdnc.to_string(), "HDNC");
assert!(hdnc.contains(GameModsLegacy::DoubleTime));

GameMods

GameModsGameMod枚举的集合。 GameMod区分每种模式,如果一个mod适用于多种模式,每种模式都会有该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(), "HRACAC");

let mut iter = mods.into_iter();
assert_eq!(iter.next(), Some(GameMod::HardRockTaiko(Default::default())));
assert_eq!(iter.next(), Some(GameMod::AccuracyChallengeTaiko(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

GameModsIntermodeGameModIntermode枚举的集合。与GameMod不同,这个枚举不区分模式。因此,变体不携带更多数据,因为一个mod可能根据模式具有不同的设置。

由于GameModsIntermode不携带额外数据,并且变体较少,因此通常比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(), "EZHRFIWG");

let mut iter = mods.into_iter();
assert_eq!(iter.next(), Some(GameModIntermode::Easy));
assert_eq!(iter.next(), Some(GameModIntermode::HardRock));
assert_eq!(iter.next(), Some(GameModIntermode::FadeIn));
assert_eq!(iter.next(), Some(GameModIntermode::Wiggle));
assert_eq!(iter.next(), None);

特性

标志 描述 依赖
默认 未启用任何功能
启用mods! 粘贴
serde 实现了所有类型的 serde::{Deserialize, Serialize} 功能,并启用了 serde 模块 serde
rkyv 实现了所有类型的 rkyv::{Archive, Serialize, Deserialize} 功能,并启用了 rkyv 模块 rkyv

依赖

~0–385KB