diff options
author | Christopher Baines <cbaines8@gmail.com> | 2011-09-02 14:21:24 +0100 |
---|---|---|
committer | Christopher Baines <cbaines8@gmail.com> | 2011-09-02 14:21:24 +0100 |
commit | 7085d4fc9fa6510fb7d5d11d0567edb576193d04 (patch) | |
tree | c7db5bfdf22ddfc525803f1e61006b2449541e99 | |
parent | 043763756108f1bad553d260f4b5b2431185dac6 (diff) | |
parent | d32662fe2f461a38cc0e99951dfe9f82316a936c (diff) | |
download | punchingbag-7085d4fc9fa6510fb7d5d11d0567edb576193d04.tar punchingbag-7085d4fc9fa6510fb7d5d11d0567edb576193d04.tar.gz |
Merged Adam's changes for the CircleExpand with my new effect class.
The CircleExpand class need to be checked.
Merge branch 'master' of gitorious.org:punchingbag/punchingbag
Conflicts:
PunchingBag/src/PunchingBag.java
-rw-r--r-- | PunchingBag/src/PunchingBag.java | 127 |
1 files changed, 76 insertions, 51 deletions
diff --git a/PunchingBag/src/PunchingBag.java b/PunchingBag/src/PunchingBag.java index b179e2f..f141c26 100644 --- a/PunchingBag/src/PunchingBag.java +++ b/PunchingBag/src/PunchingBag.java @@ -2,7 +2,7 @@ import javax.swing.event.EventListenerList; import java.util.Arrays; public class PunchingBag implements Runnable { - private byte[] rawLeds = new byte[6*8]; + 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]; @@ -27,106 +27,130 @@ public class PunchingBag implements Runnable { public void addButtonListener(ButtonListener l) { buttonListenerList.add(ButtonListener.class, l); } - + public void addLEDChangeListener(LEDListener l) { ledListenerList.add(LEDListener.class, l); } - - public void setLED(byte x, byte y, Colour colour) { - leds[x][y] = colour; + + public void setLED(int i, int j, Colour colour) { + leds[i][j] = colour; } - public void drawRipple(byte x, byte y, byte intensity) { - new Ripple(x, y, intensity); + void CircleExpand(int x, int y, int delay, Colour colour) { + for (int i = 0; i <= 15; i++) { + DrawEllipse(x, y, i, i, colour); + + } } - + class Effect implements Runnable { boolean stop = false; int refreshRate = 60; // Times per second to refresh - + public void stop() { stop = true; } - + public void run() { while (!stop) { draw(); try { - Thread.sleep(1000/60); + Thread.sleep(1000 / 60); } catch (InterruptedException e) { e.printStackTrace(); } } } - + private void draw() { - + } } - class Ripple extends Effect { + class CircleExpand extends Effect { double currentWidth; final byte x; final byte y; byte intensity; + boolean drawnSomething = true; - public Ripple(byte x, byte y, byte intensity) { + public CircleExpand(byte x, byte y, byte intensity) { this.x = x; this.y = y; this.intensity = intensity; new Thread(this).start(); } - @Override - public void run() { + public void draw() { Colour colour; - boolean drawnSomething = true; - while (drawnSomething) { + if (intensity >= 10) { + colour = Colour.Red; + } else if (intensity >= 5) { + colour = Colour.Yellow; + } else { + colour = Colour.Green; + } - if (intensity >= 10) { - colour = Colour.Red; - } else if (intensity >= 5) { - colour = Colour.Yellow; - } else { - colour = Colour.Green; - } + drawnSomething = false; - 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)); - 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; + } - if (x >= 0 && x <= 8 && y >= 0 && y <= 19) { - setLED(x, y, colour); - drawnSomething = true; - } + } - } + if (!drawnSomething) + stop = true; - currentWidth += 0.1 + (currentWidth / 10); - try { - Thread.sleep(1000/60); - } catch (InterruptedException e) { - e.printStackTrace(); - } + currentWidth += 0.1 + (currentWidth / 10); + try { + Thread.sleep(1000 / 60); + } catch (InterruptedException e) { + e.printStackTrace(); } + } } + public void DrawEllipse(int x, int y, int radx, int rady, Colour colour) { + if (radx == 0 && rady == 0) { + setLED(x, y, colour); + return; + } + int dx = 0, dy = rady; /* first quadrant from top left to bottom right */ + int a2 = radx * radx, b2 = rady * rady; + int err = b2 - (2 * rady - 1) * a2, e2; /* error value in the first step */ -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 ) ;*/ -} -} + do { + setLED(x + dx, y + dy, colour); /* I. Quadrant */ + setLED(x - dx, y + dy, colour); /* II. Quadrant */ + setLED(x - dx, y - dy, colour); /* III. Quadrant */ + setLED(x + dx, y - dy, colour); /* IV. Quadrant */ + + e2 = 2 * err; + if (e2 < (2 * dx + 1) * b2) { + dx++; + err += (2 * dx + 1) * b2; + } + if (e2 > -(2 * dy - 1) * a2) { + dy--; + err -= (2 * dy - 1) * a2; + } + } while (dy >= 0); + + while (dx++ < radx) { /* correction for flat ellipses (b=1) */ + setLED(x + dx, y, colour); + setLED(x - dx, y, colour); + } + } private void calculateRawLeds() { for (int y = 0; y <= 18; y++) { @@ -149,7 +173,8 @@ delay ( d ) ;*/ // 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) { + 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))); } |