Code viewer for World: PongLand

// Cloned by Michael Ryan on 30 Sep 2019 from World "One Cube World (P5)" by Starter user 
// Please leave this clone trail here.
 
 
const PADDLE_WIDTH  = 25;
const PADDLE_HEIGHT = 175;
const PADDLE_DEPTH  = 1; 

const BALL_WIDTH    = 20;
const BALL_HEIGHT   = 20;

const BOUNCE_DIRECTIONS = [-3, -2, 0, 2, 3];

const SCORE_X_POSITION = (ABWorld.fullwidth() / 2) - 40;
const SCORE_Y_POSITION = 50;

var LeftPaddleXPosition = 200;
var LeftPaddleYPosition = (ABWorld.fullheight() - PADDLE_HEIGHT) / 2;

var RightPaddleXPosition = ABWorld.fullwidth() - PADDLE_WIDTH - 200;
var RightPaddleYPosition = (ABWorld.fullheight() - PADDLE_HEIGHT) / 2;

var BallXPosition = ABWorld.fullwidth() / 2;
var BallYPosition = ABWorld.fullheight() / 2;

var BallYDirection = 0;

var BallSpeed = 5;

var PlayerOneScore = 0;
var PlayerTwoScore = 0;

function setup()
{
  // Note I removed WEBGL to make this 2D
  createCanvas (ABWorld.fullwidth(), ABWorld.fullheight());
}

function resetBall() 
{
    BallXPosition = ABWorld.fullwidth() / 2;
    BallYPosition = ABWorld.fullheight() / 2;
    BallSpeed = 5;
}

function checkForHits() 
{
    // Left Paddle
    if (
        BallXPosition <= (LeftPaddleXPosition + PADDLE_WIDTH) &&
        BallYPosition <= (LeftPaddleYPosition + PADDLE_HEIGHT) &&
        BallYPosition >= LeftPaddleYPosition) {
            BallSpeed *= -1.1;
            
            // Random Angle
            BallYDirection = BOUNCE_DIRECTIONS[Math.floor(Math.random()*BOUNCE_DIRECTIONS.length)];
        }
    // Right Paddle
    if (
        BallXPosition + BALL_WIDTH >= RightPaddleXPosition &&
        BallYPosition <= (RightPaddleYPosition + PADDLE_HEIGHT) &&
        BallYPosition >= RightPaddleYPosition) {
            BallSpeed *= -1.1;
            
            // Random Angle
            BallYDirection = BOUNCE_DIRECTIONS[Math.floor(Math.random()*BOUNCE_DIRECTIONS.length)];
        }
    
    // Left Wall
    if (BallXPosition <= 0) { 
        PlayerTwoScore++;
        resetBall();
    }
    
    // Right Wall
    if (BallXPosition >= ABWorld.fullwidth()) { 
        PlayerOneScore++;
        resetBall();
    }
    
    // Top Wall
    if (BallYPosition <= 0) {
        BallYDirection = -1;
    }
    
    // Bottom Wall
    if (BallYPosition + BALL_HEIGHT >= ABWorld.fullheight()) 
    {
        BallYDirection = 1;
    }
}

function getUserInput() 
{
    // W - PlayerOne Up
    if(keyIsDown(87) && LeftPaddleYPosition >= 0)
    {
        LeftPaddleYPosition -= 10;
    }
    
    // S - PlayerOne Down
    if(keyIsDown(83) && (LeftPaddleYPosition + PADDLE_HEIGHT) <= ABWorld.fullheight() )
    {
        LeftPaddleYPosition += 10;
    }
    
    // UpArrow - PlayerTwo Up
    if(keyIsDown(38) && RightPaddleYPosition >= 0)
    {
        RightPaddleYPosition -= 10;
    }
    
        // S - PlayerTwo Down
    if(keyIsDown(40) && (RightPaddleYPosition + PADDLE_HEIGHT) <= ABWorld.fullheight())
    {
        RightPaddleYPosition += 10;
    }
}

function draw()
{
    background("black");
    fill("white");
    
    // Score
    textSize(32);
    text(PlayerOneScore + '\t:\t' + PlayerTwoScore, SCORE_X_POSITION, SCORE_Y_POSITION);

    // Paddle 1    
    rect(LeftPaddleXPosition, LeftPaddleYPosition, PADDLE_WIDTH, PADDLE_HEIGHT);
    
    // Paddle 2
    rect(RightPaddleXPosition, RightPaddleYPosition, PADDLE_WIDTH, PADDLE_HEIGHT);
    
    // Check for hit
    checkForHits();
    
    // Get User Input
    getUserInput();
    
    // Draw Ball
    rect(BallXPosition, BallYPosition, BALL_WIDTH, BALL_HEIGHT);
    
    // Move Ball
    BallXPosition -= BallSpeed;
    BallYPosition -= BallYDirection;
}