Files
NeoIDE/src/blocks/pen.js
2026-01-19 23:44:32 -06:00

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";