mirror of https://github.com/espruino/BangleApps
109 lines
3.3 KiB
JavaScript
109 lines
3.3 KiB
JavaScript
|
// The DVD logo
|
||
|
var dvdLogo = require("heatshrink").decompress(atob("3dTwIFC/4AG/ALCgYJEwAcDj4XHBgYJF4AJCg4WH8AMCn4KFF4YWH/wLCh4KJIpA7CgIKG+BnHOg1/BYxGCCw4LDHQ/8IpQ6CQBBRBIpBpDBY4uCKA6jDUQy8FTIn3EQYIBGYSQDBYTVF/x0DKITMGFwh4D96jDKILuDDoSvDEAn9AQIeDB4glCwA5ELwW/FIRNB/x2BVQSvDHIgIB+ZvCNwWPOwZ7DAYKEFDwJoBAYPhHgYeC8ADCP4QEB85YCEQRFELoIqBBA5oFL4SMEwBFEBAWfDwQFB4K1EJoPwIooIB+InCHIQ8EOgYIHA4PAIQP8IogqCBYQIFw4TBAoRICIoQiB/AaDBAfwJAOAUwTrEFQZFHAQPwCYPwCIIxBWIZFIwICBSIIKBIo4IHFYXgSwRFKBARFCFYLlC8DDCRZTaDOIPPHgngaIhFFBoQfB/YhCIojRDBAg/B/gaCGYRFEHgaUED4IEBD4JBDIAIDBLgQEBIoYbC4AMCHAQcBG4IbCAgJFDCQRlBJIIzCIogJCBAgWCD4IICHARFDCwQIEIAY7DGYRmBEAIWCBAJOCNwYfBPAQSBEIWDMog8DAAQfBUYYzEAATkCBAq+CGgQzEYQgIGD4Q3CGYJnDKYhFGCwLtEVAjQDIow2BawY8HNQQIFCwR0CfYgWFBAoWDEAJ5CIogWCIooHCEAR5CJQQWFIoYPCOgg0BHgiJBIooHDUYaCCIoRLCABl/CB4AFg5MFACBNGAB8fQYYARgL/CACc/CysHLisAuAWVhgWVgL/BCyn/WyX/AAx4Mv4VHAARLJFZAAEbA5VBABwWFh4WPJAs/CZoODOA3A/8H/k//BNBK4N/AQQPB/wWF/kf4P/w4jBg4+BKIMAgYuC/BEF4P4n/w//gEIPwCYJYBCAYLBT4f4n0P/0f/k+g/+FoPwn4uDHQYACwZFB4ZHB8A2BKAQYBCAXwW4nwuF//BCBFgJ3CwZ/BCAR1BUIkEJYJHCFgINB+F/GgIAC4BLENgXhI4J5B8BfCI4KMEFwY0BKoK6BvwSDYoIoDCAIuE8APBXQMPwJaC/kPDALqEGgf8NAK6NAoLpDTYS6CCAKCCAoK+BCwhYBMYQiBXQOALQQ2BAQQWFXggAMGoIAECx6gBAArVEABJDDAAhQDABCTBABIYJ4AVKAAbCDChYA="));
|
||
|
|
||
|
// Screen width
|
||
|
const WIDTH = g.getWidth();
|
||
|
// Screen height
|
||
|
const HEIGHT = g.getHeight();
|
||
|
// dvd logo image width
|
||
|
const IMG_WIDTH = 94;
|
||
|
/// dvd logo image height
|
||
|
const IMG_HEIGHT = 42;
|
||
|
|
||
|
// Assign a random X and Y initial speed between 1.5 and 1
|
||
|
var speedX = 1.5 - Math.random() / 2;
|
||
|
var speedY = 1.5 - Math.random() / 2;
|
||
|
// The logo X and Y position
|
||
|
var posX = 0;
|
||
|
var posY = 0;
|
||
|
|
||
|
// The current logo color
|
||
|
var currentColor = "#ff00ff";
|
||
|
|
||
|
// Get a random value between "ff" and "00"
|
||
|
function getHexColor() {
|
||
|
if (Math.round(Math.random())) {
|
||
|
return "ff";
|
||
|
} else {
|
||
|
return "00";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Get a new 8 bit color
|
||
|
function getNewColor() {
|
||
|
return "#" + getHexColor() + getHexColor() + getHexColor();
|
||
|
}
|
||
|
|
||
|
// Change the dvd logo color on impact
|
||
|
// Only allow colors different from the current one
|
||
|
// and different from the bg
|
||
|
function changeColor() {
|
||
|
var newColor = getNewColor();
|
||
|
while (newColor == currentColor || newColor == "#000000") {
|
||
|
newColor = getNewColor();
|
||
|
}
|
||
|
currentColor = newColor;
|
||
|
g.setColor(newColor);
|
||
|
}
|
||
|
|
||
|
// Draw the logo
|
||
|
function draw() {
|
||
|
// Move it
|
||
|
posX += speedX;
|
||
|
posY += speedY;
|
||
|
|
||
|
var collisions = 0;
|
||
|
// Collision detection
|
||
|
if (posX <= 0) {
|
||
|
speedX = -speedX;
|
||
|
posX = 0;
|
||
|
collisions++;
|
||
|
}
|
||
|
if (posY <= 0) {
|
||
|
speedY = -speedY;
|
||
|
posY = 0;
|
||
|
collisions++;
|
||
|
}
|
||
|
if (posX >= (WIDTH - IMG_WIDTH)) {
|
||
|
speedX = -speedX;
|
||
|
posX = WIDTH - IMG_WIDTH;
|
||
|
collisions++;
|
||
|
}
|
||
|
if (posY >= (HEIGHT - IMG_HEIGHT)) {
|
||
|
speedY = -speedY;
|
||
|
posY = HEIGHT - IMG_HEIGHT;
|
||
|
collisions++;
|
||
|
}
|
||
|
|
||
|
// If we detected 2 collisions, we touched an angle, HURRAY!
|
||
|
if (collisions > 1) {
|
||
|
Bangle.buzz();
|
||
|
}
|
||
|
|
||
|
// Change logo color on collision
|
||
|
if (collisions > 0) {
|
||
|
changeColor();
|
||
|
}
|
||
|
|
||
|
// Actually draw the logo
|
||
|
g.clear();
|
||
|
g.drawImage(dvdLogo, posX, posY, {
|
||
|
scale: 0.5
|
||
|
});
|
||
|
setTimeout(function () {
|
||
|
draw();
|
||
|
}, 15);
|
||
|
}
|
||
|
|
||
|
// Set the background to black
|
||
|
g.setBgColor(0, 0, 0);
|
||
|
// Start from purple
|
||
|
g.setColor(currentColor);
|
||
|
// Clear the screen
|
||
|
g.clear();
|
||
|
// Start drawing
|
||
|
draw();
|
||
|
|
||
|
// Exit on button press
|
||
|
setWatch(Bangle.showLauncher, BTN, { repeat: false, edge: "falling" });
|