Commit Graph

814 Commits

Author SHA1 Message Date
Jeffrey Han
be3b94f5db Prevent downloading songs that are already loaded. (base: fluddokt/opsu/76778f8)
- All beatmap set IDs are now stored in a set in OsuGroupList.
- OsuParser now checks the directory name for beatmap set IDs if the OsuFile doesn't contain one (for older beatmap formats).

Tweaks:
- Clear completed downloads when hitting "Import All".
- Call Download.updateReadSoFar() upon starting downloads instead of waiting for user to hover over the button (causing an unnecessary delay).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-02-09 23:22:58 -05:00
Jeffrey Han
f56c02864b Updates and fixes from fluddokt/opsu@76778f8 and fluddokt/opsu@cf321e9.
- Rotate slider ball image along the curve.
- Show download speed and time remaining when hovering over the download info button.
- Maintain aspect ratio of beatmap background image during gameplay.
- Clear beatmap background image cache after reaching OsuFile.MAX_CACHE_SIZE.
- Multiply hit circle size by OsuHitObject.getXMultiplier().
- Scale MENU_BUTTON_BG based on SongMenu.MAX_SONG_BUTTONS.
- Fixed download search TextField retaining focus even after leaving the downloads menu.
- Include Unicode title/artist strings in searches.
- Parse x,y beatmap coordinates as floats (instead of integers), and only read Kiai time if present.
- Added 1600x1200 resolution.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-02-09 21:40:38 -05:00
fd
08406ac038 Changed some methods in OpenALStreamPlayer to synchornized methods.
Seems to work with ogg now too.

Hopefully this fixes it, but I don't 
actually know much about concurrency.

