116 lines
3.6 KiB
JavaScript
116 lines
3.6 KiB
JavaScript
import * as Blockly from "blockly";
|
|
import * as BlocklyJS from "blockly/javascript";
|
|
|
|
Blockly.Blocks["pen_down"] = {
|
|
init: function () {
|
|
this.appendDummyInput().appendField("pen down");
|
|
this.setPreviousStatement(true, "default");
|
|
this.setNextStatement(true, "default");
|
|
this.setColour("#0fbd8c");
|
|
this.setTooltip("Put the pen down to draw");
|
|
},
|
|
};
|
|
BlocklyJS.javascriptGenerator.forBlock["pen_down"] = function () {
|
|
return "setPenStatus(true);\n";
|
|
};
|
|
|
|
Blockly.Blocks["pen_up"] = {
|
|
init: function () {
|
|
this.appendDummyInput().appendField("pen up");
|
|
this.setPreviousStatement(true, "default");
|
|
this.setNextStatement(true, "default");
|
|
this.setColour("#0fbd8c");
|
|
this.setTooltip("Lift the pen up");
|
|
},
|
|
};
|
|
BlocklyJS.javascriptGenerator.forBlock["pen_up"] = function () {
|
|
return "setPenStatus(false);\n";
|
|
};
|
|
|
|
Blockly.Blocks["set_pen_color"] = {
|
|
init: function () {
|
|
this.appendDummyInput().appendField("set pen color");
|
|
this.appendValueInput("R").setCheck("Number").appendField("R");
|
|
this.appendValueInput("G").setCheck("Number").appendField("G");
|
|
this.appendValueInput("B").setCheck("Number").appendField("B");
|
|
this.setInputsInline(true);
|
|
this.setPreviousStatement(true, "default");
|
|
this.setNextStatement(true, "default");
|
|
this.setColour("#0fbd8c");
|
|
this.setTooltip("Set the pen color to a RGB value");
|
|
},
|
|
};
|
|
BlocklyJS.javascriptGenerator.forBlock["set_pen_color"] = function (
|
|
block,
|
|
generator
|
|
) {
|
|
const r = generator.valueToCode(block, "R", BlocklyJS.Order.ATOMIC) || 0;
|
|
const g = generator.valueToCode(block, "G", BlocklyJS.Order.ATOMIC) || 0;
|
|
const b = generator.valueToCode(block, "B", BlocklyJS.Order.ATOMIC) || 0;
|
|
return `setPenColor(${r}, ${g}, ${b});\n`;
|
|
};
|
|
|
|
Blockly.Blocks["set_pen_color_combined"] = {
|
|
init: function () {
|
|
this.appendDummyInput("MODE")
|
|
.appendField("set pen color to")
|
|
.appendField(
|
|
new Blockly.FieldDropdown([
|
|
["RGB", "RGB"],
|
|
["HEX", "HEX"],
|
|
]),
|
|
"MODE"
|
|
);
|
|
this.appendValueInput("VALUE").setCheck(["String", "Number"]);
|
|
this.setInputsInline(true);
|
|
this.setPreviousStatement(true, "default");
|
|
this.setNextStatement(true, "default");
|
|
this.setColour("#0fbd8c");
|
|
this.setTooltip("Set the pen color to a RGB or HEX value.");
|
|
},
|
|
};
|
|
|
|
BlocklyJS.javascriptGenerator.forBlock["set_pen_color_combined"] = function (
|
|
block,
|
|
generator
|
|
) {
|
|
const mode = block.getFieldValue("MODE");
|
|
const value = generator.valueToCode(block, "VALUE", BlocklyJS.Order.ATOMIC);
|
|
if (mode === "HEX") return `setPenColorHex(${value});\n`;
|
|
else return `setPenColor(${value});\n`;
|
|
};
|
|
|
|
Blockly.Blocks["set_pen_size"] = {
|
|
init: function () {
|
|
this.appendValueInput("SIZE")
|
|
.setCheck("Number")
|
|
.appendField("set pen size to");
|
|
this.appendDummyInput().appendField("px");
|
|
this.setPreviousStatement(true, "default");
|
|
this.setNextStatement(true, "default");
|
|
this.setColour("#0fbd8c");
|
|
this.setTooltip("Set the pen thickness to a specific value in pixels");
|
|
},
|
|
};
|
|
|
|
BlocklyJS.javascriptGenerator.forBlock["set_pen_size"] = function (
|
|
block,
|
|
generator
|
|
) {
|
|
const size =
|
|
generator.valueToCode(block, "SIZE", BlocklyJS.Order.ATOMIC) || 1;
|
|
return `setPenSize("${size}");\n`;
|
|
};
|
|
|
|
Blockly.Blocks["clear_pen"] = {
|
|
init: function () {
|
|
this.appendDummyInput().appendField("clear pen");
|
|
this.setPreviousStatement(true, "default");
|
|
this.setNextStatement(true, "default");
|
|
this.setColour("#0fbd8c");
|
|
this.setTooltip("Clear all pen drawings");
|
|
},
|
|
};
|
|
|
|
BlocklyJS.javascriptGenerator.forBlock["clear_pen"] = () => "clearPen();\n";
|