Files
J1B2-Game-controller/web/game.js
2023-11-25 19:41:53 +01:00

194 lines
5.4 KiB
JavaScript

let port;
let reader;
const decoder = new TextDecoder("utf-8");
let readibleoutput = 0;
let booleanArray = [];
// Request a port and open a connection.
async function connect() {
//vraag aan de browser om een serial port te selecteren
port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 });
reader = port.readable.getReader();
console.log("Port is open!");
readLoop()
}
// Read data from serial port
async function readLoop() {
let buffer = [];
// loop until reader.cancel() is called
while (true) {
// Wait for data
const { value, done } = await reader.read();
for (let iByte = 0; iByte < value.length; iByte++) {
let singleByte = value[iByte];
//functie maken er van met boolean!!!
if (singleByte != 10) {
buffer.push(singleByte);
}
else {
let sensorString = decoder.decode(new Uint8Array(buffer));
//Put all data in a json Array and parse it to a boolean array
try {
// Parse the incoming data as JSON
// "replace(/'/g, '\"')" replaces all single quotes with double quotes with use of regular expressions. So we can use Jsonparse to parse it into a booleanArray
let SerialArray = JSON.parse(sensorString.replace(/'/g, '"'));
// Ensure SerialArray is an array
if (Array.isArray(SerialArray)) {
//Convert the array of strings to a boolean array
//When a bit is 1 it becomes true, when a bit is 0 it becomes false
booleanArray = SerialArray.map(bit => bit == '1');
console.log(booleanArray);
} else {
console.error("Dit is geen Array");
}
} catch (e) {
console.log("json niet geparserd");
}
Movementloop()
buffer = [];
}
if (done) {
console.log('[readLoop] DONE', done);
reader.releaseLock();
break;
}
}
}
}
// Sluit de poort
async function disconnect() {
await reader.cancel();
await port.close();
console.log("Port is closed!");
}
//--------------------Game--------------------
// Game variables
const width = 1000;
const height = 600;
// Player variables
const playerSize = 10;
let radius = playerSize / 2;
let playerPosX = 500
let playerPosY = 300;
let playerSpeed = 3;
// let squareX = 100;
// let squareY = 100;
// const squareSize = 100;
let shotSpeed = 5;
let projectile;
let projSize = 5;
let shot;
// the function setup() is called once when the page is loaded
function setup() {
// create a canvas element and append it to the body
createCanvas(width, height);
frameRate(120);
// disable the outline of shapes
Movementloop()
noStroke();
}
function keyPressed() {
if (keyIsDown(LEFT_ARROW) && playerPosX > 0 + radius) {
playerPosX -= playerSpeed;
}
if (keyIsDown(RIGHT_ARROW) && playerPosX < width - radius) {
playerPosX += playerSpeed;
}
if (keyIsDown(UP_ARROW) && playerPosY > 0 + radius) {
playerPosY -= playerSpeed;
}
if (keyIsDown(DOWN_ARROW) && playerPosY < height - radius) {
playerPosY += playerSpeed;
}
}
async function Movementloop() {
if (booleanArray[1]) {
playerPosX += playerSpeed;
}
if (booleanArray[3]) {
playerPosX -= playerSpeed;
}
if (booleanArray[2]) {
playerPosY += playerSpeed;
}
if (booleanArray[0]) {
playerPosY -= playerSpeed;
}
}
// function object_collision() {
// var squareCenterX = squareX + squareSize / 2;
// var squareCenterY = squareY + squareSize / 2;
// var distance = dist(playerPosX, playerPosY, squareCenterX, squareCenterY);
// if (distance < squareSize / 2 + radius) {
// squareX = random(0, width - squareSize);
// squareY = random(0, height - squareSize);
// }
// }
function shoot(directionX, directionY) {
shot = true;
if (!projectile) {
// Set the initial position of the projectile to the player's position
projectile = createVector(500, 100);
Xbuffer = directionX;
Ybuffer = directionY;
}
// Draw the small circle (projectile)
fill(255, 0, 0);
circle(projectile.x, projectile.y, projSize);
// Move the projectile towards the movable circle
let target = createVector(Xbuffer, Ybuffer);
let direction = target.copy().sub(projectile);
direction.normalize();
direction.mult(shotSpeed);
projectile.add(direction);
if (projectile.dist(target) <= radius) {
shot = false;
projectile = null;
}
}
// the function draw() is called every frame
function draw() {
keyPressed();
// draw background
background(0, 0, 0, 100);
// draw player
fill(0, 255, 255)
circle(constrain(playerPosX, 0 + radius, width - radius), constrain(playerPosY, 0 + radius, height - radius), playerSize);
// draw boss
fill(255,165,0)
circle(500, 100, 50);
// square(squareX,squareY,squareSize);
// object_collision();
if (shot == false) {
shoot(playerPosX, playerPosY);
} else {
shot = false;
}
}