aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--PunchingBag/src/PunchingBag.java127
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)));
}