From 1acba841fa1ed9ab913346db33167c1ff928d7c3 Mon Sep 17 00:00:00 2001 From: jancoow Date: Thu, 4 Jun 2015 08:27:37 +0200 Subject: [PATCH] Added slider menu --- model/SongHandler.java | 3 +- model/gameState/MenuState.java | 117 +++++++++++++++++++++------------ model/objects/MenuButton.java | 25 ++++--- view/GameView.java | 2 + 4 files changed, 96 insertions(+), 51 deletions(-) diff --git a/model/SongHandler.java b/model/SongHandler.java index eb1fa6a..1211bc5 100644 --- a/model/SongHandler.java +++ b/model/SongHandler.java @@ -33,8 +33,7 @@ public class SongHandler { if(Window.ON_RASP) dir = new File(System.getProperty( "user.home" ) + "/ColorStrike/Songs"); else - dir = new File("Songs"); - + dir = new File(System.getProperty( "user.home" ) + "/ColorStrike/Songs"); songs = DirScanner.scanDirectories(dir); } diff --git a/model/gameState/MenuState.java b/model/gameState/MenuState.java index 2db39a6..6042210 100644 --- a/model/gameState/MenuState.java +++ b/model/gameState/MenuState.java @@ -1,38 +1,43 @@ package model.gameState; -import image.Images; -import image.Images.ImageType; - import java.awt.Color; import java.awt.Graphics2D; import java.awt.Polygon; -import java.awt.image.BufferedImage; import java.util.ArrayList; +import java.util.List; import model.SongHandler; import model.objects.MenuButton; +import audio.Song; import control.GameStateManager; import control.GameStateManager.State; +import control.button.Button; import control.button.ButtonEvent; import control.joystick.Joystick; import control.joystick.JoystickEvent; public class MenuState extends GameState { private ArrayList buttons; - private int selected; + private int selected, oldselected; + private List songs; private Polygon triangle; - int frame = 0; - int maxFrames = 2560; - int animationcounter; + private int animationcounter; + private boolean subscreen, startanimation; public MenuState(GameStateManager gsm, SongHandler sh) { super(gsm, sh); buttons = new ArrayList(); - buttons.add(new MenuButton(-600, 50,1.7, "Quick play", 0, Color.green)); - buttons.add(new MenuButton(-600, 150, 1.7, "Pick song", 10, new Color(60,60,255))); - buttons.add(new MenuButton(-600, 250, 1.7, "Best played", 20, Color.red)); - buttons.add(new MenuButton(-600, 350, 1.7, "Last played", 30, Color.yellow)); + this.songs = sh.getSongs(); + startanimation = true; + + buttons.add(new MenuButton(-600, 50,1.7, 0, Color.green, selectedToSong(selected-2) )); + buttons.add(new MenuButton(-600, 150, 1.7, 10, new Color(60,60,255), selectedToSong(selected-1))); + buttons.add(new MenuButton(-600, 250, 1.7, 20, Color.red, selectedToSong(selected))); + buttons.add(new MenuButton(-600, 350, 1.7, 30, Color.yellow,selectedToSong(selected+1))); + buttons.add(new MenuButton(-600, 450, 1.7, 30, Color.yellow,selectedToSong(selected+2))); + buttons.get(2).setSelected(true); + } @Override public void init() { @@ -40,20 +45,32 @@ public class MenuState extends GameState { @Override public void update() { - buttonInAnimation(animationcounter); + if(startanimation){ + buttonInAnimation(animationcounter); + if(animationcounter == 5){ + startanimation = false; + } + }else if(subscreen){ + nextScreen(); + }else{ + previousScreen(); + } for(MenuButton b:buttons){ b.update(); } - frame++; + if(selected != oldselected){ + for(int i = 0; i < buttons.size(); i++){ + buttons.get(i).setSong(selectedToSong(selected+(i-2))); + } + oldselected = selected; + } } @Override public void draw(Graphics2D g2) { -// g2.drawImage(Images.getImage(ImageType.background), -640 -((frame * 4) % maxFrames), 0, 5120, 1024, null); for(MenuButton b:buttons){ b.draw(g2); } - g2.setColor(Color.ORANGE); triangle = new Polygon(); triangle.addPoint(0, 0); @@ -64,12 +81,16 @@ public class MenuState extends GameState { @Override public void buttonPressed(ButtonEvent e) { - if(e.getButton().getButtonID() == 1){ - for(MenuButton b:buttons){ - if(b.isSelected()){ - gsm.setState(State.PLAY_STATE); - } - } + if(subscreen){ //Screen for Song details + if(e.getButton().getButtonID() == 2){ + subscreen = false; + } + }else{ //Screen for selecting song + if(e.getButton().getButtonID() == 1){ + subscreen = true; + }else if(e.getButton().getButtonID() == 2){ + subscreen = false; + } } } @Override @@ -78,26 +99,16 @@ public class MenuState extends GameState { } @Override public void onJoystickMoved(JoystickEvent e) { - if(e.getJoystick().getPos() == Joystick.Position.DOWN){ - selected++; - selected %= buttons.size(); - for(int i = 0; i < buttons.size(); i++){ - if(selected == i){ - buttons.get(i).setSelected(true); - }else{ - buttons.get(i).setSelected(false); - } - } - }else if(e.getJoystick().getPos() == Joystick.Position.UP){ - selected--; - if(selected < 0) selected = buttons.size()-1; - for(int i = 0; i < buttons.size(); i++){ - if(selected == i){ - buttons.get(i).setSelected(true); - }else{ - buttons.get(i).setSelected(false); - } + if(subscreen){ //Screen for Song details + + }else{ //Screen for selecting song + if(e.getJoystick().getPos() == Joystick.Position.DOWN){ + selected++; + }else if(e.getJoystick().getPos() == Joystick.Position.UP){ + selected--; } + sh.set(songs.indexOf(selectedToSong(selected))); + sh.play(); } } @@ -113,4 +124,28 @@ public class MenuState extends GameState { } } + public void nextScreen(){ + if(buttons.get(0).getX() > -700){ + for(MenuButton b:buttons){ + b.setX(b.getX()-100); + } + } + } + + public void previousScreen(){ + if(buttons.get(0).getX() < 300){ + for(MenuButton b:buttons){ + b.setX(b.getX()+100); + } + } + } + + public Song selectedToSong(int s){ + s %= songs.size(); + if(s < 0){ + return songs.get(songs.size()+s); + }else{ + return songs.get(s); + } + } } diff --git a/model/objects/MenuButton.java b/model/objects/MenuButton.java index 50e1712..98ce3c8 100644 --- a/model/objects/MenuButton.java +++ b/model/objects/MenuButton.java @@ -10,6 +10,8 @@ import java.awt.geom.GeneralPath; import java.awt.geom.Point2D; import java.util.ArrayList; +import audio.Song; + public class MenuButton { private ArrayList buttonparts; @@ -18,18 +20,19 @@ public class MenuButton { private Paint gradient; private int x, y, rounding; private double scalefactor; - private String text; private boolean selected; private int fadecounter; - public MenuButton(int x, int y, double scale, String text, int rounding, Color c0){ + private Song song; + + public MenuButton(int x, int y, double scale, int rounding, Color c0, Song song){ this.x = x; this.y = y; this.scalefactor = scale; - this.text = text; this.rounding = rounding; calculateButton(); + setSong(song); colors = new ArrayList(); @@ -98,15 +101,15 @@ public class MenuButton { g2d.setFont(textFont); g2d.translate((x+160)*scalefactor, (y+74)*scalefactor); g2d.rotate(-0.1); - g2d.drawString(text, 0, 0); + g2d.drawString(song.getTitle(), 0, 0); g2d.rotate(0.1); g2d.translate(-(x+160)*scalefactor, -(y+74)*scalefactor); } public void update(){ if(selected && fadecounter < 5){ - x -= 8; - y -=8; + x += 8; + y -= 8; scalefactor += 0.04; fadecounter++; calculateButton(); @@ -134,6 +137,12 @@ public class MenuButton { public int getX() { return x; } - - + + public Song getSong() { + return song; + } + + public void setSong(Song song) { + this.song = song; + } } diff --git a/view/GameView.java b/view/GameView.java index 825a738..8916fd1 100644 --- a/view/GameView.java +++ b/view/GameView.java @@ -4,6 +4,7 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; +import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -48,5 +49,6 @@ public class GameView extends JPanel implements ActionListener{ RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHints(rh); gsm.currentState.draw(g2d); + Toolkit.getDefaultToolkit().sync(); } }