136 lines
4.4 KiB
JavaScript
136 lines
4.4 KiB
JavaScript
const ScratchBlocks = require('scratch-blocks');
|
|
|
|
module.exports = function (vm) {
|
|
|
|
const jsonForMenuBlock = function (name, menuOptionsFn, colors, start) {
|
|
return {
|
|
message0: '%1',
|
|
args0: [
|
|
{
|
|
type: 'field_dropdown',
|
|
name: name,
|
|
options: function () {
|
|
return start.concat(menuOptionsFn());
|
|
}
|
|
}
|
|
],
|
|
inputsInline: true,
|
|
output: 'String',
|
|
colour: colors.secondary,
|
|
colourSecondary: colors.secondary,
|
|
colourTertiary: colors.tertiary,
|
|
outputShape: ScratchBlocks.OUTPUT_SHAPE_ROUND
|
|
};
|
|
};
|
|
|
|
const soundsMenu = function () {
|
|
const sounds = vm.editingTarget.sprite.sounds;
|
|
if (sounds.length === 0) {
|
|
return [['', '']];
|
|
}
|
|
return sounds.map(sound => [sound.name, sound.name]);
|
|
};
|
|
|
|
const costumesMenu = function () {
|
|
return vm.editingTarget.sprite.costumes.map(costume => [costume.name, costume.name]);
|
|
};
|
|
|
|
const backdropsMenu = function () {
|
|
return vm.runtime.targets[0].sprite.costumes.map(costume => [costume.name, costume.name]);
|
|
};
|
|
|
|
const spriteMenu = function () {
|
|
const sprites = [];
|
|
for (const 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] === vm.editingTarget) {
|
|
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, []);
|
|
this.jsonInit(json);
|
|
};
|
|
|
|
ScratchBlocks.Blocks.looks_costume.init = function () {
|
|
const json = jsonForMenuBlock('COSTUME', costumesMenu, looksColors, []);
|
|
this.jsonInit(json);
|
|
};
|
|
|
|
ScratchBlocks.Blocks.looks_backdrops.init = function () {
|
|
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);
|
|
};
|
|
|
|
return ScratchBlocks;
|
|
};
|