Commit Graph

720 Commits

Author SHA1 Message Date
yugecin
143a00657f add cubespinner 2016-10-01 10:57:05 +02:00
yugecin
d767224022 add circlespinner 2016-10-01 10:52:25 +02:00
yugecin
eae91e3808 beamspinner 2016-10-01 10:50:35 +02:00
yugecin
d424db9a7f make sample override a percent instread of boolean 2016-10-01 10:46:28 +02:00
yugecin
1f68136639 better inbounds check 2016-10-01 10:42:34 +02:00
yugecin
6788cd84d8 Merge branch 'hitresults' 2016-10-01 00:26:02 +02:00
yugecin
5a899e29cb don't play the hitsounds twice >.< 2016-10-01 00:25:55 +02:00
yugecin
0199c445c6 Use dance option tab as initial tab 2016-09-30 23:57:43 +02:00
yugecin
230dd6d98f put common stuff in utils 2016-09-30 23:56:07 +02:00
yugecin
ad370fd8fb Show mirrored result for slider ends 2016-09-30 23:53:48 +02:00
yugecin
4409d538fd Show mirrored results for hitcircles 2016-09-30 23:51:28 +02:00
yugecin
b1d69cf9f4 Instantly show hitresult on slider initial circle, don't show the other end when finishing. Also show results in mirrored circles 2016-09-30 23:48:02 +02:00
yugecin
5b264a5277 Option to hide all objects 2016-09-30 23:11:43 +02:00
yugecin
722180d9ff Merge branch 'pippi' 2016-09-30 22:58:05 +02:00
yugecin
2b91288adb PIPPI! 2016-09-30 22:57:57 +02:00
yugecin
5bcf072a69 add options 2016-09-30 22:08:45 +02:00
yugecin
4ab767f464 Adjust default values for dancer options 2016-09-30 21:51:59 +02:00
yugecin
043237d1a1 add to option menu 2016-09-30 21:45:19 +02:00
yugecin
daa7bec0da Add mover direction 2016-09-30 21:40:33 +02:00
yugecin
2f5f2a610d add opposite combo color as override option 2016-09-30 21:32:24 +02:00
yugecin
5c2170982a fix 1/4th circle 2016-09-30 21:24:30 +02:00
yugecin
fc6dcce105 fix halfellipse 2016-09-30 21:20:46 +02:00
yugecin
ae9bdcd68f implement sliderballtint 2016-09-30 21:11:16 +02:00
yugecin
39b24b5f1c attempt to load normal image if there's no array (load sliderb if there's no sliderb0, sliderb1 etc) 2016-09-30 21:11:03 +02:00
yugecin
08d9f4165a option to ignore beatmap sample volume 2016-09-30 21:08:15 +02:00
yugecin
8891976d48 Flash warningarrows after breaks 4 times instead of 2 2016-09-30 20:08:50 +02:00
yugecin
be547cfa1f Don't draw UI on breaks 2016-09-30 20:05:33 +02:00
yugecin
0ccf4874d8 hotfix for dummy img as hitobjectnumber prevent drawing of hitcircleoverlay 2016-09-30 20:01:31 +02:00
yugecin
8c7531e550 prevent arrayindexoutofbounds 2016-09-30 19:56:47 +02:00
yugecin
b12ed6fa0e Also draw skipbutton when using auto 2016-09-30 19:41:42 +02:00
yugecin
be5288d1f7 auto activate auto 2016-09-30 19:39:47 +02:00
yugecin
f6b791cf25 Option to apply last object color to cursor 2016-09-30 19:38:02 +02:00
yugecin
add5e96af1 Options to use object color overrides 2016-09-30 19:05:53 +02:00
yugecin
05c29f1106 Fix warningarrows being rotated 180° instead of flipped horizontally 2016-09-30 16:17:51 +02:00
yugecin
965f88ecc3 attempt to support HitCircleOverlap and ScoreOverlap (#4) 2016-09-30 16:13:23 +02:00
yugecin
19f4e5f11d support prefixes (HitCirclePrefix, ScorePrefix), and use dummy instead of complaining when image can't be found 2016-09-30 15:54:07 +02:00
yugecin
da3dbfa702 fix compact optionmenu not selecting last option 2016-09-30 12:23:10 +02:00
yugecin
d6b993bfe8 compactify the options menu 2016-09-30 12:18:34 +02:00
yugecin
3a1f510e31 option to hide all UI 2016-09-30 12:06:36 +02:00
yugecin
6965e33856 fix halfellipsemover so it doesnt get stuck 2016-09-30 10:04:47 +02:00
yugecin
e082adb37f another todo option 2016-09-30 09:45:36 +02:00
yugecin
52f9ac9a7f only do dancer options (mirror etc) if auto is active 2016-09-30 09:36:21 +02:00
yugecin
73754e9c7d option to never draw background 2016-09-30 09:35:21 +02:00
yugecin
e5d7f0f159 give more space for tabs in the option screen 2016-09-30 09:29:24 +02:00
yugecin
46e2b7069f option for rgb objs 2016-09-30 09:17:39 +02:00
yugecin
0d77d7f56a remove debug println, whoops 2016-09-30 09:13:10 +02:00
yugecin
0c16802523 use shifthue 2016-09-30 09:12:54 +02:00
yugecin
e126edbff7 shift hue on each new object 2016-09-30 09:09:14 +02:00
yugecin
fa57e63a2f option to hide approach circles 2016-09-29 23:34:11 +02:00
yugecin
7f908db6e7 add option for mirrorcollage 2016-09-29 23:29:20 +02:00
yugecin
0d89c2612d attempt to make sliderbody look better 2016-09-29 23:22:41 +02:00
yugecin
923f8dcb49 black sliders 2016-09-29 22:45:16 +02:00
yugecin
d3af3c17d0 move shit to utils 2016-09-29 22:41:56 +02:00
yugecin
33895b24c8 mirrored objects +180° hue 2016-09-29 21:55:23 +02:00
yugecin
9a73ab23e9 render mirrored 2016-09-29 21:40:42 +02:00
yugecin
72aa856818 don't draw sliderend 2016-09-28 22:03:45 +02:00
yugecin
759187b4cd fix #3 (doesn't move to last object) 2016-09-28 13:49:33 +02:00
yugecin
2b93805b71 fix license text 2016-09-28 13:34:54 +02:00
yugecin
4504afa59e add second repobutton :) 2016-09-27 22:44:35 +02:00
yugecin
defeab3522 Add pippi options (not implemented) 2016-09-27 22:33:14 +02:00
yugecin
43548fa058 implement lazy sliders 2016-09-27 22:23:14 +02:00
yugecin
730f55ce20 be failsafe on updates 2016-09-27 22:04:14 +02:00
yugecin
52aac61233 give better names to auto movers 2016-09-27 22:03:16 +02:00
yugecin
728b2ceb97 Add options in the ingame menu 2016-09-27 22:02:49 +02:00
yugecin
130ee94825 spinner tostring 2016-09-27 21:58:24 +02:00
yugecin
1fb75c8ea2 Merge branch 'dancestuff' into dancesettings 2016-09-27 21:45:43 +02:00
yugecin
eb696077a2 we want to dance 2016-09-27 21:29:03 +02:00
yugecin
b74c037aec Auto mover factories 2016-09-27 21:28:50 +02:00
yugecin
a39ac19bb0 move width/height from container to options class 2016-09-27 20:52:52 +02:00
yugecin
2e76d302cd ayyyy space 2016-09-27 20:38:30 +02:00
yugecin
b933dd78d5 wtf 2016-09-27 20:38:18 +02:00
yugecin
15057b4d79 add a spinner 2016-09-27 20:05:16 +02:00
yugecin
f3de8a4506 use a reasonable size for the errorhandler dialog 2016-09-27 19:58:45 +02:00
yugecin
857118accb update forgotten dummyobj 2016-09-27 19:56:02 +02:00
yugecin
6b81ce2d2c moverfactory toStrings 2016-09-27 19:45:08 +02:00
yugecin
cfb9b7d0a0 add moverfactories 2016-09-27 19:22:08 +02:00
yugecin
0a3e7b0e09 add movers 2016-09-27 19:12:24 +02:00
yugecin
632c8a7fcf double ver of Utils.distance 2016-09-27 18:44:02 +02:00
yugecin
c64e0252aa make static accessible width & height 2016-09-27 18:36:35 +02:00
yugecin
b1894ade26 getQuadrant func 2016-09-27 18:36:09 +02:00
yugecin
b842a564f7 add isSpinner, isCircle etc in GameObject 2016-09-27 18:26:53 +02:00
yugecin
e7e33cd406 put more information in gameobject 2016-09-27 18:17:53 +02:00
yugecin
d2d39b3d9a test how to add options 2016-09-27 17:55:41 +02:00
yugecin
4769c1cfda make options menu use lists 2016-09-27 17:36:10 +02:00
yugecin
d2ff927ab6 allow scrolling in the list by dragging mouse 2016-09-27 17:35:53 +02:00
yugecin
825a8a44fe fix list when scrolled 2016-09-27 17:26:29 +02:00
yugecin
f82f880670 List UI control 2016-09-27 17:13:31 +02:00
yugecin
74a9320503 make cursortrail longer and show on small movements 2016-09-27 15:29:38 +02:00
Jeffrey Han
93c8ab96f1 Fixed wrong parameter order in StarStream.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2016-04-03 01:04:23 -04:00
Jeffrey Han
1e58b3c47d Fixed a null pointer exception. (fixes #162)
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-12-14 19:02:37 -05:00
Jeffrey Han
8c4e5ac264 Fixed an error when reloading beatmaps. (#161)
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-12-14 11:59:49 -05:00
Andrew Zhao
5b42f9a588 centered follow points 2015-11-29 18:58:00 -08:00
MatteoS
78511737ce Draw reversing arrow in black if the slider is lightly colored 2015-11-21 15:30:25 +01:00
Jeffrey Han
ba240797d8 Replaced all linear fade-out transitions with eased transitions.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-11-19 17:47:46 -05:00
Jeffrey Han
fb789c8fc5 Follow-up to #150: delayed fade-out, minor style changes.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-11-19 16:56:28 -05:00
MatteoS
3e285e05fc Add falling game objects on fail 2015-11-18 22:29:18 +01:00
Jeffrey Han
d85de23cec Fixed an error when importing beatmaps. (fixes #149)
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-11-17 17:46:00 -05:00
Jeffrey Han
f835a441c2 Follow-up to #148: keypress and edge case fixes.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-11-16 16:05:20 -05:00
MatteoS
d0069c20e5 Fix pitch changes (hopefully) 2015-11-16 21:21:28 +01:00
MatteoS
13e0bdb81e Make music pitch and speed go down on fail (like in osu!) 2015-11-16 14:33:07 +01:00
Jeffrey Han
06c423a4dd Properly detect osu! installations on Windows (using registry keys).
Thanks to @ModuleLFS for the idea.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-10-31 22:20:08 -04:00
Jeffrey Han
9c7dbce6fd Updated BloodcatServer to use the new API. (fixes #139, 140)
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-30 00:28:21 -04:00
Jeffrey Han
4acd3cda02 Check mouse button before firing events for kinetic scrolling.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-20 11:38:46 -04:00
Jeffrey Han
c69f34adc3 Don't show decimal points for CS/HP/AR/OD values unless needed.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-19 15:30:41 -04:00
Jeffrey Han
5634a673bb Fix hovering bug with < max nodes in kinetic scrolling.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-19 13:04:53 -04:00
fd
b843beb3c0 KineticScrolling Minor fixes
for selection in large BeatmapSets
2015-09-19 12:11:07 -04:00
Jeffrey Han
c58c128ec8 Minor Javadoc additions/edits.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-18 19:20:18 -04:00
Jeffrey Han
eb331360b9 Added scrolling animation to "random" song selection.
Involves temporarily changing the kinetic scrolling speed, so it's a little messy...

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-18 18:49:01 -04:00
Jeffrey Han
14496050ea Minor style changes from #134.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-18 16:02:19 -04:00
Jeffrey Han
daf3a2aad3 Merge pull request #134 from Bigpet/snakeslider
Snaking sliders implementation.
2015-09-18 15:27:54 -04:00
Peter Tissen
131138ea8c Snaking sliders initial implementation.
Draws curves in a range from 0 to x (where x is a value between 0 and 1) while blending them in (if enabled in the options)
Cache a unit-cone once and re-use that with scaling and translation instead of generating it each time again.
This is more for readability than performance (since presumably feeding it mostly constants like before would be faster)

Only draws the cones in the curve once if possible
(only possible if consective calls to draw with the intervals x_1 before x_2 are made and [0, x_1] [0, x_2] with x_1 < x_2 holds true)

minor refactoring and cleanup

Omg my code is such a mess. I feel like I've committed a crime against humanity by just randomly putting that
random vbo id into the class called "Rendertarget". But there's really no good place for it now (that has a way to clean it up).
But if "Rendertarget" will ever be used by anything else but the sliders I'm gonna pull that out.

added blending in for return arrows and ticks
2015-09-18 20:21:37 +02:00
Jeffrey Han
286388270e Fixed song scores getting clipped horizontally. (also from #131)
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-16 20:12:47 -04:00
Jeffrey Han
0278556947 Fixed a minor kinetic scrolling bug in the song menu.
Added a missing "songScrolling.released()" call upon entering the song menu as the pressed state wasn't being cleared (causing an issue with the scroll wheel upon re-entering the state).

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-16 15:42:00 -04:00
Jeffrey Han
e0da6a2444 Minor formatting cleanup for #131.
Also made some members private.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-15 23:20:53 -04:00
fd
d69e5fa5e7 Kinetic Scrolling Fixes 2015-09-15 21:39:35 -04:00
fd
133241f630 Merge remote-tracking branch 'org/master' into KinecticScrolling
Conflicts:
	src/itdelatrisu/opsu/ScoreData.java
	src/itdelatrisu/opsu/downloads/DownloadNode.java
	src/itdelatrisu/opsu/states/DownloadsMenu.java
	src/itdelatrisu/opsu/states/SongMenu.java
2015-09-14 20:09:52 -04:00
fd
0562c66531 Kinectic Scrolling
for SongNodes, Scores, Download Results, Download Info
2015-09-14 19:19:49 -04:00
Jeffrey Han
1fe45f7bb4 Merged DISABLE_CURSOR option from fluddokt/opsu. 2015-09-11 11:43:19 -04:00
Jeffrey Han
6506967c12 Added some missing @param and @throws Javadoc comments.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-09 23:51:16 -04:00
Jeffrey Han
831c297ece Made DropdownMenu extend Slick's AbstractComponent class.
Clicks and animation updates are now handled internally within the DropdownMenu class, which should simplify usage a bit.  Override menuClicked() and itemSelected() instead for event handling.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-09 18:57:01 -04:00
Jeffrey Han
7f1193bb77 Slight changes to DropdownMenu behavior.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-09 13:25:48 -04:00
Jeffrey Han
643a7c4589 Added a dropdown menu class, similar to the one in osu!.
Using 'fa-chevron-down' and 'fa-chevron-right' icons from Font Awesome v4.4.0 (https://github.com/FortAwesome/Font-Awesome).

The dropdown menu is currently used only in the downloads menu to select servers.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-08 23:46:30 -04:00
Jeffrey Han
6c369f6329 Minor code cleaning.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-08 12:26:28 -04:00
Jeffrey Han
be3adb3dc5 Animate score buttons in the song menu.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-06 01:44:29 -04:00
Jeffrey Han
5ff35d355b Animate the music icon in the song menu. (follow-up to c5cc43a)
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-05 19:46:52 -04:00
Jeffrey Han
c5cc43acfc Fade in song info in the song menu.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-05 14:40:34 -05:00
Jeffrey Han
01fb9c50c9 Replace xy float[] arrays with Vec2f (mostly in game objects).
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-05 12:53:42 -05:00
Jeffrey Han
1b8f85942f Use java.awt.Point in Cursor class instead of separate x/y lists.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-05 12:46:01 -05:00
Jeffrey Han
97dbb36e43 Switch to startUse/drawEmbedded/endUse for cursortrail and star stream.
This should be much more efficient when repeatedly rendering the same texture, as in these two cases.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-05 09:32:26 -05:00
Jeffrey Han
ffe4d5d415 Merging davedes' dev branch fixes/updates to Slick's Image class.
https://bitbucket.org/kevglass/slick/history-node/aa6e7b6dce00/trunk/Slick/src/org/newdawn/slick/Image.java?at=development

Commits merged:
- edd48ff: Simple center x/y fixes.
- d847f81: Fixed a filter constant.
- 37b8710: Added flushPixelData to destroy().
- 97da01a: Added rotate in use.
- 06bef32: Overload drawEmbedded().
- 3f82ac1: Fixed rotate bug for drawEmbedded().
2015-09-05 09:07:03 -05:00
Jeffrey Han
80042807c5 Draw an animated star stream in the song menu.
Star image was modified from XinCrin's "Fantasy's Skin".

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-04 22:36:25 -05:00
Jeffrey Han
cd3d53336d A couple of API improvements.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-03 22:16:52 -05:00
Jeffrey Han
14948846f5 Added star difficulty to conditional search filters.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-03 21:00:02 -05:00
Jeffrey Han
3214916d60 Load beatmap background images in a new thread.
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>
2015-09-03 19:24:07 -05:00
Jeffrey Han
e767800702 Fixed broken "Easy" mod.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-03 00:14:25 -05:00
Jeffrey Han
a2eaf35664 Draw star rating stars in the song menu inside each song node.
Star image was taken from XinCrin's "Fantasy's Skin".

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-02 23:10:31 -05:00
Jeffrey Han
c785a1261c Ported osu!tp's beatmap difficulty algorithm to compute star ratings.
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>
2015-09-02 19:44:04 -05:00
Jeffrey Han
8cb796bd18 Fixed updater ignoring XDG flag (again).
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-02 19:23:23 -05:00
Jeffrey Han
5817217eb5 Stop logging warnings for missing background images.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-02 17:38:28 -05:00
Jeffrey Han
396071dfbc When deleting beatmaps, remove their MD5 hashes from the lookup table.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-02 14:37:16 -05:00
Jeffrey Han
d5154b567e Replaced "BeatmapImageCache" with a generic LRU cache class.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-02 13:29:52 -05:00
Jeffrey Han
c516d93d1e Check for parallel vectors before constructing a CircumscribedCircle.
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>
2015-09-02 10:51:52 -05:00
Jeffrey Han
d360b73bf5 Specify whether Curve uses scaled or unscaled coordinates.
Unscaled coordinates will be used in a future commit (hopefully).

Added a normalize() method to Vec2f.

Throw RuntimeExceptions for any Curve initialization errors; the game would crash anyway, and this way the objects can be substituted for DummyObjects for a graceful failure.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-02 01:47:15 -05:00
Jeffrey Han
6c956e927f Beatmap parser fixes.
- 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>
2015-09-02 01:41:47 -05:00
Jeffrey Han
fdd70a81c4 Removed leftover/unused 'color' parameter in Curve constructor.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-09-01 21:57:37 -05:00
Jeffrey Han
df3e662865 Marked a couple more members as 'final'. (continuation of 441bb95)
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-08-31 22:54:35 -05:00
Jeffrey Han
769ad963e7 Moved OszUnpacker into package 'opsu.beatmap'.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-08-31 22:25:28 -05:00
Jeffrey Han
c70fcb296f Add git hash (from refs/remotes/origin/master) to error reports.
Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-08-31 17:54:32 -05:00
Jeffrey Han
e535a88840 Stop firing BeatmapWatchService events for intended file modifications.
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>
2015-08-30 23:21:58 -05:00
Jeffrey Han
aed5163a83 Check completed download size against Content-Length header.
If the number of bytes received is less than the reported content length (e.g. a network timeout), mark the download with the "error" status instead of "complete".  Content-Length should be reliable if reported at all, so this should be a valid approach.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
2015-08-30 23:18:46 -05:00