Browse Source

Implemented Joystick Listener

Kenneth van Ewijk 10 years ago
parent
commit
5683b38210

+ 24 - 0
src/control/joystick/Joystick.java

@@ -2,7 +2,31 @@ package control.joystick;
 
 public class Joystick {
 	
+	public enum Position {
+		UP,
+		LEFT,
+		DOWN,
+		RIGHT,
+		UP_RIGHT,
+		DOWN_RIGHT,
+		UP_LEFT,
+		DOWN_LEFT,
+		CENTER
+	}
+	
+	private Position pos;
+	
 	public Joystick()
 	{
+		pos = Position.CENTER;
+	}
+	
+	public void setPosition(Position pos)
+	{
+		this.pos = pos;
 	}
+	public Position getPos() {
+		return pos;
+	}
+	
 }

+ 83 - 21
src/control/joystick/JoystickHandler.java

@@ -3,46 +3,108 @@ package control.joystick;
 import java.awt.event.KeyEvent;
 import java.awt.event.KeyListener;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
-import control.LedHandler;
+import control.joystick.Joystick.Position;
 
 public class JoystickHandler implements KeyListener{
-	
+
 	List<JoystickListener> listeners;
-	LedHandler led;
+	Set<Integer> keys;
+	Joystick j;
 	
-	public JoystickHandler(LedHandler led)
+	public JoystickHandler()
 	{
-		this.led = led;
 		listeners = new ArrayList<JoystickListener>();
+		keys = new HashSet<Integer>();
+		j = new Joystick();
+	}
+
+	public void addJoystickListener(JoystickListener toAdd) {
+		listeners.add(toAdd);
 	}
 
-	public void addJoyStickListener(JoystickListener toAdd) {
-	    listeners.add(toAdd);
+	public void onJoystickMoved(Joystick j) {
+		JoystickEvent e = new JoystickEvent(j, System.currentTimeMillis());
+		for (JoystickListener yst : listeners)
+			yst.onJoystickMoved(e);
 	}
 	
-	public void onJoyStickMoved() {
-		JoystickEvent e = new JoystickEvent(new Joystick(), 1000L); //TODO edit
-	    for (JoystickListener yst : listeners)
-	        yst.onJoyStickMoved(e);
+	private void updateJoystickPosition()
+	{
+		if(keys.contains(KeyEvent.VK_UP) && keys.contains(KeyEvent.VK_RIGHT))
+		{
+			j.setPosition(Position.UP_RIGHT);
+		}
+		else if(keys.contains(KeyEvent.VK_UP) && keys.contains(KeyEvent.VK_LEFT))
+		{
+			j.setPosition(Position.UP_LEFT);
+		}
+		else if(keys.contains(KeyEvent.VK_DOWN) && keys.contains(KeyEvent.VK_RIGHT))
+		{
+			j.setPosition(Position.DOWN_RIGHT);
+		}
+		else if(keys.contains(KeyEvent.VK_DOWN) && keys.contains(KeyEvent.VK_LEFT))
+		{
+			j.setPosition(Position.DOWN_LEFT);
+		}
+		
+		else if(keys.contains(KeyEvent.VK_UP))
+		{
+			j.setPosition(Position.UP);
+		}
+		else if(keys.contains(KeyEvent.VK_LEFT))
+		{
+			j.setPosition(Position.LEFT);
+		}
+		else if(keys.contains(KeyEvent.VK_RIGHT))
+		{
+			j.setPosition(Position.RIGHT);
+		}
+		else if(keys.contains(KeyEvent.VK_DOWN))
+		{
+			j.setPosition(Position.DOWN);
+		}
+		
+		else
+		{
+			j.setPosition(Position.CENTER);
+		}
 	}
 
 	@Override
 	public void keyPressed(KeyEvent e) {
-		// TODO Auto-generated method stub
-		
+		if(e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_RIGHT)
+		{
+			Set<Integer> keysCopy = new HashSet<Integer>(keys);
+			
+			keys.add(e.getKeyCode());
+			updateJoystickPosition();
+			
+			if(!keys.equals(keysCopy))
+			{
+				onJoystickMoved(j);				
+			}
+		}
 	}
 
 	@Override
 	public void keyReleased(KeyEvent e) {
-		// TODO Auto-generated method stub
-		
+		if(e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_RIGHT)
+		{
+			Set<Integer> keysCopy = new HashSet<Integer>(keys);
+			
+			keys.remove(e.getKeyCode());
+			updateJoystickPosition();
+			
+			if(!keys.equals(keysCopy))
+			{
+				onJoystickMoved(j);				
+			}
+		}
 	}
 
-	@Override
-	public void keyTyped(KeyEvent e) {
-		// TODO Auto-generated method stub
-		
-	}
-}
+	public void keyTyped(KeyEvent e) {}
+}	

+ 1 - 1
src/control/joystick/JoystickListener.java

@@ -1,5 +1,5 @@
 package control.joystick;
 
 public interface JoystickListener {
-	public void onJoyStickMoved(JoystickEvent e);
+	public void onJoystickMoved(JoystickEvent e);
 }