diff --git a/src/lib/blocks.js b/src/lib/blocks.js index 6bec4dbdf..2b719d452 100644 --- a/src/lib/blocks.js +++ b/src/lib/blocks.js @@ -2,14 +2,14 @@ const ScratchBlocks = require('scratch-blocks'); module.exports = function (vm) { - const jsonForMenuBlock = function (name, menuOptionsFn, colors) { + const jsonForMenuBlock = function (name, menuOptionsFn, colors, start) { return { message0: '%1', args0: [ { type: 'field_dropdown', name: name, - options: menuOptionsFn + options: start.concat(menuOptionsFn()) } ], inputsInline: true, @@ -32,23 +32,96 @@ module.exports = function (vm) { const backdropsMenu = function () { return vm.runtime.targets[0].sprite.costumes.map(costume => [costume.name, costume.name]); }; + + const spriteMenu = function () { + var sprites = []; + for (var targetId in vm.runtime.targets) { + if (!vm.runtime.targets.hasOwnProperty(targetId)) continue; + if (vm.runtime.targets[targetId].isOriginal) { + if (!vm.runtime.targets[targetId].isStage) { + if (vm.runtime.targets[targetId].sprite.id === vm.editingTarget.sprite.id) { + continue; + } + sprites.push([vm.runtime.targets[targetId].sprite.name, vm.runtime.targets[targetId].sprite.name]); + } + } + } + return sprites; + }; const soundColors = ScratchBlocks.Colours.sounds; const looksColors = ScratchBlocks.Colours.looks; + + const motionColors = ScratchBlocks.Colours.motion; + + const sensingColors = ScratchBlocks.Colours.sensing; + + const controlColors = ScratchBlocks.Colours.control; ScratchBlocks.Blocks.sound_sounds_menu.init = function () { - const json = jsonForMenuBlock('SOUND_MENU', soundsMenu, soundColors); + const json = jsonForMenuBlock('SOUND_MENU', soundsMenu, soundColors, []); this.jsonInit(json); }; ScratchBlocks.Blocks.looks_costume.init = function () { - const json = jsonForMenuBlock('COSTUME', costumesMenu, looksColors); + const json = jsonForMenuBlock('COSTUME', costumesMenu, looksColors, []); this.jsonInit(json); }; ScratchBlocks.Blocks.looks_backdrops.init = function () { - const json = jsonForMenuBlock('BACKDROP', backdropsMenu, looksColors); + const json = jsonForMenuBlock('BACKDROP', backdropsMenu, looksColors, []); + this.jsonInit(json); + }; + + ScratchBlocks.Blocks.motion_pointtowards_menu.init = function () { + const json = jsonForMenuBlock('TOWARDS', spriteMenu, motionColors, [ + ['mouse-pointer', '_mouse_'] + ]); + this.jsonInit(json); + }; + + ScratchBlocks.Blocks.motion_goto_menu.init = function () { + const json = jsonForMenuBlock('TO', spriteMenu, motionColors, [ + ['mouse-pointer', '_mouse_'], + ['random position', '_random_'] + ]); + this.jsonInit(json); + }; + + ScratchBlocks.Blocks.sensing_of_object_menu.init = function () { + const json = jsonForMenuBlock('OBJECT', spriteMenu, sensingColors, [ + ['Stage', '_stage_'] + ]); + this.jsonInit(json); + }; + + ScratchBlocks.Blocks.sensing_videoonmenutwo.init = function () { + const json = jsonForMenuBlock('VIDEOONMENU2', spriteMenu, sensingColors, [ + ['stage', 'STAGE'] + ]); + this.jsonInit(json); + }; + + ScratchBlocks.Blocks.sensing_distancetomenu.init = function () { + const json = jsonForMenuBlock('DISTANCETOMENU', spriteMenu, sensingColors, [ + ['mouse-pointer', '_mouse_'] + ]); + this.jsonInit(json); + }; + + ScratchBlocks.Blocks.sensing_touchingobjectmenu.init = function () { + const json = jsonForMenuBlock('TOUCHINGOBJECTMENU', spriteMenu, sensingColors, [ + ['mouse-pointer', '_mouse_'], + ['edge', '_edge_'] + ]); + this.jsonInit(json); + }; + + ScratchBlocks.Blocks.control_create_clone_of_menu.init = function () { + const json = jsonForMenuBlock('CLONE_OPTION', spriteMenu, controlColors, [ + ['myself', '_myself_'] + ]); this.jsonInit(json); };