osu
osu copied to clipboard
Add option for `SongProgress` to use strain in difficulty graph
First step of adding Strain Graph - https://github.com/ppy/osu/discussions/30116
Question about structure:
Maybe adding all those logic into SongProgress
class is not good, and I should create GraphSongProgress
that will be base for argon and triangles song progress classes
A little explanation for reviewers on what parts this PR consists of:
- Changes to the difficulty calculator (75 line diff). This includes addition of per-section calculation. This calculation depends on ensuring correct bounds between first and last section (because in normal diffcalc bounds are cut-off). Also this requires filtering skills to only relevant ones.
- Implementation of strain resampling (150 line diff). This features my own algorithms for upscaling and downscaling, to specifically address the need of preserving correct "peak" value.
- Changes to SongProgressGraph (100 line diff).
Type of value changed from int to float (for obvious reason). As well as
Objects
setter is changed withSetFromObjects
method for more intuitive understanding what it does (aka not just setting some field). - Changes to the SongProgress (150 line diff). Calculation of strains and option to show them on graph.