package de.ctdo.crashtest; import org.bff.javampd.MPD; import org.bff.javampd.MPDPlayer; import org.bff.javampd.exception.MPDConnectionException; import org.bff.javampd.exception.MPDResponseException; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.net.UnknownHostException; import java.util.Random; public class SteuerungFrame extends JFrame implements StateChangeListener { private JPanel pnlRoot; private JLabel lblState; private char lastKey = ' '; private MPD mpd; private MPDPlayer player; Statemachine machine = new Statemachine(); BuntiClient bunti = new BuntiClient("bunti.ctdo.de", 8080); public static void main(String args[]) { new SteuerungFrame(); } public SteuerungFrame() { //setType(Type.UTILITY); setBackground(Color.black); setBounds(200,200, 400, 200); machine.addStateChangedListener(this); initGui(); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); machine.reset(); try { mpd = new MPD("dampfradio.raum.chaostreff-dortmund.de", 6600); player = mpd.getMPDPlayer(); } catch (UnknownHostException e) { e.printStackTrace(); return; } catch (MPDConnectionException e) { e.printStackTrace(); return; } addKeyListener(new KeyAdapter() { @Override public void keyTyped(KeyEvent e) { lastKey = e.getKeyChar(); if (lastKey == KeyEvent.VK_F) { Random r = new Random(); setLEDs(r.nextInt(255), r.nextInt(255),r.nextInt(255)); } if (lastKey == KeyEvent.VK_1) { machine.reset(); } else { machine.handleInput(e.getKeyChar()); } updateGui(); } }); addWindowStateListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { try { if(mpd != null) mpd.close(); } catch (MPDConnectionException e1) { e1.printStackTrace(); } catch (MPDResponseException e1) { e1.printStackTrace(); } } }); } @Override public void stateChanged(Statemachine.state newState) { updateGui(); switch (newState) { case IDLE: setLEDs(0x40,0,0xff); bunti.setLampel(false,false,false); break; case ENTERED_ROOM: bunti.setLampel(false,false,false); setLEDs(255,0,100); // start von Mo Do - Eins, Zwei Polizei break; case TABLE_GAME_ONE: bunti.setLampel(true,false,false); setLEDs(255,0,100); break; case TABLE_GAME_TWO: bunti.setLampel(false,true,false); setLEDs(255,0,100); break; case TABLE_GAME_THREE: bunti.setLampel(false,true,false); setLEDs(255,35,0); break; case TABLE_GAME_FOUR: bunti.setLampel(false,true,false); setLEDs(255,55,0); break; case TABLE_GAME_FIVE: bunti.setLampel(false,true,false); setLEDs(255,75,0); break; case TABLE_GAME_SIX: bunti.setLampel(false,true,false); setLEDs(255,100,0); break; case TABLE_GAME_SEVEN: bunti.setLampel(false,false,true); setLEDs(255,100,0); break; case TABLE_FINISH: // und roket muss starten bunti.setLampel(false,false,true); setLEDs(0, 255, 0); break; case ROKET_DONE: break; } } private void setLEDs(int red, int green, int blue) { bunti.setPar56(0,red,green,blue); bunti.setPar56(1,red,green,blue); bunti.setPar56(2,red,green,blue); bunti.setPar56(3,red,green,blue); } private void initGui() { Container pane = getContentPane(); pnlRoot = new JPanel(new FlowLayout()); lblState = new JLabel("", JLabel.LEFT); pnlRoot.add(lblState); pane.add(pnlRoot); updateGui(); } private void updateGui() { lblState.setText("LastKey: " + lastKey + "
CurrentState: " + machine.getCurrentState() + "
ChangeCounter: " + machine.getStateChangeCounter() + ""); } }