Skip to content
Snippets Groups Projects
Commit c4ae964a authored by Eric Rosenbaum's avatar Eric Rosenbaum
Browse files

monkeypatch dynamic sound menu into scratchblocks

/ht @rschamp
parent 991a3259
Branches
Tags
No related merge requests found
const bindAll = require('lodash.bindall');
const defaultsDeep = require('lodash.defaultsdeep');
const React = require('react');
const ScratchBlocks = require('scratch-blocks');
const VMScratchBlocks = require('../lib/blocks');
const VM = require('scratch-vm');
const BlocksComponent = require('../components/blocks/blocks.jsx');
......@@ -9,6 +9,7 @@ const BlocksComponent = require('../components/blocks/blocks.jsx');
class Blocks extends React.Component {
constructor (props) {
super(props);
this.ScratchBlocks = VMScratchBlocks(props.vm);
bindAll(this, [
'attachVM',
'detachVM',
......@@ -23,7 +24,7 @@ class Blocks extends React.Component {
}
componentDidMount () {
const workspaceConfig = defaultsDeep({}, Blocks.defaultOptions, this.props.options);
this.workspace = ScratchBlocks.inject(this.blocks, workspaceConfig);
this.workspace = this.ScratchBlocks.inject(this.blocks, workspaceConfig);
this.attachVM();
}
componentWillUnmount () {
......@@ -67,11 +68,11 @@ class Blocks extends React.Component {
this.workspace.reportValue(data.id, data.value);
}
onWorkspaceUpdate (data) {
ScratchBlocks.Events.disable();
this.ScratchBlocks.Events.disable();
this.workspace.clear();
const dom = ScratchBlocks.Xml.textToDom(data.xml);
ScratchBlocks.Xml.domToWorkspace(dom, this.workspace);
ScratchBlocks.Events.enable();
const dom = this.ScratchBlocks.Xml.textToDom(data.xml);
this.ScratchBlocks.Xml.domToWorkspace(dom, this.workspace);
this.ScratchBlocks.Events.enable();
}
setBlocks (blocks) {
this.blocks = blocks;
......
const ScratchBlocks = require('scratch-blocks');
module.exports = function (vm) {
ScratchBlocks.Blocks.sound_sounds_menu.init = function () {
this.jsonInit(
{
message0: '%1',
args0: [
{
type: 'field_dropdown',
name: 'SOUND_MENU',
options: function () {
const menu = vm.editingTarget.sprite.sounds.map(sound => [sound.name, sound.name]);
menu.unshift(['select...', '0']);
return menu;
}
}
],
inputsInline: true,
output: 'String',
colour: ScratchBlocks.Colours.sounds.secondary,
colourSecondary: ScratchBlocks.Colours.sounds.secondary,
colourTertiary: ScratchBlocks.Colours.sounds.tertiary,
outputShape: ScratchBlocks.OUTPUT_SHAPE_ROUND
});
};
return ScratchBlocks;
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment