crashtest/src/de/ctdo/crashtest/SteuerungFrame.java

176 lines
4.8 KiB
Java

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("<html>LastKey: " + lastKey + "<br>CurrentState: " +
machine.getCurrentState() + "<br>ChangeCounter: " +
machine.getStateChangeCounter() + "</html>");
}
}