6 个版本
0.4.0 | 2021 年 8 月 13 日 |
---|---|
0.3.0 | 2021 年 8 月 13 日 |
0.2.10 | 2021 年 8 月 13 日 |
0.2.5 | 2021 年 6 月 18 日 |
#723 在 游戏
310KB
7K SLoC
peace-performance
一个独立的 crate,用于计算所有 osu! 游戏模式的星级评分和性能点。和平版
Fork自 rosu-pp | MIT 许可证
通常不支持游戏模式之间的转换。
通过功能支持异步操作,见下文。
用法
use std::fs::File;
use peace_performance::{Beatmap, BeatmapExt};
let file = match File::open("/path/to/file.osu") {
Ok(file) => file,
Err(why) => panic!("Could not open file: {}", why),
};
// Parse the map yourself
let map = match Beatmap::parse(file) {
Ok(map) => map,
Err(why) => panic!("Error while parsing map: {}", why),
};
// If `BeatmapExt` is included, you can make use of
// some methods on `Beatmap` to make your life simpler.
// If the mode is known, it is recommended to use the
// mode's pp calculator, e.g. `TaikoPP`, manually.
let result = map.pp()
.mods(24) // HDHR
.combo(1234)
.misses(2)
.accuracy(99.2)
.calculate();
println!("PP: {}", result.pp());
// If you intend to reuse the current map-mod combination,
// make use of the previous result!
// If attributes are given, then stars & co don't have to be recalculated.
let next_result = map.pp()
.mods(24) // HDHR
.attributes(result) // recycle
.combo(543)
.misses(5)
.n50(3)
.passed_objects(600)
.accuracy(96.5)
.calculate();
println!("Next PP: {}", next_result.pp());
let stars = map.stars(16, None).stars(); // HR
let max_pp = map.max_pp(16).pp();
println!("Stars: {} | Max PP: {}", stars, max_pp);
异步使用
如果启用了 async_tokio
或 async_std
功能,则 beatmap 解析将是异步的。
use async_std::fs::File;
// use tokio::fs::File;
let file = match File::open("/path/to/file.osu").await {
Ok(file) => file,
Err(why) => panic!("Could not open file: {}", why),
};
// Parse the map asynchronously
let map = match Beatmap::parse(file).await {
Ok(map) => map,
Err(why) => panic!("Error while parsing map: {}", why),
};
// The rest stays the same
let result = map.pp()
.mods(24) // HDHR
.combo(1234)
.misses(2)
.accuracy(99.2)
.calculate();
println!("PP: {}", result.pp());
osu!standard 版本
all_included
:考虑堆栈宽松度和滑块路径,以便使难度和 pp 计算尽可能接近 osu!。优点:最精确;缺点:性能最低。no_leniency
:不考虑由堆栈宽松度引起的音符位置偏移。这意味着音符之间的跳跃距离可能略有偏差,导致小的误差。但是,由于计算这些偏移相对昂贵,因此此版本比all_included
快得多。no_sliders_no_leniency
(即 oppai):除了不考虑由堆栈宽松度引起的位置偏移外,还忽略滑块路径。这意味着音符的旅行距离完全被忽略,这可能会导致进一步的误差。但是,由于不需要计算滑块路径,因此通常比no_leniency
快。
注意:如果启用了 fruits
功能,则无论是否启用,都将解析滑块,这会降低 no_sliders_no_leniency
的性能优势。
功能
标志 | 描述 |
---|---|
default |
启用 async_tokio、所有模式 并选择 osu!standard 的 all_included 版本。通过设置 default_features = false 来禁用。 |
score_v2_buff |
ScoreV2(STD)增强 - acc *= 1.25 |
ppysb_edition |
为 RELAX 和 AUTOPILOT 专门更改 |
relax_nerf |
尼龙放松和自动驾驶 pp。 放松:aim * 0.9, spd * 0.3, acc *0.8 ;自动驾驶:aim * 0.3, spd * 0.9, acc * 0.8 |
太鼓达人 |
启用 osu!taiko。 |
水果 |
启用 osu!ctb。 |
狂热模式 |
启用 osu!mania。 |
osu |
启用 osu!standard。需要同时启用以下功能之一 no_leniency 、no_sliders_no_leniency 或 all_included 。 |
no_leniency |
在计算 osu!standard 中的难度属性时,忽略堆栈宽容度但考虑滑条。性能和精度之间的平衡点,因此为默认版本。 |
no_sliders_no_leniency |
在计算 osu!standard 中的难度属性时,忽略堆栈宽容度和滑条。最佳性能但比 no_leniency 稍微少一些精度。 |
all_included |
在计算 osu!standard 中的难度属性时,考虑堆栈宽容度和滑条。最佳精度但比 no_leniency 的性能差得多。 |
async_tokio |
通过 tokio 进行异步的 beatmap 解析 |
async_std |
通过 async-std 进行异步的 beatmap 解析 |
基准测试
比较 osu-perf(替代 rust pp 计算包)、osu-perf 和 rosu-pp 的 no_sliders_no_leniency
之间的 PP 计算速度。
比较 rosu-pp 的 all_included
、no_leniency
和 no_sliders_no_leniency
版本的 PP 计算速度。
比较 rosu-pp 的 all_included
、no_leniency
和 no_sliders_no_leniency
版本的 PP (不)准确性。
比较 rosu-pp 的 all_included
、no_leniency
和 no_sliders_no_leniency
版本的星级(不)准确性。
路线图
- osu sr 版本
- all included
- no_leniency
- no_sliders_no_leniency
- taiko sr
- ctb sr
- mania sr
- osu pp
- taiko pp
- ctb pp
- mania pp
- 重构
- 基准测试
- 异步
依赖
~0–13MB
~124K SLoC