Init
This commit is contained in:
223
src/blocks/motion.js
Normal file
223
src/blocks/motion.js
Normal file
@@ -0,0 +1,223 @@
|
||||
import * as Blockly from "blockly";
|
||||
import * as BlocklyJS from "blockly/javascript";
|
||||
|
||||
Blockly.Blocks["move_steps"] = {
|
||||
init: function () {
|
||||
this.appendValueInput("STEPS").setCheck("Number").appendField("step");
|
||||
this.appendDummyInput().appendField("times");
|
||||
this.setPreviousStatement(true, "default");
|
||||
this.setNextStatement(true, "default");
|
||||
this.setStyle("motion_blocks");
|
||||
},
|
||||
};
|
||||
|
||||
Blockly.Blocks["change_position"] = {
|
||||
init: function () {
|
||||
this.appendValueInput("AMOUNT")
|
||||
.setCheck("Number")
|
||||
.appendField("change")
|
||||
.appendField(
|
||||
new Blockly.FieldDropdown([
|
||||
["x", "x"],
|
||||
["y", "y"],
|
||||
]),
|
||||
"MENU"
|
||||
)
|
||||
.appendField("by");
|
||||
this.setPreviousStatement(true, "default");
|
||||
this.setNextStatement(true, "default");
|
||||
this.setStyle("motion_blocks");
|
||||
},
|
||||
};
|
||||
|
||||
Blockly.Blocks["set_position"] = {
|
||||
init: function () {
|
||||
this.appendValueInput("AMOUNT")
|
||||
.setCheck("Number")
|
||||
.appendField("set")
|
||||
.appendField(
|
||||
new Blockly.FieldDropdown([
|
||||
["x", "x"],
|
||||
["y", "y"],
|
||||
]),
|
||||
"MENU"
|
||||
)
|
||||
.appendField("to");
|
||||
this.setPreviousStatement(true, "default");
|
||||
this.setNextStatement(true, "default");
|
||||
this.setStyle("motion_blocks");
|
||||
},
|
||||
};
|
||||
|
||||
Blockly.Blocks["goto_position"] = {
|
||||
init: function () {
|
||||
this.appendValueInput("x").setCheck("Number").appendField("go to x");
|
||||
this.appendValueInput("y").setCheck("Number").appendField("y");
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, "default");
|
||||
this.setNextStatement(true, "default");
|
||||
this.setStyle("motion_blocks");
|
||||
},
|
||||
};
|
||||
|
||||
Blockly.Blocks["get_position"] = {
|
||||
init: function () {
|
||||
this.appendDummyInput().appendField(
|
||||
new Blockly.FieldDropdown([
|
||||
["x", "x"],
|
||||
["y", "y"],
|
||||
]),
|
||||
"MENU"
|
||||
);
|
||||
this.setOutput(true, "Number");
|
||||
this.setStyle("motion_blocks");
|
||||
},
|
||||
};
|
||||
|
||||
Blockly.Blocks["angle_turn"] = {
|
||||
init: function () {
|
||||
this.appendValueInput("AMOUNT")
|
||||
.setCheck("Number")
|
||||
.appendField("turn")
|
||||
.appendField(
|
||||
new Blockly.FieldDropdown([
|
||||
[
|
||||
{
|
||||
src: "icons/right.svg",
|
||||
height: 30,
|
||||
width: 30,
|
||||
alt: "A circular arrow rotating to the right",
|
||||
},
|
||||
"right",
|
||||
],
|
||||
[
|
||||
{
|
||||
src: "icons/left.svg",
|
||||
height: 30,
|
||||
width: 30,
|
||||
alt: "A circular arrow rotating to the left",
|
||||
},
|
||||
"left",
|
||||
],
|
||||
]),
|
||||
"DIRECTION"
|
||||
);
|
||||
this.appendDummyInput().appendField("degrees");
|
||||
this.setPreviousStatement(true, "default");
|
||||
this.setNextStatement(true, "default");
|
||||
this.setStyle("motion_blocks");
|
||||
},
|
||||
};
|
||||
|
||||
Blockly.Blocks["angle_set"] = {
|
||||
init: function () {
|
||||
this.appendValueInput("AMOUNT")
|
||||
.setCheck("Number")
|
||||
.appendField("set angle to");
|
||||
this.appendDummyInput().appendField("degrees");
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, "default");
|
||||
this.setNextStatement(true, "default");
|
||||
this.setStyle("motion_blocks");
|
||||
},
|
||||
};
|
||||
|
||||
Blockly.Blocks["point_towards"] = {
|
||||
init: function () {
|
||||
this.appendValueInput("x")
|
||||
.setCheck("Number")
|
||||
.appendField("point towards x");
|
||||
this.appendValueInput("y").setCheck("Number").appendField("y");
|
||||
this.setInputsInline(true);
|
||||
this.setPreviousStatement(true, "default");
|
||||
this.setNextStatement(true, "default");
|
||||
this.setStyle("motion_blocks");
|
||||
},
|
||||
};
|
||||
|
||||
Blockly.Blocks["get_angle"] = {
|
||||
init: function () {
|
||||
this.appendDummyInput().appendField("angle");
|
||||
this.setOutput(true, "Number");
|
||||
this.setStyle("motion_blocks");
|
||||
},
|
||||
};
|
||||
|
||||
BlocklyJS.javascriptGenerator.forBlock["move_steps"] = function (
|
||||
block,
|
||||
generator
|
||||
) {
|
||||
const steps =
|
||||
generator.valueToCode(block, "STEPS", BlocklyJS.Order.ATOMIC) || 0;
|
||||
return `moveSteps(${steps});\n`;
|
||||
};
|
||||
|
||||
BlocklyJS.javascriptGenerator.forBlock["change_position"] = function (
|
||||
block,
|
||||
generator
|
||||
) {
|
||||
const amount =
|
||||
generator.valueToCode(block, "AMOUNT", BlocklyJS.Order.ATOMIC) || 0;
|
||||
const menu = block.getFieldValue("MENU");
|
||||
if (menu === "y") return `sprite["${menu}"] -= ${amount};\n`;
|
||||
else return `sprite["${menu}"] += ${amount};\n`;
|
||||
};
|
||||
|
||||
BlocklyJS.javascriptGenerator.forBlock["set_position"] = function (
|
||||
block,
|
||||
generator
|
||||
) {
|
||||
const amount =
|
||||
generator.valueToCode(block, "AMOUNT", BlocklyJS.Order.ATOMIC) || 0;
|
||||
const menu = block.getFieldValue("MENU");
|
||||
if (menu === "y") return `sprite["${menu}"] = -${amount};\n`;
|
||||
else return `sprite["${menu}"] = ${amount};\n`;
|
||||
};
|
||||
|
||||
BlocklyJS.javascriptGenerator.forBlock["goto_position"] = function (
|
||||
block,
|
||||
generator
|
||||
) {
|
||||
const x = generator.valueToCode(block, "x", BlocklyJS.Order.ATOMIC) || 0;
|
||||
const y = generator.valueToCode(block, "y", BlocklyJS.Order.ATOMIC) || 0;
|
||||
return `sprite.x = ${x};\nsprite.y = -${y};\n`;
|
||||
};
|
||||
|
||||
BlocklyJS.javascriptGenerator.forBlock["point_towards"] = function (
|
||||
block,
|
||||
generator
|
||||
) {
|
||||
const x = generator.valueToCode(block, "x", BlocklyJS.Order.ATOMIC) || 0;
|
||||
const y = generator.valueToCode(block, "y", BlocklyJS.Order.ATOMIC) || 0;
|
||||
return `pointsTowards(${x}, ${y});\n`;
|
||||
};
|
||||
|
||||
BlocklyJS.javascriptGenerator.forBlock["get_position"] = function (block) {
|
||||
const menu = block.getFieldValue("MENU");
|
||||
return [`sprite["${menu}"]`, BlocklyJS.Order.NONE];
|
||||
};
|
||||
|
||||
BlocklyJS.javascriptGenerator.forBlock["angle_turn"] = function (
|
||||
block,
|
||||
generator
|
||||
) {
|
||||
const direction = block.getFieldValue("DIRECTION");
|
||||
let amount =
|
||||
generator.valueToCode(block, "AMOUNT", BlocklyJS.Order.ATOMIC) || 0;
|
||||
if (direction === "left") amount = `-(${amount})`;
|
||||
return `setAngle(${amount}, true);\n`;
|
||||
};
|
||||
|
||||
BlocklyJS.javascriptGenerator.forBlock["angle_set"] = function (
|
||||
block,
|
||||
generator
|
||||
) {
|
||||
const amount =
|
||||
generator.valueToCode(block, "AMOUNT", BlocklyJS.Order.ATOMIC) || 0;
|
||||
return `setAngle(${amount}, false);\n`;
|
||||
};
|
||||
|
||||
BlocklyJS.javascriptGenerator.forBlock["get_angle"] = () => [
|
||||
"sprite.angle",
|
||||
BlocklyJS.Order.NONE,
|
||||
];
|
||||
Reference in New Issue
Block a user