From 09a59794757e8ffc5d0a5f438f0ae9d5e90926a5 Mon Sep 17 00:00:00 2001 From: Jeffrey Han Date: Fri, 16 Jan 2015 13:42:54 -0500 Subject: [PATCH] Added a button to link to GitHub repository in main menu. GitHub "mark" image is from: https://github.com/logos Also changed default screen resolution to 1024x768 since it's more likely to be supported. Signed-off-by: Jeffrey Han --- res/repo.png | Bin 0 -> 4044 bytes src/itdelatrisu/opsu/ErrorHandler.java | 16 +--------- src/itdelatrisu/opsu/GameImage.java | 7 +++++ src/itdelatrisu/opsu/states/MainMenu.java | 35 +++++++++++++++++++++- src/itdelatrisu/opsu/states/Options.java | 23 +++++++++++++- 5 files changed, 64 insertions(+), 17 deletions(-) create mode 100644 res/repo.png diff --git a/res/repo.png b/res/repo.png new file mode 100644 index 0000000000000000000000000000000000000000..192846a12085914cc0e38d9b48036b11d2a4d7c4 GIT binary patch literal 4044 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 ZsK8ky_?39l4gAjkwLQ)WTW#Z?@NW_mBhUZ< literal 0 HcmV?d00001 diff --git a/src/itdelatrisu/opsu/ErrorHandler.java b/src/itdelatrisu/opsu/ErrorHandler.java index 6d651b31..459261d6 100644 --- a/src/itdelatrisu/opsu/ErrorHandler.java +++ b/src/itdelatrisu/opsu/ErrorHandler.java @@ -24,8 +24,6 @@ import java.awt.Cursor; import java.awt.Desktop; import java.io.PrintWriter; import java.io.StringWriter; -import java.net.URI; -import java.net.URISyntaxException; import javax.swing.JOptionPane; import javax.swing.JScrollPane; @@ -81,18 +79,6 @@ public class ErrorHandler { message = { desc, scroll }, messageR = { descR, scroll }; - /** - * Address to report issues. - */ - private static URI uri; - static { - try { - uri = new URI("https://github.com/itdelatrisu/opsu/issues/new"); - } catch (URISyntaxException e) { - Log.error("Problem with error URI.", e); - } - } - // This class should not be instantiated. private ErrorHandler() {} @@ -137,7 +123,7 @@ public class ErrorHandler { JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE, null, optionsR, optionsR[2]); if (n == 0) { - Desktop.getDesktop().browse(uri); + Desktop.getDesktop().browse(Options.ISSUES_URI); Desktop.getDesktop().open(Options.LOG_FILE); } else if (n == 1) Desktop.getDesktop().open(Options.LOG_FILE); diff --git a/src/itdelatrisu/opsu/GameImage.java b/src/itdelatrisu/opsu/GameImage.java index 9107b75f..22210e95 100644 --- a/src/itdelatrisu/opsu/GameImage.java +++ b/src/itdelatrisu/opsu/GameImage.java @@ -302,6 +302,13 @@ public enum GameImage { protected Image process_sub(Image img, int w, int h) { return img.getScaledCopy((h * 0.15f) / img.getHeight()); } + }, + + REPOSITORY ("repo", "png", false) { + @Override + protected Image process_sub(Image img, int w, int h) { + return img.getScaledCopy((h / 17f) / img.getHeight()); + } }; /** diff --git a/src/itdelatrisu/opsu/states/MainMenu.java b/src/itdelatrisu/opsu/states/MainMenu.java index 848cc547..85796a0d 100644 --- a/src/itdelatrisu/opsu/states/MainMenu.java +++ b/src/itdelatrisu/opsu/states/MainMenu.java @@ -18,6 +18,7 @@ package itdelatrisu.opsu.states; +import itdelatrisu.opsu.ErrorHandler; import itdelatrisu.opsu.GameImage; import itdelatrisu.opsu.MenuButton; import itdelatrisu.opsu.Opsu; @@ -29,6 +30,8 @@ import itdelatrisu.opsu.audio.MusicController; import itdelatrisu.opsu.audio.SoundController; import itdelatrisu.opsu.audio.SoundEffect; +import java.awt.Desktop; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Stack; @@ -83,6 +86,11 @@ public class MainMenu extends BasicGameState { */ private MenuButton musicPlay, musicPause, musicNext, musicPrevious; + /** + * Button linking to repository. + */ + private MenuButton repoButton; + /** * Application start time, for drawing the total running time. */ @@ -126,7 +134,7 @@ public class MainMenu extends BasicGameState { int width = container.getWidth(); int height = container.getHeight(); - // initialize buttons + // initialize menu buttons Image logoImg = GameImage.MENU_LOGO.getImage(); Image playImg = GameImage.MENU_PlAY.getImage(); Image exitImg = GameImage.MENU_EXIT.getImage(); @@ -154,6 +162,14 @@ public class MainMenu extends BasicGameState { musicNext.setHoverScale(1.5f); musicPrevious.setHoverScale(1.5f); + // initialize repository button + if (Desktop.isDesktopSupported()) { // only if a webpage can be opened + Image repoImg = GameImage.REPOSITORY.getImage(); + repoButton = new MenuButton(repoImg, + (width * 0.995f) - repoImg.getWidth(), (height * 0.995f) - repoImg.getHeight() + ); + } + reset(); } @@ -195,6 +211,10 @@ public class MainMenu extends BasicGameState { g.fillRoundRect(width - 168, 54, 148f * MusicController.getPosition() / osu.endTime, 5, 4); + // draw repository button + if (repoButton != null) + repoButton.draw(); + // draw text g.setFont(Utils.FONT_MEDIUM); int lineHeight = Utils.FONT_MEDIUM.getLineHeight(); @@ -235,6 +255,8 @@ public class MainMenu extends BasicGameState { musicPause.hoverUpdate(delta, mouseX, mouseY); musicNext.hoverUpdate(delta, mouseX, mouseY); musicPrevious.hoverUpdate(delta, mouseX, mouseY); + if (repoButton != null) + repoButton.hoverUpdate(delta, mouseX, mouseY); // window focus change: increase/decrease theme song volume if (MusicController.isThemePlaying()) { @@ -314,6 +336,8 @@ public class MainMenu extends BasicGameState { musicNext.setScale(1f); if (!musicPrevious.contains(mouseX, mouseY)) musicPrevious.setScale(1f); + if (repoButton != null && !repoButton.contains(mouseX, mouseY)) + repoButton.setScale(1f); } @Override @@ -350,6 +374,15 @@ public class MainMenu extends BasicGameState { MusicController.setPosition(0); } + // repository button actions + else if (repoButton != null && repoButton.contains(x, y)) { + try { + Desktop.getDesktop().browse(Options.REPOSITORY_URI); + } catch (IOException e) { + ErrorHandler.error("Could not browse to repository URI.", e, false); + } + } + // start moving logo (if clicked) else if (!logoClicked) { if (logo.contains(x, y)) { diff --git a/src/itdelatrisu/opsu/states/Options.java b/src/itdelatrisu/opsu/states/Options.java index 58fd2e56..b9eefa60 100644 --- a/src/itdelatrisu/opsu/states/Options.java +++ b/src/itdelatrisu/opsu/states/Options.java @@ -35,6 +35,8 @@ import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; +import java.net.URI; +import java.net.URISyntaxException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; @@ -87,6 +89,25 @@ public class Options extends BasicGameState { */ public static final String FONT_NAME = "kochi-gothic.ttf"; + /** + * Repository address. + */ + public static URI REPOSITORY_URI; + + /** + * Issue reporting address. + */ + public static URI ISSUES_URI; + + static { + try { + REPOSITORY_URI = new URI("https://github.com/itdelatrisu/opsu"); + ISSUES_URI = new URI("https://github.com/itdelatrisu/opsu/issues/new"); + } catch (URISyntaxException e) { + Log.error("Problem loading URIs.", e); + } + } + /** * The beatmap directory. */ @@ -559,7 +580,7 @@ public class Options extends BasicGameState { /** * Index (row) in resolutions[][] array. */ - private static Resolution resolution = Resolution.RES_1280_800; + private static Resolution resolution = Resolution.RES_1024_768; // /** // * Whether or not the game should run in fullscreen mode.