Skip to content

Commit d115f3c

Browse files
authored
Merge pull request #209 from rikutons/develop
Added some function's converter in music.js
2 parents 6502d1d + 576bd45 commit d115f3c

File tree

1 file changed

+76
-0
lines changed
  • src/lib/ruby-to-blocks-converter

1 file changed

+76
-0
lines changed

src/lib/ruby-to-blocks-converter/music.js

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,82 @@ import _ from 'lodash';
55
* Music converter
66
*/
77
const MusicConverter = {
8+
onSend: function (receiver, name, args, rubyBlockArgs, rubyBlock) {
9+
let block;
10+
if ((this._isSelf(receiver) || receiver === Opal.nil) && !rubyBlock) {
11+
switch (name) {
12+
case 'play_drum':
13+
if (args.length === 1 && this._isHash(args[0]) && args[0].size === 2) {
14+
const drum = args[0].get('sym:drum');
15+
const beats = args[0].get('sym:beats');
16+
if (this._isNumberOrBlock(drum) && this._isNumberOrBlock(beats)) {
17+
block = this._createBlock('music_playDrumForBeats', 'statement');
18+
this._addInput(
19+
block,
20+
'DRUM',
21+
this._createFieldBlock('music_menu_DRUM', 'DRUM', drum)
22+
);
23+
this._addNumberInput(block, 'BEATS', 'math_number', beats, 0.25);
24+
}
25+
}
26+
break;
27+
case 'rest':
28+
if (args.length === 1 && this._isNumberOrBlock(args[0])) {
29+
block = this._createBlock('music_restForBeats', 'statement');
30+
this._addNumberInput(block, 'BEATS', 'math_number', args[0], 0.25);
31+
}
32+
break;
33+
case 'play_note':
34+
if (args.length === 1 && this._isHash(args[0]) && args[0].size === 2) {
35+
const note = args[0].get('sym:note');
36+
const beats = args[0].get('sym:beats');
37+
if (this._isNumberOrBlock(note) && this._isNumberOrBlock(beats)) {
38+
block = this._createBlock('music_playNoteForBeats', 'statement');
39+
this._addNoteInput(block, 'NOTE', note, 60);
40+
this._addNumberInput(block, 'BEATS', 'math_number', beats, 0.25);
41+
}
42+
}
43+
break;
44+
case 'instrument=':
45+
if (args.length === 1 && this._isNumberOrBlock(args[0])) {
46+
block = this._createBlock('music_setInstrument', 'statement');
47+
this._addInput(
48+
block,
49+
'INSTRUMENT',
50+
this._createFieldBlock('music_menu_INSTRUMENT', 'INSTRUMENT', args[0])
51+
);
52+
}
53+
break;
54+
case 'tempo=':
55+
if (args.length === 1 && this._isNumberOrBlock(args[0])) {
56+
block = this._createBlock('music_setTempo', 'statement');
57+
this._addNumberInput(block, 'TEMPO', 'math_number', args[0], 60);
58+
}
59+
break;
60+
case 'tempo':
61+
if (args.length === 0) {
62+
block = this._createBlock('music_getTempo', 'value');
63+
}
64+
break;
65+
}
66+
}
67+
return block;
68+
},
69+
70+
// eslint-disable-next-line no-unused-vars
71+
onOpAsgn: function (lh, operator, rh) {
72+
let block;
73+
if (this._isBlock(lh) && operator === '+' && this._isNumberOrBlock(rh)) {
74+
let xy;
75+
switch (lh.opcode) {
76+
case 'music_getTempo':
77+
block = this._changeBlock(lh, 'music_changeTempo', 'statement');
78+
this._addNumberInput(block, 'TEMPO', 'math_number', rh, 20);
79+
break;
80+
}
81+
}
82+
return block;
83+
}
884
};
985

1086
export default MusicConverter;

0 commit comments

Comments
 (0)