import javax.swing.event.EventListenerList;
import java.util.Arrays;
public class PunchingBag implements Runnable {
private byte[] rawLeds = new byte[6*8];
private Colour[][] leds = new Colour[9][20];
private byte[] ledGridIntensities = new byte[6];
private boolean[][] buttons = new boolean[8][19];
enum Colour {
None, Red, Yellow, Green
};
private EventListenerList buttonListenerList = new EventListenerList();
private EventListenerList ledListenerList = new EventListenerList();
public PunchingBag() {
new Thread(this).start();
}
/**
* Adds an ActionListener
to the button.
*
* @param l
* the ActionListener
to be added
*/
public void addButtonListener(ButtonListener l) {
listenerList.add(ButtonListener.class, l);
}
public void setLED(byte x, byte y, byte intensity) {
}
public void drawRipple(byte x, byte y, byte intensity) {
new Ripple(x, y, intensity);
}
class Ripple implements Runnable {
double currentWidth;
final byte x;
final byte y;
byte intensity;
public Ripple(byte x, byte y, byte intensity) {
this.x = x;
this.y = y;
this.intensity = intensity;
new Thread(this).start();
}
@Override
public void run() {
Colour colour;
boolean drawnSomething = true;
while (drawnSomething) {
if (intensity >= 10) {
colour = Colour.Red;
} else if (intensity >= 5) {
colour = Colour.Yellow;
} else {
colour = Colour.Green;
}
drawnSomething = false;
for (double i = 0; i < 360; i++) {
int x = x + (int) Math.round(currentWidth * Math.cos(i));
int y = y + (int) Math.round(currentWidth * Math.sin(i));
if (x >= 0 && x <= 8 && y >= 0 && y <= 19) {
// setLED(x, y, colour);
drawnSomething = true;
}
}
currentWidth += 0.1 + (currentWidth / 10);
try {
Thread.sleep(1000/60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
void CirclePulsate (int x, int y)
{
for ( int i= 0 ; i<= 15 ; i++ ) {
matrix. Clear ( ) ;
matrix. DrawEllipse ( AS1107:: Maxx / x , y ,i,i ) ;
matrix. Update ( ) ;
delay ( d ) ;
buttonListenerList.add(ButtonListener.class, l);
}
public void addLEDChangeListener(ButtonListener l) {
ledListenerList.add(ButtonListener.class, l);
}
public void setLED(byte x, byte y, Colour colour) {
leds[x][y] = colour;
}
private void calculateRawLeds() {
for (int y = 0; y <= 18; y++) {
for (int x = 0; x <= 6; x++) {
if ((y % 2) == 0) {
if (leds[x][y] == Colour.Green
|| leds[x][y] == Colour.Yellow) {
rawLeds[(int) Math.floor(y / 4)] = (byte) (rawLeds[(int) Math
.floor(y / 4)] | (1 << (7 - x)));
}
} else {
if (leds[x][y] == Colour.Red || leds[x][y] == Colour.Yellow) {
rawLeds[(int) Math.floor(y / 4)] = (byte) (rawLeds[(int) Math
.floor(y / 4)] | (1 << (7 - x)));
}
}
}
}
int x = 7;
// TODO: Complete and test, or rethink the following?
for (int startY = 0; startY <= 4; startY++) {
for (int y = 0; y <= 3; y++) {
if (leds[x][startY + (y * 4)] == Colour.Red || leds[x][startY + (y * 4)] == Colour.Yellow) {
rawLeds[(5 * 8) + startY] = (byte) (rawLeds[(int) Math
.floor(y / 4)] | (1 << (7 - x)));
}
if (leds[x][y] == Colour.Green || leds[x][y] == Colour.Yellow) {
rawLeds[(int) Math.floor(y / 4)] = (byte) (rawLeds[(int) Math
.floor(y / 4)] | (1 << (7 - x)));
}
}
}
}
public void clearLEDGrid() {
Arrays.fill(leds, Boolean.FALSE);
}
public void setLEDGridIntensity(byte grid, byte intensity) {
ledGridIntensities[grid] = intensity;
}
public void setLEDIntensities(byte intensity) {
Arrays.fill(ledGridIntensities, intensity);
}
public void run() {
}
}