However it stills throws "Could not clear SoundStore sources, err"
and so it remains removed.
2015-02-09 21:33:37 -05:00
Terrence
6c7aac53f4 Revert "Revert "Further implementation of "weighted" spinner""
This reverts commit 582af96e12.
2015-02-09 17:58:04 -06:00
Terrence
582af96e12 Revert "Further implementation of "weighted" spinner"
This reverts commit 7ec6e81e8f.
2015-02-09 17:57:49 -06:00
Terrence
7ec6e81e8f Further implementation of "weighted" spinner
Current Issues:
- Need to handle change in direction better
- Spinning speed seems to be inaccurate
2015-02-09 17:57:20 -06:00
PizzaLovers007
826376a127 Initial Implementation of a "weighted" spinner
Added angular velocity and angular drag
2015-02-09 17:11:49 -06:00
fd
6883e2ab44 MP3 Audio Streaming through modifying some of slick's openal files
May rarly crash/not play on next music.
May have introduced other unknown bugs. 
This may be due to loading it async.
Also loading of ogg is not loaded async anymore as it seems it doesn't
work very well.
2015-02-08 23:48:55 -05:00
Jeffrey Han
8d00a0f81e Merge pull request #14 from BOHverkill/master
Fixed pom.xml
2015-02-07 19:29:00 -05:00
Burkhard Hampl
4fb5f3bb3f Fixed pom.xml 2015-02-07 23:43:31 +01:00
Jeffrey Han
29189fddff Changed theme song.
New track is "On the Bach" by Jingle Punks, from the YouTube Audio Library (https://www.youtube.com/audiolibrary/music).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-02-04 03:43:23 -05:00
Jeffrey Han
c87cc96c07 Updating version to 0.5.0.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-02-02 01:42:15 -05:00
Jeffrey Han
b96a20e23f Small fixes.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-02-02 01:39:19 -05:00
Jeffrey Han
ec90d6fd03 Beatmap downloader improvements and fixes.
Updates:
- Added some buttons to downloads menu: clear inactive downloads, import beatmaps, reset search, and show/hide unranked maps.
- Small changes to OsuParser, OszUnpacker, and OsuGroupList (mostly adding return values) to allow parsing only newly unpacked beatmaps.
- Added alpha fade hover effect to MenuButton, as an alternative to expanding (used for 3-part menu buttons).
- Added text rendering fields to MenuButton (also for the 3-part menu buttons).
- Added sound effects to downloads menu.

Fixes:
- Check downloads for illegal filename characters, and remove them if necessary.
- The number of results and downloads shown now supports all resolutions.
- Confirmation dialog no longer appears when restarting the application (since downloads are static).
- Do not set a focus node immediately if the theme song will be played.
- Always play the theme song if no songs are loaded (even if disabled in settings).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-02-02 00:15:16 -05:00
Jeffrey Han
cfc0449ab2 Small follow-up to 70c70fd.
- Page back/forward are now expanding buttons instead of static images.
- Fixed a mistake in DownloadList.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-02-01 02:53:01 -05:00
Jeffrey Han
70c70fd812 Implemented an internal beatmap downloader (using Bloodcat).
The downloads menu can be accessed through the button on the right side of the main menu.  The downloader supports searching and concurrent downloads (NOTE: this is limited by the download server!).  Double-click any search result to begin downloading it to the SongPacks directory; cancel the download by hitting the red 'x' in the upper-right corner.  A confirmation will appear if trying to quit opsu! while downloads are running.

New classes:
- Download: represents an individual download from a remote address to a local path, and provides status and progress information; downloads files using Java NIO.
- DownloadNode: holds a Download object as well as additional beatmap fields, and handles drawing.
- DownloadList: manages the current list of downloads.
- DownloadsMenu: game state controller.
- DownloadServer: interface for a beatmap download server.
- BloodcatServer: implements DownloadServer using Bloodcat.
- ReadableByteChannelWrapper: wrapper for ReadableByteChannel that tracks progress.

Added images:
- "downloads" image by @kouyang.
- "search-background" image from "Minimalist Miku" skin (listed in credits).
- "delete" icon by Visual Pharm (https://www.iconfinder.com/icons/27842/) under CC BY-ND 3.0.

Other changes:
- Added up/down/left/right Expand directions to MenuButton class.
- Removed width/height parameters from OsuParser (leftovers).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-02-01 02:10:17 -05:00
Jeffrey Han
cb5a7d6a4b Added description for game mods.
These will appear on the bottom of the screen when hovering over the buttons in the options menu.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-30 03:45:06 -05:00
Jeffrey Han
84e463e8fb Added a listener for the end of music tracks.
Fixes a bug during gameplay where if the music track ends before the last hit object is processed (esp. spinners), the game would hang.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-29 21:24:21 -05:00
Jeffrey Han
e93fe25834 Code style cleanup from #12.
- Moved all curve-related classes into a new package.
- Added some fields and methods to Curve abstract class.
- Removed the old (no longer used) Bezier subclass.
- Changed Error throwing to ErrorHandler.error() calls.
- Formatted code.

Also fixed a crash when reaching the ranking screen with the "Auto" mod active.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-29 20:36:23 -05:00
Jeffrey Han
94d7ff37eb Merge pull request #12 from fluddokt/omaster
New slider curve types (CircumscribedCircle, LinearBezier) and other fixes.
- Better rendering of multi-repeat arrows.
- Fixed circle color ordering.
- Better multipliers for hit object coordinates.
2015-01-29 15:04:44 -05:00
Jeffrey Han
6fa8df955f Minor theme song fix.
Prevents a bug due to threading where the theme song can still be playing in the song menu (when songs are loaded) if the user clicks fast enough.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-29 03:57:55 -05:00
Jeffrey Han
baba1540a5 Javadoc fixes.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-29 03:17:53 -05:00
Jeffrey Han
f0858f657b Display time since achieving recent scores.
- Added history icon by Google: https://www.iconfinder.com/icons/326655/
- Draw history icon and elapsed time next to score buttons if they were achieved within 24 hours.  Conforming to osu! behavior, the elapsed time is not updated in real-time.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-29 03:05:09 -05:00
Jeffrey Han
0165abde56 Many quick bug fixes.
- Fixed bug when having "Sudden Death" and Easy "mods" enabled at the same time.  Additional "lives" are no longer granted.
- Fixed bug where GameMod active states weren't being reset upon restart.
- Fixed bug where GameMods were drawn as if inactive when viewing scores.  Alpha levels are now only set when drawing the button (i.e. calling GameMod.draw()).
- Moved large grade scaling into GameImage, and slightly padded the right side when drawing.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-29 01:50:26 -05:00
fd
0e9fd24754 Minor Fixes for beziers angles 2015-01-29 01:08:23 -05:00
Jeffrey Han
1ddeb3461d Moved ScoreData to separate file and renamed Scores to ScoreDB.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-29 00:56:30 -05:00
fd
07f6ef9479 Comments for previous commit 2015-01-29 00:37:25 -05:00
Jeffrey Han
2007058eb1 Quick fixes.
- Fixed a crash when closing the application in the ranking screen when viewing a score.
- Fixed a minor bug where OsuGroupList fields were not being erased upon restart.
- Dim the track volume by 50% when viewing a score.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-28 20:57:43 -05:00
Jeffrey Han
ce15f25ca1 Added score-viewing components to the song menu. [Completes 0bd72e7]
Added a scrollable score history area in the song menu.  Clicking on any score button will open the ranking screen.

Details:
- All drawing is performed by ScoreData.
- Store scores for the current focus node, and display up to "MAX_SCORE_BUTTONS" at a time; "startScore" is the starting index.
- When hovered over the score area, show scroll bar if needed.  When hovered over individual score buttons, change colors and show the rank.
- Scrolling with the mouse in the score area overrides song scrolling.
- Store scaled grade images as a Grade field.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-28 19:23:02 -05:00
Jeffrey Han
0bd72e731a Save game scores to an SQLite database. [Incomplete!]
Implemented basic features (mostly stable).  The remaining features are mostly graphical.
- Added package org.xerial.sqlite-jdbc.  All scores are saved to .opsu_scores.db on table `scores` after a game completes.
- Added "Scores" class to handle all game score data (including database connections).  The "Score" subclass encapsulates all database fields.
- Added "score viewing" constructor to GameData, for use only in the ranking screen.
- Draw the grade of the highest score next to expanded song buttons in the song menu.
- Added "bit" and "abbrev" fields to GameMod, used in storing/displaying scores.
- Hide the retry/exit buttons in the ranking screen when viewing a score.

Other changes:
- Removed "objectCount" field in GameData (no longer necessary).
- Removed "getID()" method in GameMod (no longer used).
- Moved most drawing in GameRanking state to GameData.
- Removed File parameter of "GameData.loadImages()" (leftover, no longer used).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-28 03:47:24 -05:00
fd
33f2207881 CircumscribedCircle, LinearBezier Curves, multi repeats arrows,
CircleColorOrdering

fd
2015-01-28 00:30:51 -05:00
Jeffrey Han
f71b2c25f2 Quick fix: 'Esc' key not properly checked in splash screen.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-27 15:20:03 -05:00
Jeffrey Han
71edef2fa9 Fixed server socket being closed after a restart.
Prevents a bug where multiple program instances can be run.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-27 05:49:58 -05:00
Jeffrey Han
44bdf70c98 Renamed GameScore class to GameData.
Makes more sense, since the class is responsible for more than just the score.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-27 03:19:39 -05:00
Jeffrey Han
ef9e38bf2d Minor scorebar updates.
- Support loading scorebar-bg animations.
- Slight changes to scaling and positioning of scorebar-bg.  This still isn't quite correct (TODO).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-25 18:36:54 -05:00
Jeffrey Han
0c1b86de62 Cursor updates.
- Supported loading beatmap-skinned cursors.
- Moved cursor loading into GameImage.
- Removed unnecessary scalings/rotations when drawing.
2015-01-24 22:23:49 -05:00
Jeffrey Han
d2b3249e2c Follow-up to 924f528: small fix.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-23 16:11:10 -05:00
Jeffrey Han
924f528881 Don't reset track to preview position unless game is complete.
(conforming to osu! behavior)

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-23 16:06:57 -05:00
Jeffrey Han
423866c222 Replaced GameScore.GRADE_* constants with an enum.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-22 15:12:15 -05:00
Jeffrey Han
c9e14bfc70 Comment format changes.
- Collapsed Javadoc comments for all fields.
- OsuFile now has proper Javadoc comments.
- Fixed various mistakes with comments.

Some changes with enums:
- Changed Class.values() calls to values().
- Changed size() calls to a SIZE field.
- Changed valuesReversed() calls to a VALUES_REVERSED field.
- Removed 'static' from enum declarations.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-22 00:44:45 -05:00
Jeffrey Han
d6c7476b88 Removed some unnecessary SlickException throwing/catching.
Mostly leftovers from moving Image creation to GameImage.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-21 18:56:53 -05:00
Jeffrey Han
e02cf60312 Added multi-image support to GameImage.
- Allows loading an undetermined number of files using a format string (e.g. combo bursts, slider balls).
- Fixes bug with those images not being properly reloaded.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-21 17:10:31 -05:00
Jeffrey Han
131c8a5637 Quick fix: lighting images weren't being reloaded properly.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-21 03:47:47 -05:00
Jeffrey Han
873d913424 Quick fix: prevent search from executing on beatmap reload.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-21 03:25:19 -05:00
Jeffrey Han
ee617c0710 Updating version to 0.4.0.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-21 02:37:02 -05:00
Jeffrey Han
a48f8bd54d Implemented in-game beatmap reloading.
- Press F5 to reload beatmaps in the song menu (resets OsuGroupList, then invokes OSZ unpacker and OsuFile parser).
- Many components reused from Splash screen (progress display, 'Esc' interrupt).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-21 01:38:02 -05:00
Jeffrey Han
19476993f9 Options state refactoring.
- Renamed Options state into OptionsMenu, and created Options class for solely handling user options.  Moved everything unrelated to the actual options menu into the static Options class.
- OptionsMenu no longer has static fields.
- Refactored option tabs into an enum, which makes the code much cleaner.

Also fixed a bug where global volume wasn't being used on container initialization.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-20 23:56:10 -05:00
Jeffrey Han
e2c1f2f937 Small memory optimization: reuse audio File objects in song groups.
Each song group references the same audio file probably 100% of the time, so don't create duplicate objects.

Also, follow-up to 3b13cc7: the up/down arrow keys now change global volume in the main menu and game states (in addition to the scroll wheel).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-20 22:19:14 -05:00
Jeffrey Han
2bc45bec0a Follow-up to f98edf8: better checks for application restart.
- Fixes resource reloading when OsuGroupList is empty (i.e. if user has no beatmaps installed).
- OsuGroupList is no longer initialized with a class instance; OsuGroupList.create() is called by OsuParser.
- Also clear 'lastOsu' field in MusicController.reset().  Fixes theme song not playing on restart if it was the last track played (i.e. if no beatmaps installed).
- Call MusicController.reset() last so that more garbage is collected.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-20 19:24:59 -05:00
Jeffrey Han
f98edf8fc8 Enabled application restarts.
- Pressing Ctrl+Shift+F5 in the options menu restarts the game.  Beatmaps and sounds are not reloaded.
- Use GameContainer.setForceExit(false) to trigger a restart after exiting.

Other changes:
- Fixed general issues with track pausing/pause states.
- Store all background images loaded in OsuFiles in a static hash table, instead of in individual objects.  This allows easier access to the allocated memory.
- Only delete OSZ files if they were unzipped. (They were previously deleted in all cases.)
- Moved more images (mods, playfield, lighting) into GameImage.
- Moved OsuHitObject initialization inside Utils.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-01-20 19:01:18 -05:00