Skip to content

Commit df32524

Browse files
authored
Merge pull request #261 from riversunlight/dev_boost_ruby_to_block_by_abe
BoostのRubyからブロックへの変換を追加
2 parents 8d46b6e + d7b8dce commit df32524

File tree

2 files changed

+148
-0
lines changed

2 files changed

+148
-0
lines changed
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
/* global Opal */
2+
import _ from 'lodash';
3+
4+
/**
5+
* Boost converter
6+
*/
7+
const BoostConverter = {
8+
// eslint-disable-next-line no-unused-vars
9+
onSend: function (receiver, name, args, rubyBlockArgs, rubyBlock) {
10+
let block;
11+
if ((this._isSelf(receiver) || receiver === Opal.nil) && !rubyBlock) {
12+
switch (name) {
13+
case 'boost_motor_turn_on_for':
14+
if (args.length === 2 && this._isStringOrBlock(args[0]) && this._isNumberOrBlock(args[1])) {
15+
block = this._createBlock('boost_motorOnFor', 'statement');
16+
this._addInput(
17+
block,
18+
'MOTOR_ID',
19+
this._createFieldBlock('boost_menu_MOTOR_ID', 'MOTOR_ID', args[0])
20+
);
21+
this._addNumberInput(block, 'DURATION', 'math_number', args[1], 1);
22+
} else if (args.length === 1 && this._isStringOrBlock(args[0])) {
23+
block = this._createBlock('boost_motorOn', 'statement');
24+
this._addInput(
25+
block,
26+
'MOTOR_ID',
27+
this._createFieldBlock('boost_menu_MOTOR_ID', 'MOTOR_ID', args[0])
28+
);
29+
}
30+
break;
31+
case 'boost_motor_turn_this_way_for':
32+
if (args.length === 2 && this._isStringOrBlock(args[0]) && this._isNumberOrBlock(args[1])) {
33+
block = this._createBlock('boost_motorOnForRotation', 'statement');
34+
this._addInput(
35+
block,
36+
'MOTOR_ID',
37+
this._createFieldBlock('boost_menu_MOTOR_ID', 'MOTOR_ID', args[0])
38+
);
39+
this._addNumberInput(block, 'ROTATION', 'math_number', args[1], 1);
40+
}
41+
break;
42+
case 'boost_motor_turn_off_for':
43+
if (args.length === 1 && this._isStringOrBlock(args[0])) {
44+
block = this._createBlock('boost_motorOff', 'statement');
45+
this._addInput(
46+
block,
47+
'MOTOR_ID',
48+
this._createFieldBlock('boost_menu_MOTOR_ID', 'MOTOR_ID', args[0])
49+
);
50+
}
51+
break;
52+
case 'boost_motor_set_power_for':
53+
if (args.length === 2 && this._isStringOrBlock(args[0]) && this._isNumberOrBlock(args[1])) {
54+
block = this._createBlock('boost_setMotorPower', 'statement');
55+
this._addInput(
56+
block,
57+
'MOTOR_ID',
58+
this._createFieldBlock('boost_menu_MOTOR_ID', 'MOTOR_ID', args[0])
59+
);
60+
this._addNumberInput(block, 'POWER', 'math_number', args[1], 100);
61+
}
62+
break;
63+
case 'boost_motor_set_direction_for':
64+
if (args.length === 2 && this._isStringOrBlock(args[0]) && this._isStringOrBlock(args[1])) {
65+
block = this._createBlock('boost_setMotorDirection', 'statement');
66+
this._addInput(
67+
block,
68+
'MOTOR_ID',
69+
this._createFieldBlock('boost_menu_MOTOR_ID', 'MOTOR_ID', args[0])
70+
);
71+
this._addInput(
72+
block,
73+
'MOTOR_DIRECTION',
74+
this._createFieldBlock('boost_menu_MOTOR_DIRECTION', 'MOTOR_DIRECTION', args[1])
75+
);
76+
}
77+
break;
78+
case 'boost_motor_get_position':
79+
if (args.length === 1 && this._isStringOrBlock(args[0])) {
80+
block = this._createBlock('boost_getMotorPosition', 'value');
81+
this._addInput(
82+
block,
83+
'MOTOR_REPORTER_ID',
84+
this._createFieldBlock('boost_menu_MOTOR_REPORTER_ID', 'MOTOR_REPORTER_ID', args[0])
85+
);
86+
}
87+
break;
88+
case 'boost_seeing_color?':
89+
if (args.length === 1 && this._isStringOrBlock(args[0])) {
90+
block = this._createBlock('boost_seeingColor', 'boolean');
91+
this._addInput(
92+
block,
93+
'COLOR',
94+
this._createFieldBlock('boost_menu_COLOR', 'COLOR', args[0])
95+
);
96+
}
97+
break;
98+
case 'boost_get_tilt_angle':
99+
if (args.length === 1 && this._isStringOrBlock(args[0])) {
100+
block = this._createBlock('boost_getTiltAngle', 'value');
101+
this._addInput(
102+
block,
103+
'TILT_DIRECTION',
104+
this._createFieldBlock('boost_menu_TILT_DIRECTION', 'TILT_DIRECTION', args[0])
105+
);
106+
}
107+
break;
108+
case 'boost_set_light_color':
109+
if (args.length === 1 && this._isNumberOrBlock(args[0])) {
110+
block = this._createBlock('boost_setLightHue', 'statement');
111+
this._addNumberInput(block, 'HUE', 'math_number', args[0], 100);
112+
}
113+
break;
114+
}
115+
} else if ((this._isSelf(receiver) || receiver === Opal.nil) &&
116+
name === 'when' &&
117+
args.length === 2 && args[0].type === 'sym' &&
118+
this._isStringOrBlock(args[1]) &&
119+
rubyBlockArgs && rubyBlockArgs.length === 0 &&
120+
rubyBlock) {
121+
switch (args[0].value) {
122+
case 'boost_color':
123+
block = this._createBlock('boost_whenColor', 'hat');
124+
this._addInput(
125+
block,
126+
'COLOR',
127+
this._createFieldBlock('boost_menu_COLOR', 'COLOR', args[1])
128+
);
129+
this._setParent(rubyBlock, block);
130+
break;
131+
case 'boost_tilted':
132+
block = this._createBlock('boost_whenTilted', 'hat');
133+
this._addInput(
134+
block,
135+
'TILT_DIRECTION_ANY',
136+
this._createFieldBlock('boost_menu_TILT_DIRECTION_ANY', 'TILT_DIRECTION_ANY', args[1])
137+
);
138+
this._setParent(rubyBlock, block);
139+
break;
140+
}
141+
}
142+
return block;
143+
}
144+
};
145+
146+
export default BoostConverter;

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import Wedo2Converter from './wedo2';
2727
import GdxForConverter from './gdx_for';
2828
import MeshConverter from './mesh';
2929
import SmalrubotS1Converter from './smalrubot_s1';
30+
import BoostConverter from './boost';
3031

3132
const messages = defineMessages({
3233
couldNotConvertPremitive: {
@@ -87,6 +88,7 @@ class RubyToBlocksConverter {
8788
GdxForConverter,
8889
MeshConverter,
8990
SmalrubotS1Converter,
91+
BoostConverter,
9092

9193
MotionConverter,
9294
LooksConverter,

0 commit comments

Comments
 (0)