diff --git a/blocks/CCColors/block_design.json b/blocks/CCColors/block_design.json new file mode 100644 index 0000000..823515e --- /dev/null +++ b/blocks/CCColors/block_design.json @@ -0,0 +1,63 @@ +{ + "colors_color_picker": { + "message0": "Color %1", + "args0": [ + { + "type": "field_dropdown", + "name": "COLOR", + "options": [ + ["White", "colors.white"], + ["Orange", "colors.orange"], + ["Magenta", "colors.magenta"], + ["Light blue", "colors.lightBlue"], + ["Yellow", "colors.yellow"], + ["Lime", "colors.lime"], + ["Pink", "colors.pink"], + ["Gray", "colors.gray"], + ["Light gray", "colors.lightGray"], + ["Cyan", "colors.cyan"], + ["Purple", "colors.purple"], + ["Blue", "colors.blue"], + ["Brown", "colors.brown"], + ["Green", "colors.green"], + ["Red", "colors.red"], + ["Black", "colors.black"] + ] + } + ], + "output": "CCColors", + "colour": 192, + "tooltip": "Pick color value" + }, + "colors_combine": { + "message0": "Combine color from %1", + "args0": [ + { + "type": "input_value", + "name": "COLORARRAY", + "check": "Array" + } + ], + "output": "CCColors", + "colour": 192, + "tooltip": "Combines a set of colors (or sets of colors) into a larger set." + }, + "colors_subtract": { + "message0": "Subtract color %1 from %2", + "args0": [ + { + "type": "input_value", + "name": "COLORARRAY", + "check": "Array" + }, + { + "type": "input_value", + "name": "COLOR", + "check": "CCColors" + } + ], + "output": "CCColors", + "colour": 192, + "tooltip": "Removes one or more colors (or sets of colors) from an initial set." + } +} diff --git a/blocks/CCColors/generator.js b/blocks/CCColors/generator.js new file mode 100644 index 0000000..cf79166 --- /dev/null +++ b/blocks/CCColors/generator.js @@ -0,0 +1,26 @@ +const { luaGenerator } = require('blockly/lua'); + +// Check if luaGenerator.forBlock is defined and initialize if necessary +if (!luaGenerator.forBlock) { + luaGenerator.forBlock = {}; +} + +luaGenerator.forBlock['colors_color_picker'] = function(block, generator) { + var color = block.getFieldValue('COLOR'); + + return [color, generator.ORDER_NONE]; +}; + +luaGenerator.forBlock['colors_combine'] = function(block, generator) { + var colorArray = generator.valueToCode(block, 'COLORARRAY', generator.ORDER_ATOMIC); + + return [`colors.combine(table.unpack(${colorArray}))`, generator.ORDER_NONE]; +}; + +luaGenerator.forBlock['colors_subtract'] = function(block, generator) { + var colorArray = generator.valueToCode(block, 'COLORARRAY', generator.ORDER_ATOMIC); + var color = generator.valueToCode(block, 'COLOR', generator.ORDER_ATOMIC); + + return [`colors.subtract(${color}, table.unpack(${colorArray}))`, generator.ORDER_NONE]; +}; + diff --git a/blocks/CCColors/index.json b/blocks/CCColors/index.json new file mode 100644 index 0000000..97ab426 --- /dev/null +++ b/blocks/CCColors/index.json @@ -0,0 +1,22 @@ +{ + "name": "Colors", + "author": "DPSoftware Foundation", + "description": "Constants and functions for colour values", + "version": "0.5", + "category": "Display", + "keyword": "Colors", + "license": "GPL-3.0-or-later", + "peripherals": false, + "library": true, + "require_network": false, + "dependencies": {}, + "design_for_computer": { + "basic": false, + "adv": true, + "command": false, + "pocket": false, + "advpocket": true, + "turtle": false, + "advturtle": true + } +} diff --git a/blocks/CCColors/toolbox.xml b/blocks/CCColors/toolbox.xml new file mode 100644 index 0000000..9a2f8fa --- /dev/null +++ b/blocks/CCColors/toolbox.xml @@ -0,0 +1,7 @@ + diff --git a/src/module_block_design.json b/src/module_block_design.json index 678b457..d057aac 100644 --- a/src/module_block_design.json +++ b/src/module_block_design.json @@ -15,7 +15,7 @@ "helpUrl": "" }, "sys_utils_table_variable_pack": { - "message0": "Pack %1 to Table", + "message0": "Pack args %1 to Table", "args0": [ { "type": "input_value", @@ -24,10 +24,10 @@ } ], "output": "Array", - "colour": 220 + "colour": 260 }, "sys_utils_get_value_from_table_with_index": { - "message0": "UnPack %1 to Value with index/key %2", + "message0": "UnPack args %1 to Value with index/key %2", "args0": [ { "type": "input_value", @@ -41,7 +41,7 @@ } ], "output": null, - "colour": 220 + "colour": 260 }, "sys_utils_get_type": { "message0": "Get type of %1", @@ -53,5 +53,49 @@ ], "output": "String", "colour": 220 + }, + "sys_table_unpack_to_args": { + "message0": "UnPack table %1 to Args", + "args0": [ + { + "type": "input_value", + "name": "TABLE", + "check": "Array" + } + ], + "output": "Multiple", + "colour": 260 + }, + "sys_table_add_key_value": { + "message0": "Add key %1 with data %2", + "args0": [ + { + "type": "input_value", + "name": "KEY", + "check": ["String", "Number"] + }, + { + "type": "input_value", + "name": "VALUE" + } + ], + "output": "Array_Pair", + "colour": 260 + }, + "sys_table_append_data": { + "message0": "Append %1 to table %2", + "args0": [ + { + "type": "input_value", + "name": "DATA" + }, + { + "type": "input_value", + "name": "TABLE", + "check": "Array" + } + ], + "output": "Array", + "colour": 260 } } diff --git a/src/module_generator.js b/src/module_generator.js index 1c4e552..ae4d8b4 100644 --- a/src/module_generator.js +++ b/src/module_generator.js @@ -16,7 +16,7 @@ luaGenerator.forBlock['sys_sleep'] = function(block, generator) { luaGenerator.forBlock['sys_utils_table_variable_pack'] = function(block, generator) { var args = generator.valueToCode(block, 'RETURN_ARGS', generator.ORDER_NONE); - return [`{${args}}`, luaGenerator.ORDER_NONE]; + return [`table.pack(${arg})`, luaGenerator.ORDER_NONE]; }; luaGenerator.forBlock['sys_utils_get_value_from_table_with_index'] = function(block, generator) { @@ -30,4 +30,31 @@ luaGenerator.forBlock['sys_utils_get_type'] = function(block, generator) { var input = generator.valueToCode(block, 'INPUT', generator.ORDER_NONE); return [`type(${input})`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['sys_table_unpack_to_args'] = function(block, generator) { + var table = generator.valueToCode(block, 'TABLE', generator.ORDER_NONE); + + return [`table.unpack(${table})`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['sys_table_add_key_value'] = function(block, generator) { + var key = generator.valueToCode(block, 'KEY', generator.ORDER_NONE); + var value = generator.valueToCode(block, 'VALUE', generator.ORDER_NONE); + + return [`[${key}] = ${value}`, luaGenerator.ORDER_NONE]; +}; + +luaGenerator.forBlock['sys_table_append_data'] = function(block, generator) { + var data = generator.valueToCode(block, 'DATA', generator.ORDER_NONE); + var table = generator.valueToCode(block, 'TABLE', generator.ORDER_NONE); + + return `table.insert(${table}, ${data})\n`; +}; + +luaGenerator.forBlock['sys_table_append_data'] = function(block, generator) { + var data = generator.valueToCode(block, 'DATA', generator.ORDER_NONE); + var table = generator.valueToCode(block, 'TABLE', generator.ORDER_NONE); + + return `table.insert(${table}, ${data})\n`; }; \ No newline at end of file diff --git a/src/toolbox.xml b/src/toolbox.xml index 5d5f17a..66c5cc7 100644 --- a/src/toolbox.xml +++ b/src/toolbox.xml @@ -1,14 +1,19 @@