﻿var canvas;
var context;
var birdImage;
var wingImage;
var jumpIterval = 50;
var birdJumping = false;
var birdJumpingId = 0;
var jumpTime = 0;
var birdXOffset = 0;
var birdYOffset = 0;
var jumpXSpeed = 50;
var jumpReboundXSpeed = 20;
var jumpDirection = 1;
var wingAngle = 0;
var birdStartX = 168;
var birdStartY = 21;
var jumpIntialYSpeed = -150;
var jumpYAcceleration = 600;
var jumpIntialAngleSpeed = 3;
var jumpAngleAcceleration = -12;
var jumpCurrentXSpeed = 0;
var birdMinX = 105;
var birdMaxX = 676;
var wingRelativeStartX = 11;
var wingRelativeStartY = 50;
var wingRotateRelativeX = 6;
var wingRotateRelativeY = 5;

function InitializeCanvas() {
    canvas = document.getElementById("BirdCanvas");
    if (canvas == null) {
        return;
    }
    if (!canvas.getContext) {
        return;
    }
    context = canvas.getContext("2d");
    birdImage = new Image();
    birdImage.onload = drawBird;
    birdImage.src = "/Images/DrongOBirdNoWing.png";
    wingImage = new Image();
    wingImage.onload = drawBird;
    wingImage.src = "/Images/DrongOBirdWing.png";
    canvas.onmousemove = canvasMouseMove;
}

function startBirdJump() {
    if (birdJumping) {
        return;
    }
    birdJumping = true;
    birdYOffset = 0;
    wingAngle = 0;
    jumpTime = 0;
    jumpCurrentXSpeed = jumpXSpeed * jumpDirection;
    birdJumpingId = setInterval(birdJump, jumpIterval);
}

function birdJump() {
    jumpTime = jumpTime + jumpIterval / 1000;
    birdYOffset = jumpIntialYSpeed * jumpTime + 0.5 * jumpYAcceleration * (jumpTime * jumpTime);
    wingAngle = (jumpIntialAngleSpeed * jumpTime + 0.5 * jumpAngleAcceleration * (jumpTime * jumpTime)) * jumpDirection;
    birdXOffset += jumpIterval / 1000 * jumpCurrentXSpeed;
    if (birdXOffset + birdStartX > birdMaxX) {
        birdXOffset = birdMaxX - birdStartX;
        jumpCurrentXSpeed = -jumpReboundXSpeed;
    }
    if (birdXOffset + birdStartX < birdMinX) {
        birdXOffset = birdMinX - birdStartX;
        jumpCurrentXSpeed = jumpReboundXSpeed;
    }
    if (birdYOffset >= 0) {
        stopBirdJump();
    }
    drawBird();
}

function stopBirdJump() {
    clearInterval(birdJumpingId);
    birdJumping = false;
    birdJumpingId = 0;
    birdYOffset = 0;
    wingAngle = 0;
    jumpTime = 0;
    jumpCurrentXSpeed = 0;
}

function drawBird() {
    if (wingImage.complete == false || birdImage.complete == false) {
        return false;
    }
    if (context == null) {
        return false;
    }
    context.clearRect(0, 0, canvas.width, canvas.height);
    context.drawImage(birdImage, birdStartX + birdXOffset, birdStartY + birdYOffset);
    context.save();
    context.translate(birdStartX + birdXOffset + wingRelativeStartX + wingRotateRelativeX, birdStartY + birdYOffset + wingRelativeStartY + wingRotateRelativeY);
    context.rotate(wingAngle);
    context.translate(-(birdStartX + birdXOffset + wingRelativeStartX + wingRotateRelativeX), -(birdStartY + birdYOffset + wingRelativeStartY + wingRotateRelativeY));
    context.drawImage(wingImage, birdStartX + birdXOffset + wingRelativeStartX, birdStartY + birdYOffset + wingRelativeStartY);
    context.restore();
    return true;
}

function canvasMouseMove(e) {
    if (birdJumping) {
        return;
    }
    var birdX = birdStartX + birdXOffset;
    var birdY = birdStartY + birdYOffset;
    var x = 0;
    var y = 0;
    if (e.offsetX) {
        x = e.offsetX;
        y = e.offsetY;
    } else if (e.layerX) {
        x = e.layerX;
        y = e.layerY;
    }
    if (x >= birdX && x <= birdX + 20 && y >= birdY + 110 && y <= birdY + 130) {
        jumpDirection = 1;
        startBirdJump();
    }
    if (x >= birdX + 65 && x <= birdX + 85 && y >= birdY + 110 && y <= birdY + 130) {
        jumpDirection = -1;
        startBirdJump();
    }
}
