gameloop = {
let n = 0;
let {r, x, xSpeed, y, ySpeed} = mutable ball;
function pauseBall(duration){
mutable ball = {r, x, y, xSpeed, ySpeed}
return Promises.delay(duration, mutable ball)
}
while (true) {
x = x + xSpeed;
y = y + ySpeed;
if (x < r) {
xSpeed = Math.abs(xSpeed);
yield pauseBall(0);
}
if (x + r > w) {
xSpeed = -Math.abs(xSpeed);
yield pauseBall(0);
}
if (y < r) {
ySpeed = Math.abs(ySpeed);
yield pauseBall(1000);
}
if (y + r > h) {
ySpeed = -Math.abs(ySpeed);
yield pauseBall(0);
}
let px = mutable paddleX;
if ( x + r > px && x - r < px + paddleLength && y + r > h - scale) {
yield pauseBall(1000);
ySpeed = -ySpeed;
xSpeed = speed * ((x - px) / paddleLength - 0.5) * Math.PI;
}
mutable ball = {r, x, y, xSpeed, ySpeed};
yield true;
}
}