function turnTo(angle) { const epsilon = 0.01; let delta = 0; do { delta = angle - getHeading(); if (Math.abs(delta) > epsilon) { let v = Math.min(1, Math.abs(delta)); if (delta > 0) { setLeftPower(v); setRightPower(-v); } else { setLeftPower(-v); setRightPower(v); } } else { setLeftPower(0); setRightPower(0); } } while ( Math.abs(delta) > epsilon || Math.abs(getAngularVelocity()) > epsilon ) } function pixelLocation(tile) { return 32 + (tile * 64); } function face(xTile, yTile) { let dx = pixelLocation(xTile) - getX(); let dy = pixelLocation(yTile) - getY(); let angle = Math.atan2(dy, dx); turnTo(angle); } function magnitude(x, y) { return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); } function forward(distance) { clearCollision(); const startX = getX(); const startY = getY(); const epsilon = 5; let travelled = 0; let delta = 0; let velocity = 0; do { travelled = magnitude(getX() - startX, getY() - startY); delta = distance - travelled; velocity = magnitude(getVelocityX(), getVelocityY()); if (Math.abs(delta) > epsilon) { let v = Math.min(1, Math.abs(delta) / 50); if (delta > 0) { setLeftPower(v); setRightPower(v); } else { setLeftPower(-v); setRightPower(-v); } } else { setLeftPower(0); setRightPower(0); } } while ( !isCollisionDetected() && ( Math.abs(delta) > epsilon || Math.abs(velocity) > 0.1 ) ) setLeftPower(0); setRightPower(0); } function moveTo(xTile, yTile) { face(xTile, yTile); let dx = pixelLocation(xTile) - getX(); let dy = pixelLocation(yTile) - getY(); let distance = magnitude(dx, dy); forward(distance); } function backOff() { const d = 5; const startX = getX(); const startY = getY(); let travelled = 0; do { travelled = magnitude(getX() - startX, getY() - startY); if (travelled < d) { setLeftPower(-0.1); setRightPower(-0.1); } } while (travelled < d) setLeftPower(0); setRightPower(0); } // PARAMETERS: // "X" and "Y" are the coordinates // "D" is the distance the jelly has reached function flood(x, y, d) { let grid = []; for (let y = 0; y < 10; y++) { let row = []; for (let x = 0; x < 10; x++) { row[x] = true; } grid[y] = row; } } moveTo(1, 0); moveTo(1, 1); if (isCollisionDetected()) { backOff(); moveTo(2, 0); } else { moveTo(1, 2); }