138 lines
3.7 KiB
JavaScript
138 lines
3.7 KiB
JavaScript
import * as Blockly from "blockly";
|
|
import * as BlocklyJS from "blockly/javascript";
|
|
|
|
// Function to get available sounds - you'll need to implement this in your main editor
|
|
// This should return an array of sound names from your project
|
|
function getAvailableSounds() {
|
|
// This needs to be connected to your sound list
|
|
// For now, returning a default option
|
|
if (window.projectSounds && window.projectSounds.length > 0) {
|
|
return window.projectSounds.map(sound => [sound, sound]);
|
|
}
|
|
return [["no sounds", ""]];
|
|
}
|
|
|
|
Blockly.Blocks["play_sound"] = {
|
|
init: function () {
|
|
this.appendDummyInput()
|
|
.appendField("play sound")
|
|
.appendField(new Blockly.FieldDropdown(
|
|
function() {
|
|
return getAvailableSounds();
|
|
}
|
|
), "SOUND_NAME");
|
|
this.appendDummyInput().appendField(
|
|
new Blockly.FieldDropdown([
|
|
["until finished", "true"],
|
|
["without waiting", "false"],
|
|
]),
|
|
"wait"
|
|
);
|
|
this.setColour("#ff66ba");
|
|
this.setPreviousStatement(true, "default");
|
|
this.setNextStatement(true, "default");
|
|
},
|
|
};
|
|
|
|
BlocklyJS.javascriptGenerator.forBlock["play_sound"] = function (block, generator) {
|
|
var name = "'" + block.getFieldValue("SOUND_NAME") + "'";
|
|
var wait = block.getFieldValue("wait");
|
|
return `await playSound(${name}, ${wait});\n`;
|
|
};
|
|
|
|
Blockly.Blocks["stop_sound"] = {
|
|
init: function () {
|
|
this.appendDummyInput()
|
|
.appendField("stop sound")
|
|
.appendField(new Blockly.FieldDropdown(
|
|
function() {
|
|
return getAvailableSounds();
|
|
}
|
|
), "SOUND_NAME");
|
|
this.setColour("#ff66ba");
|
|
this.setPreviousStatement(true, "default");
|
|
this.setNextStatement(true, "default");
|
|
},
|
|
};
|
|
|
|
BlocklyJS.javascriptGenerator.forBlock["stop_sound"] = function (block, generator) {
|
|
var name = "'" + block.getFieldValue("SOUND_NAME") + "'";
|
|
return `stopSound(${name});\n`;
|
|
};
|
|
|
|
Blockly.Blocks["stop_all_sounds"] = {
|
|
init: function () {
|
|
this.appendDummyInput()
|
|
.appendField("stop")
|
|
.appendField(
|
|
new Blockly.FieldDropdown([
|
|
["all", "false"],
|
|
["my", "true"],
|
|
]),
|
|
"who"
|
|
)
|
|
.appendField("sounds");
|
|
this.setColour("#ff66ba");
|
|
this.setPreviousStatement(true, "default");
|
|
this.setNextStatement(true, "default");
|
|
},
|
|
};
|
|
|
|
BlocklyJS.javascriptGenerator.forBlock["stop_all_sounds"] = function (block) {
|
|
var who = block.getFieldValue("who");
|
|
var code = `stopAllSounds(${who});\n`;
|
|
return code;
|
|
};
|
|
|
|
Blockly.Blocks["set_sound_property"] = {
|
|
init: function () {
|
|
this.appendValueInput("value")
|
|
.setCheck("Number")
|
|
.appendField("set")
|
|
.appendField(
|
|
new Blockly.FieldDropdown([
|
|
["volume", "volume"],
|
|
["speed", "speed"],
|
|
]),
|
|
"property"
|
|
)
|
|
.appendField("to");
|
|
this.appendDummyInput().appendField("%");
|
|
this.setColour("#ff66ba");
|
|
this.setPreviousStatement(true, "default");
|
|
this.setNextStatement(true, "default");
|
|
},
|
|
};
|
|
|
|
BlocklyJS.javascriptGenerator.forBlock["set_sound_property"] = function (
|
|
block,
|
|
generator
|
|
) {
|
|
var value = generator.valueToCode(
|
|
block,
|
|
"value",
|
|
BlocklyJS.Order.ATOMIC
|
|
);
|
|
var property = block.getFieldValue("property");
|
|
return `setSoundProperty("${property}", ${value});\n`;
|
|
};
|
|
|
|
Blockly.Blocks["get_sound_property"] = {
|
|
init: function () {
|
|
this.appendDummyInput().appendField(
|
|
new Blockly.FieldDropdown([
|
|
["volume", "volume"],
|
|
["speed", "speed"],
|
|
]),
|
|
"property"
|
|
);
|
|
this.setColour("#ff66ba");
|
|
this.setOutput(true, "Number");
|
|
},
|
|
};
|
|
|
|
BlocklyJS.javascriptGenerator.forBlock["get_sound_property"] = function (block) {
|
|
var property = block.getFieldValue("property");
|
|
return [`soundProperties["${property}"]`, BlocklyJS.Order.NONE];
|
|
};
|