function Scratch3MotionBlocks(runtime) {
    /**
     * The runtime instantiating this block package.
     * @type {Runtime}
     */
    this.runtime = runtime;
}

/**
 * Retrieve the block primitives implemented by this package.
 * @return {Object.<string, Function>} Mapping of opcode to Function.
 */
Scratch3MotionBlocks.prototype.getPrimitives = function() {
    return {
        'motion_gotoxy': this.goToXY,
        'motion_turnright': this.turnRight
    };
};

Scratch3MotionBlocks.prototype.goToXY = function (args, util) {
    util.target.setXY(args.X, args.Y);
};

Scratch3MotionBlocks.prototype.turnRight = function (args, util) {
    if (args.DEGREES !== args.DEGREES) {
        throw "Bad degrees" + args.DEGREES;
    }
    util.target.setDirection(args.DEGREES + util.target.direction);
};

module.exports = Scratch3MotionBlocks;

var MathUtil = require('../util/math-util');

function Scratch3MotionBlocks(runtime) {
    /**
     * The runtime instantiating this block package.
     * @type {Runtime}
     */
    this.runtime = runtime;
}

/**
 * Retrieve the block primitives implemented by this package.
 * @return {Object.<string, Function>} Mapping of opcode to Function.
 */
Scratch3MotionBlocks.prototype.getPrimitives = function() {
    return {
        'motion_movesteps': this.moveSteps,
        'motion_gotoxy': this.goToXY,
        'motion_turnright': this.turnRight,
        'motion_turnleft': this.turnLeft,
        'motion_pointindirection': this.pointInDirection
    };
};

Scratch3MotionBlocks.prototype.moveSteps = function (args, util) {
    var radians = MathUtil.degToRad(util.target.direction);
    var dx = args.STEPS * Math.cos(radians);
    var dy = args.STEPS * Math.sin(radians);
    util.target.setXY(util.target.x + dx, util.target.y + dy);
};

Scratch3MotionBlocks.prototype.goToXY = function (args, util) {
    util.target.setXY(args.X, args.Y);
};

Scratch3MotionBlocks.prototype.turnRight = function (args, util) {
    util.target.setDirection(util.target.direction + args.DEGREES);
};

Scratch3MotionBlocks.prototype.turnLeft = function (args, util) {
    util.target.setDirection(util.target.direction - args.DEGREES);
};

Scratch3MotionBlocks.prototype.pointInDirection = function (args, util) {
    util.target.setDirection(args.DIRECTION);
};

module.exports = Scratch3MotionBlocks;

Implement move steps, turn right, turn left, point in direction
Implement move steps, turn right, turn left, point in direction
