xxxxxxxxxx
108
let facemesh;
let video;
let predictions = [];
let isModelReady;
let keypoints = [];
let playField;
let snake;
let food;
let controller;
let hud;
let h = 9;
let w = 9;
let soundPop;
let soundMusic;
function preload() {
soundFormats('mp3', 'ogg');
soundPop = loadSound('/pop.mp3');
/* == Muic credits:
* https://freesound.org/people/frankum/sounds/384468/
* == == == == == ==*/
soundMusic = loadSound('/backGroundMusic.mp3');
}
function setup() {
isModelReady = false;
let cnv = createCanvas(640, 480);
let x = (windowWidth - width) / 2;
let y = (windowHeight - height) / 2;
cnv.position(x, y);
video = createCapture(VIDEO);
video.size(width, height);
facemesh = ml5.facemesh(video, modelReady);
playField = new PlayField();
facemesh.on("predict", (results) => {
predictions = results;
});
video.hide();
colorMode(RGB, 100);
background(0);
hud = new Hud(x,y);
controller = new Controller();
controller.currentGameLoopTime = 0;
frameRate(controller.gameFrameRate);
}
function coreLoop(){
snake.update();
food.show();
snake.show();
hud.show();
}
function draw() {
background(16);
image(video, 0, 0, width, height);
colorMode(RGB, 100);
fill(12, 12, 12, 70);
rect(0,0, width, height);
getPoints();
if(isModelReady){
coreLoop();
}
}
function keyPressed() {
if (keyCode === LEFT_ARROW) {
controller.isKeyBoard = true;
snake.setDir(0, -1);
} else if (keyCode === RIGHT_ARROW) {
controller.isKeyBoard = true;
snake.setDir(0, 1);
} else if (keyCode === DOWN_ARROW) {
controller.isKeyBoard = true;
snake.setDir(1, 0);
} else if (keyCode === UP_ARROW) {
controller.isKeyBoard = true;
snake.setDir(-1, 0);
} else if (key === ' ') {
if(controller.gameFrameRate == 0){
controller.gameFrameRate = 24;
soundMusic.loop();
} else{
controller.gameFrameRate = 0;
soundMusic.pause();
}
frameRate(controller.gameFrameRate);
}
}
function modelReady() {
//console.log("Model ready!");
isModelReady = true;
snake = new Snake();
food = new Food();
soundMusic.loop();
}
function getPoints() {
for (let i = 0; i < predictions.length; i += 1) {
keypoints = predictions[i].scaledMesh;
playField.update();
playField.display();
}
}