package com.amazonaws.greengrass.cddsensehat.leds.animation; import com.amazonaws.greengrass.cddsensehat.leds.SenseHatLED; import com.amazonaws.greengrass.cddsensehat.leds.SenseHatLEDImage; import com.amazonaws.greengrass.cddsensehat.leds.SenseHatLEDOrientation; import com.amazonaws.greengrass.cddsensehat.leds.SenseHatLEDPartialImage; import com.amazonaws.greengrass.cddsensehat.leds.animation.interfaces.Animation; import com.amazonaws.greengrass.cddsensehat.leds.characters.Characters; import javax.inject.Inject; import java.util.Random; public class GlitchNumber implements Animation { private static final int GLITCH_RANDOM_LIMIT = 250; private final Random random = new Random(); @Inject Characters characters; @Inject public GlitchNumber() { } private int versionNumber = 0; public int getVersionNumber() { return versionNumber; } public void setVersionNumber(int versionNumber) { this.versionNumber = versionNumber; } @Override public long getPeriod() { return 10; } @Override public void reset() { // Do nothing } @Override public SenseHatLEDImage nextImage() { SenseHatLEDPartialImage v = characters.get('v').getPartialImage(); SenseHatLEDImage temp; SenseHatLEDPartialImage onesNumber = characters.get((char) ('0' + versionNumber)).getPartialImage(); temp = new SenseHatLEDImage(); temp = v.merge(0, 0, temp); temp = onesNumber.merge(4, 0, temp); temp.setSenseHatLEDOrientation(SenseHatLEDOrientation.NORMAL); SenseHatLED[] tempLEDs = temp.getSenseHatLEDs(); for (int loop = 0; loop < 8; loop++) { int glitch = random.nextInt(GLITCH_RANDOM_LIMIT); if (glitch == 0) { continue; } if (glitch == 1) { // Shift left 1 for (int innerLoop = 1; innerLoop < 8; innerLoop++) { tempLEDs[loop * 8 + innerLoop - 1] = tempLEDs[loop * 8 + innerLoop]; } } if (glitch == 2) { // Shift left 2 for (int innerLoop = 2; innerLoop < 8; innerLoop++) { tempLEDs[loop * 8 + innerLoop - 2] = tempLEDs[loop * 8 + innerLoop]; } } if (glitch == 3) { // Shift right 1 for (int innerLoop = 6; innerLoop > 0; innerLoop--) { tempLEDs[loop * 8 + innerLoop + 1] = tempLEDs[loop * 8 + innerLoop]; } } if (glitch == 4) { // Shift right 2 for (int innerLoop = 5; innerLoop > 0; innerLoop--) { tempLEDs[loop * 8 + innerLoop + 2] = tempLEDs[loop * 8 + innerLoop]; } } } temp = new SenseHatLEDImage(tempLEDs); temp.setSenseHatLEDOrientation(SenseHatLEDOrientation.NORMAL); return temp; } }