aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--PunchingBag/src/PunchingBag.java78
1 files changed, 45 insertions, 33 deletions
diff --git a/PunchingBag/src/PunchingBag.java b/PunchingBag/src/PunchingBag.java
index 8ea984e..00a5866 100644
--- a/PunchingBag/src/PunchingBag.java
+++ b/PunchingBag/src/PunchingBag.java
@@ -8,8 +8,10 @@ import java.util.Iterator;
public class PunchingBag implements Runnable {
boolean ledsChanged = false;
+ final public int ledHeight = 20;
+ final public int ledWidth = 9;
private byte[] rawLeds = new byte[6 * 8];
- private Colour[][] leds = new Colour[9][20];
+ private Colour[][] leds = new Colour[ledWidth][ledHeight];
private byte[] ledGridIntensities = new byte[6];
private boolean[][] buttons = new boolean[8][19];
@@ -41,10 +43,16 @@ public class PunchingBag implements Runnable {
ledListenerList.add(LEDListener.class, l);
}
- public void setLED(int i, int j, Colour colour) {
- if (leds[i][j] != colour) {
- ledsChanged = true;
- leds[i][j] = colour;
+ public boolean setLED(int x, int y, Colour colour) {
+ if (x >= 0 && x < ledWidth && y >= 0 && y < ledHeight) {
+ if (leds[x][y] != colour) {
+ leds[x][y] = colour;
+ ledsChanged = true;
+
+ }
+ return true;
+ } else {
+ return false;
}
}
@@ -78,12 +86,13 @@ public class PunchingBag implements Runnable {
}
class CircleExpand extends Effect {
- double currentWidth;
final byte x;
final byte y;
byte intensity;
boolean drawnSomething = true;
+ float currentRadius = 0;
+
public CircleExpand(byte x, byte y, byte intensity) {
this.x = x;
this.y = y;
@@ -102,42 +111,41 @@ public class PunchingBag implements Runnable {
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);
+ currentRadius += 0.1 + (currentRadius / 10);
+ // longhand: currentRadius = currentRadius + 0.1 + (currentRadius /
+ // 10);
- if (!drawnSomething)
+ if (!DrawEllipse(2, 4, (int) currentRadius, (int) currentRadius,
+ colour))
stop = true;
}
}
- public void DrawEllipse(int x, int y, int radx, int rady, Colour colour) {
+ public boolean DrawEllipse(int x, int y, int radx, int rady, Colour colour) {
if (radx == 0 && rady == 0) {
- setLED(x, y, colour);
- return;
+ return setLED(x, y, colour);
}
+ boolean doneSomething = false;
+
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 */
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 */
+ if (setLED(x + dx, y + dy, colour)) {/* I. Quadrant */
+ doneSomething = true;
+ }
+ if (setLED(x - dx, y + dy, colour)) {/* II. Quadrant */
+ doneSomething = true;
+ }
+ if (setLED(x - dx, y - dy, colour)) {/* III. Quadrant */
+ doneSomething = true;
+ }
+ if (setLED(x + dx, y - dy, colour)) {/* IV. Quadrant */
+ doneSomething = true;
+ }
e2 = 2 * err;
if (e2 < (2 * dx + 1) * b2) {
@@ -151,9 +159,14 @@ public class PunchingBag implements Runnable {
} while (dy >= 0);
while (dx++ < radx) { /* correction for flat ellipses (b=1) */
- setLED(x + dx, y, colour);
- setLED(x - dx, y, colour);
+ if (setLED(x + dx, y, colour)) {
+ doneSomething = true;
+ }
+ if (setLED(x - dx, y, colour)) {
+ doneSomething = true;
+ }
}
+ return doneSomething;
}
private void calculateRawLeds() {
@@ -209,8 +222,8 @@ public class PunchingBag implements Runnable {
public void run() {
while (true) {
if (ledsChanged) {
- LEDListeners =
- ledListenerList.
+ //LEDListeners =
+ //ledListenerList.
}
try {
@@ -220,5 +233,4 @@ public class PunchingBag implements Runnable {
}
}
}
-
}