Browse Source

Added slider menu

jancoow 10 years ago
parent
commit
1acba841fa
4 changed files with 96 additions and 51 deletions
  1. 1 2
      model/SongHandler.java
  2. 76 41
      model/gameState/MenuState.java
  3. 17 8
      model/objects/MenuButton.java
  4. 2 0
      view/GameView.java

+ 1 - 2
model/SongHandler.java

@@ -33,8 +33,7 @@ public class SongHandler {
 		if(Window.ON_RASP)
 		if(Window.ON_RASP)
 			dir = new File(System.getProperty( "user.home" ) + "/ColorStrike/Songs");
 			dir = new File(System.getProperty( "user.home" ) + "/ColorStrike/Songs");
 		else
 		else
-			dir = new File("Songs");
-		
+			dir = new File(System.getProperty( "user.home" ) + "/ColorStrike/Songs");		
 		songs = DirScanner.scanDirectories(dir);
 		songs = DirScanner.scanDirectories(dir);
 	}
 	}
 	
 	

+ 76 - 41
model/gameState/MenuState.java

@@ -1,38 +1,43 @@
 package model.gameState;
 package model.gameState;
 
 
-import image.Images;
-import image.Images.ImageType;
-
 import java.awt.Color;
 import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.Graphics2D;
 import java.awt.Polygon;
 import java.awt.Polygon;
-import java.awt.image.BufferedImage;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.List;
 
 
 import model.SongHandler;
 import model.SongHandler;
 import model.objects.MenuButton;
 import model.objects.MenuButton;
+import audio.Song;
 import control.GameStateManager;
 import control.GameStateManager;
 import control.GameStateManager.State;
 import control.GameStateManager.State;
