@webwriter/block-based-code
Version:
Write block-based code (e.g. Scratch) and run it.
34 lines (32 loc) • 1.36 kB
text/typescript
import { Order } from "blockly/javascript";
import { BlockTypes } from "../blocks";
import type { GeneratorFunction } from "../types/generator";
export const generators = {
"motions:move": (block, generator) => {
const distance = generator.valueToCode(block, "STEPS", Order.ATOMIC);
return `move(${distance});\n`;
},
"motions:rotate": (block, generator) => {
const angle = generator.valueToCode(block, "DEGREES", Order.ATOMIC);
return `rotate(${angle});\n`;
},
"motions:set_rotation": (block, generator) => {
const angle = generator.valueToCode(block, "DEGREES", Order.ATOMIC);
return `setRotation(${angle});\n`;
},
"motions:set_x": (block, generator) => {
const x = generator.valueToCode(block, "X", Order.ATOMIC);
return `setX(${x});\n`;
},
"motions:set_y": (block, generator) => {
const y = generator.valueToCode(block, "Y", Order.ATOMIC);
return `setY(${y});\n`;
},
"motions:set_xy": (block, generator) => {
const x = generator.valueToCode(block, "X", Order.ATOMIC);
const y = generator.valueToCode(block, "Y", Order.ATOMIC);
return `setXY(${x}, ${y});\n`;
},
"motions:get_x": () => ["await getX()", Order.FUNCTION_CALL],
"motions:get_y": () => ["await getY()", Order.FUNCTION_CALL],
} satisfies Partial<Record<BlockTypes, GeneratorFunction>>;