in functions/CDDSenseHatJava/src/main/java/com/amazonaws/greengrass/cddsensehat/leds/animation/Fire.java [32:107]
public SenseHatLEDImage nextImage() {
boolean[] generatedLine = new boolean[8];
SenseHatLED[][] temp = new SenseHatLED[8][8];
for (int y = 0; y < 8; y++) {
for (int x = 0; x < 8; x++) {
temp[y][x] = black;
}
}
if (senseHatLEDs == null) {
senseHatLEDs = new SenseHatLED[8][8];
for (int y = 0; y < 8; y++) {
for (int x = 0; x < 8; x++) {
senseHatLEDs[y][x] = black;
}
}
}
for (int x = 0; x < 8; x++) {
generatedLine[x] = random.nextBoolean();
}
// Evaluate the inside 6x7 grid
for (int y = 0; y < 7; y++) {
for (int x = 1; x < 7; x++) {
evaluateCell(temp, y, x);
}
}
int count;
// Evaluate the bottom line
for (int x = 1; x < 7; x++) {
count = ((senseHatLEDs[7][x - 1] == red) ? 1 : 0) +
((senseHatLEDs[7][x + 1] == red) ? 1 : 0) +
(generatedLine[x - 1] ? 1 : 0) +
(generatedLine[x] ? 1 : 0) +
(generatedLine[x + 1] ? 1 : 0);
setIfCountHighEnough(temp, x, 7, count);
}
// Bottom line left pixel
count = (generatedLine[0] ? 1 : 0) +
(generatedLine[1] ? 1 : 0);
setIfCountHighEnough(temp, 0, 7, count);
// Bottom line right pixel
count = (generatedLine[6] ? 1 : 0) +
(generatedLine[7] ? 1 : 0);
setIfCountHighEnough(temp, 7, 7, count);
// Evaluate the left side
for (int y = 0; y < 7; y++) {
count = ((senseHatLEDs[y + 1][0] == red) ? 1 : 0) +
((senseHatLEDs[y + 1][1] == red) ? 1 : 0);
setIfCountHighEnough(temp, 0, y, count);
}
// Evaluate the right side
for (int y = 0; y < 7; y++) {
count = ((senseHatLEDs[y + 1][6] == red) ? 1 : 0) +
((senseHatLEDs[y + 1][7] == red) ? 1 : 0);
setIfCountHighEnough(temp, 7, y, count);
}
senseHatLEDs = temp;
SenseHatLEDImage image = new SenseHatLEDImage(senseHatLEDs);
image.setSenseHatLEDOrientation(SenseHatLEDOrientation.NORMAL);
return image;
}