+import control.button.Button;
 import control.button.ButtonEvent;
 import control.button.ButtonEvent;
 import control.joystick.Joystick;
 import control.joystick.Joystick;
 import control.joystick.JoystickEvent;
 import control.joystick.JoystickEvent;
 
 
 public class MenuState extends GameState {
 public class MenuState extends GameState {
 	private ArrayList<MenuButton> buttons;
 	private ArrayList<MenuButton> buttons;
-	private int selected;
+	private int selected, oldselected;
+	private List<Song> songs;
 	private Polygon triangle;
 	private Polygon triangle;
 
 
-    int frame = 0;
-    int maxFrames = 2560;
-    int animationcounter;
+	private int animationcounter;
+	private boolean subscreen, startanimation;
 	
 	
 	public MenuState(GameStateManager gsm, SongHandler sh) {	
 	public MenuState(GameStateManager gsm, SongHandler sh) {	
 		super(gsm, sh);
 		super(gsm, sh);
 		buttons = new ArrayList<MenuButton>();
 		buttons = new ArrayList<MenuButton>();
-		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
 	@Override
 	public void init() {
 	public void init() {
@@ -40,20 +45,32 @@ public class MenuState extends GameState {
 
 
 	@Override
 	@Override
 	public void update() {
 	public void update() {
-		buttonInAnimation(animationcounter);
+		if(startanimation){
+			buttonInAnimation(animationcounter);
+			if(animationcounter == 5){
+				startanimation = false;
+			}
+		}else if(subscreen){
+			nextScreen();
+		}else{
+			previousScreen();
+		}
 	     for(MenuButton b:buttons){
 	     for(MenuButton b:buttons){
 	    	 b.update();
 	    	 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
 	@Override
 	public void draw(Graphics2D g2) {
 	public void draw(Graphics2D g2) {
-//	    g2.drawImage(Images.getImage(ImageType.background), -640 -((frame * 4) % maxFrames), 0, 5120, 1024, null); 
 	    for(MenuButton b:buttons){
 	    for(MenuButton b:buttons){
 	    	 b.draw(g2);
 	    	 b.draw(g2);
 	     }
 	     }
-	    
 	    g2.setColor(Color.ORANGE);
 	    g2.setColor(Color.ORANGE);
 	    triangle = new Polygon();
 	    triangle = new Polygon();
 	    triangle.addPoint(0, 0);
 	    triangle.addPoint(0, 0);
@@ -64,12 +81,16 @@ public class MenuState extends GameState {
 	
 	
 	@Override
 	@Override
 	public void buttonPressed(ButtonEvent e) {
 	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
 	@Override
@@ -78,26 +99,16 @@ public class MenuState extends GameState {
 	}
 	}
 	@Override
 	@Override
 	public void onJoystickMoved(JoystickEvent e) {
 	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);
+		}
+	}
 }
 }

+ 17 - 8
model/objects/MenuButton.java

@@ -10,6 +10,8 @@ import java.awt.geom.GeneralPath;
 import java.awt.geom.Point2D;
 import java.awt.geom.Point2D;
 import java.util.ArrayList;
 import java.util.ArrayList;
 
 
+import audio.Song;
+
 public class MenuButton {
 public class MenuButton {
 
 
 	private ArrayList<GeneralPath> buttonparts;
 	private ArrayList<GeneralPath> buttonparts;
@@ -18,18 +20,19 @@ public class MenuButton {
 	private Paint gradient;
 	private Paint gradient;
 	private int x, y, rounding;
 	private int x, y, rounding;
 	private double scalefactor;
 	private double scalefactor;
-	private String text;
 	
 	
 	private boolean selected; 
 	private boolean selected; 
 	private int fadecounter;
 	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.x = x;
 		this.y = y;
 		this.y = y;
 		this.scalefactor = scale;
 		this.scalefactor = scale;
-		this.text = text;
 		this.rounding = rounding;
 		this.rounding = rounding;
 		calculateButton();
 		calculateButton();
+		setSong(song);
 		
 		
 		colors = new ArrayList<Color>();
 		colors = new ArrayList<Color>();
 		
 		
@@ -98,15 +101,15 @@ public class MenuButton {
 		g2d.setFont(textFont);
 		g2d.setFont(textFont);
 		g2d.translate((x+160)*scalefactor, (y+74)*scalefactor);
 		g2d.translate((x+160)*scalefactor, (y+74)*scalefactor);
 		g2d.rotate(-0.1);
 		g2d.rotate(-0.1);
-		g2d.drawString(text,  0, 0);
+		g2d.drawString(song.getTitle(),  0, 0);
 		g2d.rotate(0.1);
 		g2d.rotate(0.1);
 		g2d.translate(-(x+160)*scalefactor, -(y+74)*scalefactor);
 		g2d.translate(-(x+160)*scalefactor, -(y+74)*scalefactor);
 	}
 	}
 	
 	
 	public void update(){
 	public void update(){
 		if(selected && fadecounter < 5){
 		if(selected && fadecounter < 5){
-			x -= 8;
-			y -=8;
+			x += 8;
+			y -= 8;
 			scalefactor += 0.04;
 			scalefactor += 0.04;
 			fadecounter++;
 			fadecounter++;
 			calculateButton();
 			calculateButton();
@@ -134,6 +137,12 @@ public class MenuButton {
 	public int getX() {
 	public int getX() {
 		return x;
 		return x;
 	}
 	}
-	
-	
+
+	public Song getSong() {
+		return song;
+	}
+
+	public void setSong(Song song) {
+		this.song = song;
+	}
 }
 }

+ 2 - 0
view/GameView.java

@@ -4,6 +4,7 @@ import java.awt.Dimension;
 import java.awt.Graphics;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.Graphics2D;
 import java.awt.RenderingHints;
 import java.awt.RenderingHints;
+import java.awt.Toolkit;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ActionListener;
 
 
@@ -48,5 +49,6 @@ public class GameView extends JPanel implements ActionListener{
 	              RenderingHints.VALUE_ANTIALIAS_ON);
 	              RenderingHints.VALUE_ANTIALIAS_ON);
 	     g2d.setRenderingHints(rh);
 	     g2d.setRenderingHints(rh);
 		gsm.currentState.draw(g2d);		
 		gsm.currentState.draw(g2d);		
+		Toolkit.getDefaultToolkit().sync();
 	}	
 	}	
 }
 }