Skip to content

Commit ad143ed

Browse files
committed
Merge remote-tracking branch 'riversunlight/gdx_for' into develop
2 parents b340c75 + 1583b90 commit ad143ed

File tree

4 files changed

+111
-0
lines changed

4 files changed

+111
-0
lines changed

src/lib/ruby-generator/gdx_for.js

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/**
2+
* Define Ruby code generator for Go Direct Force & Acceleration Blocks
3+
* @param {RubyGenerator} Generator The RubyGenerator
4+
* @return {RubyGenerator} same as param.
5+
*/
6+
export default function (Generator) {
7+
Generator.gdxfor_menu_gestureOptions = function (block) {
8+
const gesture = Generator.quote_(Generator.getFieldValue(block, 'gestureOptions') || 'shaken');
9+
return [gesture, Generator.ORDER_ATOMIC];
10+
};
11+
12+
Generator.gdxfor_whenGesture = function (block) {
13+
block.isStatement = true;
14+
const gesture = Generator.valueToCode(block, 'GESTURE', Generator.ORDER_NONE) || null;
15+
return `${Generator.spriteName()}.when(:gdx_for_gesture, ${gesture}) do\n`;
16+
};
17+
18+
Generator.gdxfor_menu_pushPullOptions = function (block) {
19+
const pushPull = Generator.quote_(Generator.getFieldValue(block, 'pushPullOptions') || 'pushed');
20+
return [pushPull, Generator.ORDER_ATOMIC];
21+
};
22+
23+
Generator.gdxfor_whenForcePushedOrPulled = function (block) {
24+
block.isStatement = true;
25+
const pushPull = Generator.valueToCode(block, 'PUSH_PULL', Generator.ORDER_NONE) || null;
26+
return `${Generator.spriteName()}.when(:gdx_force_sensor, ${pushPull}) do\n`;
27+
};
28+
29+
Generator.gdxfor_getForce = function () {
30+
return [`gdx_for_force`, Generator.ORDER_ATOMIC];
31+
};
32+
33+
Generator.gdxfor_menu_tiltAnyOptions = function (block) {
34+
const tiltAny = Generator.quote_(Generator.getFieldValue(block, 'tiltAnyOptions') || 'any');
35+
return [tiltAny, Generator.ORDER_ATOMIC];
36+
};
37+
38+
Generator.gdxfor_whenTilted = function (block) {
39+
block.isStatement = true;
40+
const tilt = Generator.valueToCode(block, 'TILT', Generator.ORDER_NONE) || null;
41+
return `${Generator.spriteName()}.when(:gdx_for_tilted, ${tilt}) do\n`;
42+
};
43+
44+
Generator.gdxfor_isTilted = function (block) {
45+
const tilt = Generator.valueToCode(block, 'TILT', Generator.ORDER_NONE) || null;
46+
return [`gdx_for_tilted?(${tilt})`, Generator.ORDER_ATOMIC];
47+
};
48+
49+
Generator.gdxfor_menu_tiltOptions = function (block) {
50+
const tilt = Generator.quote_(Generator.getFieldValue(block, 'tiltOptions') || 'front');
51+
return [tilt, Generator.ORDER_ATOMIC];
52+
};
53+
54+
Generator.gdxfor_getTilt = function (block) {
55+
const tilt = Generator.valueToCode(block, 'TILT', Generator.ORDER_NONE) || null;
56+
return [`gdx_for_tilt_angle(${tilt})`, Generator.ORDER_ATOMIC];
57+
};
58+
59+
Generator.gdxfor_menu_axisOptions = function (block) {
60+
const pushPull = Generator.quote_(Generator.getFieldValue(block, 'axisOptions') || 'z');
61+
return [pushPull, Generator.ORDER_ATOMIC];
62+
};
63+
64+
Generator.gdxfor_getSpinSpeed = function (block) {
65+
const direction = Generator.valueToCode(block, 'DIRECTION', Generator.ORDER_NONE) || null;
66+
return [`gdx_for_spin_speed(${direction})`, Generator.ORDER_ATOMIC];
67+
};
68+
69+
Generator.gdxfor_getAcceleration = function (block) {
70+
const direction = Generator.valueToCode(block, 'DIRECTION', Generator.ORDER_NONE) || null;
71+
return [`gdx_for_acceleration(${direction})`, Generator.ORDER_ATOMIC];
72+
};
73+
74+
Generator.gdxfor_isFreeFalling = function () {
75+
return [`gdx_for_falling?`, Generator.ORDER_ATOMIC];
76+
};
77+
return Generator;
78+
}

src/lib/ruby-generator/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import MicrobitBlocks from './microbit.js';
2626
import BoostBlocks from './boost.js';
2727
import EV3Blocks from './ev3.js';
2828
import WeDo2Blocks from './wedo2.js';
29+
import GdxForBlocks from './gdx_for.js';
2930

3031
const SCALAR_TYPE = '';
3132
const LIST_TYPE = 'list';
@@ -454,5 +455,6 @@ MicrobitBlocks(RubyGenerator);
454455
BoostBlocks(RubyGenerator);
455456
EV3Blocks(RubyGenerator);
456457
WeDo2Blocks(RubyGenerator);
458+
GdxForBlocks(RubyGenerator);
457459

458460
export default RubyGenerator;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/* global Opal */
2+
import _ from 'lodash';
3+
4+
/**
5+
* GdxFor converter
6+
*/
7+
const GdxForConverter = {
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 'gdx_for_acceleration':
14+
if (args.length === 1) {
15+
block = this._createBlock('gdxfor_getAcceleration', 'value');
16+
this._addInput(
17+
block,
18+
'DIRECTION',
19+
this._createFieldBlock('gdxfor_menu_axisOptions', 'axisOptions', args[0])
20+
);
21+
}
22+
break;
23+
}
24+
}
25+
return block;
26+
}
27+
};
28+
29+
export default GdxForConverter;

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import PenConverter from './pen';
2222
import MicroBitConverter from './microbit';
2323
import EV3Converter from './ev3';
2424
import Wedo2Converter from './wedo2';
25+
import GdxForConverter from './gdx_for';
2526

2627
/* eslint-disable no-invalid-this */
2728
const ColorRegexp = /^#[0-9a-fA-F]{6}$/;
@@ -38,6 +39,7 @@ class RubyToBlocksConverter {
3839
MicroBitConverter,
3940
EV3Converter,
4041
Wedo2Converter,
42+
GdxForConverter,
4143

4244
MotionConverter,
4345
LooksConverter,

0 commit comments

Comments
 (0)