This eliminates the game-wide lag (100-200ms on my computer) when switching song nodes. Attempted to mask the loading time with a fade-in effect.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
https://github.com/Tom94/AiModtpDifficultyCalculator
This might not be completely accurate as I wasn't able to get the original program to run, but it's probably close (note that hit object stacking isn't applied, though).
Since the computation is fairly expensive, they're currently done when selecting a beatmap set in the song menu (for all beatmaps in the set at once). The rating is displayed next to the beatmap difficulty settings (HP,CS,AR,OD) in the header. Also, since all the hit objects need to be loaded to perform the computation, the objects are later discarded (but not immediately) by a LRU cache to limit memory usage.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
If the check fails, use a LinearBezier instead. (e.g. in map 45471).
Moved slider time and curve calculations into HitObject so that they can be reused.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Fixed hit object 'addition' field parsing. (Still not sure what the fields do, but the types should be correct now...)
- Fixed a careless error causing a potential null pointer exception. (blame: 0b33fed)
- Show an error if parseHitObjects() parses a different amount of objects than expected.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
Specifically, during OSZ unpacking and for file deletion through the song menu. Triggering the beatmap reload event in these scenarios would be redundant.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
Any CREATE and DELETE that occur in the song menu state will now show a notification and modify the behavior of the 'F5' key. Changes that occur in other states will force a reload upon entering the song menu.
This is part of osu!, but as it's not incredibly helpful, I've left it disabled by default. It can be enabled in the options menu.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Moved Utils.loadGlyphs() into this class, and rewrote it to take a single generic string (instead of beatmap title/artist strings, specifically).
- Also moved font initialization into this class.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Many code style changes.
- Don't increment combo if missing the last slider circle.
- Added player name in ranking screen.
- Don't show null/default player names.
- Only import replays with .osr extension.
- Display loading status for importing replays.
- Moved MD5InputStreamWrapper to package "opsu.io".
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This occurred when inserting beatmaps with null "bg" field into the database.
Also moved LOAD_HD_IMAGES option from "Custom" tab to "Display".
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
Created a separate BeatmapImageCache class to handle cache operations. The cache now uses File objects as keys, rather than Beatmap objects (which was buggy).
Also renamed "OsuHitObjectResult" helper class to "HitObjectResult".
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
Added getComboColors() method to Beatmap class, and the 'combo' field is now null if no combo is provided.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
Use beatmap.getSliderBorderColor() to get the slider border color for a beatmap.
Also adds the field to the beatmap cache, and fixes a bug where format changes would cause an exception when preparing statements in the new format.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This fixes the errors in the opsu src that the new html linter in
the Java 8 javadoc tool catches and classifies as error
(unless the linter is explicitly disabled)
Attempts to eliminate any confusion between OsuHitObject (raw, parsed hit objects) and HitObject (interface for game object types).
- Renamed "HitObject" interface to "GameObject", since these objects are specific to gameplay.
- Renamed "OsuHitObject" to "HitObject", since these objects are primarily containers for parsed data.
Sorry if the name-swapping is confusing; these should be better names in the long run.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
- Renamed "OsuFile" to "Beatmap". All related variables and methods with "osu" have also been renamed to "beatmap" (or variants of each).
- Renamed "OsuGroupNode" to "BeatmapSetNode". Avoids confusion since groups are identified by a "set ID", not a "group ID".
- Renamed "OsuGroupList" to "BeatmapSetList", for the same reason as above.
- Renamed "OsuDB" to "BeatmapDB", for the same reason as above.
- Moved classes directly related to parsed beatmaps (Beatmap, BeatmapSetList, BeatmapSetNode, OsuHitObject, and TimingPoint) into a new "beatmap" package.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>