Init
This commit is contained in:
137
src/blocks/sound.js
Normal file
137
src/blocks/sound.js
Normal file
@@ -0,0 +1,137 @@
|
||||
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];
|
||||
};
|
||||
Reference in New Issue
Block a user