Skip to content

Commit 20c806e

Browse files
committed
refactor: converting ruby to events block
1 parent e0da679 commit 20c806e

File tree

2 files changed

+66
-87
lines changed

2 files changed

+66
-87
lines changed

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

Lines changed: 64 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -11,89 +11,6 @@ const GreaterThanMenu = [
1111
*/
1212
const EventConverter = {
1313
register: function (converter) {
14-
converter.registerCallMethodWithBlock('self', 'when', 1, 0, params => {
15-
const {receiverName, args, rubyBlock} = params;
16-
17-
if (args[0].type !== 'sym') return null;
18-
19-
if (args[0].value === 'flag_clicked') {
20-
const block = converter.createBlock('event_whenflagclicked', 'hat');
21-
converter.setParent(rubyBlock, block);
22-
return block;
23-
}
24-
25-
if (args[0].value === 'clicked') {
26-
let opcode = 'event_whenthisspriteclicked';
27-
if (receiverName === 'stage') opcode = 'event_whenstageclicked';
28-
const block = converter.createBlock(opcode, 'hat');
29-
converter.setParent(rubyBlock, block);
30-
return block;
31-
}
32-
33-
return null;
34-
});
35-
36-
converter.registerCallMethodWithBlock('self', 'when', 2, 0, params => {
37-
const {args, rubyBlock} = params;
38-
39-
if (args[0].type !== 'sym') return null;
40-
41-
if (args[0].value === 'key_pressed') {
42-
if (!converter.isString(args[1])) return null;
43-
if (KeyOptions.indexOf(args[1].toString()) < 0) return null;
44-
45-
const block = converter.createBlock('event_whenkeypressed', 'hat');
46-
converter.addField(block, 'KEY_OPTION', args[1]);
47-
converter.setParent(rubyBlock, block);
48-
return block;
49-
}
50-
51-
if (args[0].value === 'backdrop_switches') {
52-
if (!converter.isString(args[1])) return null;
53-
54-
const block = converter.createBlock('event_whenbackdropswitchesto', 'hat');
55-
converter.addField(block, 'BACKDROP', args[1]);
56-
converter.setParent(rubyBlock, block);
57-
return block;
58-
}
59-
60-
if (args[0].value === 'receive') {
61-
if (!converter.isString(args[1])) return null;
62-
63-
const broadcastMsg = converter.lookupOrCreateBroadcastMsg(args[1]);
64-
const block = converter.createBlock('event_whenbroadcastreceived', 'hat');
65-
converter.addField(block, 'BROADCAST_OPTION', broadcastMsg.name, {
66-
id: broadcastMsg.id,
67-
variableType: Variable.BROADCAST_MESSAGE_TYPE
68-
});
69-
converter.setParent(rubyBlock, block);
70-
return block;
71-
}
72-
73-
return null;
74-
});
75-
76-
converter.registerCallMethodWithBlock('self', 'when', 3, 0, params => {
77-
const {args, rubyBlock} = params;
78-
79-
if (args[0].type !== 'sym') return null;
80-
81-
if (args[0].value === 'greater_than') {
82-
if (!converter.isString(args[1])) return null;
83-
const args1 = args[1].toString().toUpperCase();
84-
if (GreaterThanMenu.indexOf(args1) < 0) return null;
85-
if (!converter.isNumberOrBlock(args[2])) return null;
86-
87-
const block = converter.createBlock('event_whengreaterthan', 'hat');
88-
converter.addField(block, 'WHENGREATERTHANMENU', args1);
89-
converter.addNumberInput(block, 'VALUE', 'math_number', args[2], 10);
90-
converter.setParent(rubyBlock, block);
91-
return block;
92-
}
93-
94-
return null;
95-
});
96-
9714
converter.registerCallMethodWithBlock('self', 'when_flag_clicked', 0, 0, params => {
9815
const {rubyBlock} = params;
9916

@@ -194,10 +111,72 @@ const EventConverter = {
194111
converter.addInput(block, 'BROADCAST_INPUT', inputBlock, shadowBlock);
195112
return block;
196113
};
197-
converter.registerCallMethod('self', 'broadcast', 1,
114+
converter.registerCallMethod(
115+
'self', 'broadcast', 1,
198116
params => createBroadcastBlockFunc(params, 'event_broadcast'));
199-
converter.registerCallMethod('self', 'broadcast_and_wait', 1,
117+
converter.registerCallMethod(
118+
'self', 'broadcast_and_wait', 1,
200119
params => createBroadcastBlockFunc(params, 'event_broadcastandwait'));
120+
121+
// backward compatibility
122+
converter.registerCallMethodWithBlock('self', 'when', 1, 0, params => {
123+
const {args} = params;
124+
125+
if (args[0].type !== 'sym') return null;
126+
127+
switch (args[0].value) {
128+
case 'flag_clicked':
129+
return converter.callMethod(
130+
params.receiver, 'when_flag_clicked', params.args.slice(1),
131+
params.rubyBlockArgs, params.rubyBlock, params.node);
132+
case 'clicked':
133+
return converter.callMethod(
134+
params.receiver, 'when_clicked', params.args.slice(1),
135+
params.rubyBlockArgs, params.rubyBlock, params.node);
136+
}
137+
138+
return null;
139+
});
140+
141+
// backward compatibility
142+
converter.registerCallMethodWithBlock('self', 'when', 2, 0, params => {
143+
const {args} = params;
144+
145+
if (args[0].type !== 'sym') return null;
146+
147+
switch (args[0].value) {
148+
case 'key_pressed':
149+
return converter.callMethod(
150+
params.receiver, 'when_key_pressed', params.args.slice(1),
151+
params.rubyBlockArgs, params.rubyBlock, params.node);
152+
case 'backdrop_switches':
153+
return converter.callMethod(
154+
params.receiver, 'when_backdrop_switches', params.args.slice(1),
155+
params.rubyBlockArgs, params.rubyBlock, params.node);
156+
case 'receive':
157+
return converter.callMethod(
158+
params.receiver, 'when_receive', params.args.slice(1),
159+
params.rubyBlockArgs, params.rubyBlock, params.node);
160+
}
161+
162+
return null;
163+
});
164+
165+
// backward compatibility
166+
converter.registerCallMethodWithBlock('self', 'when', 3, 0, params => {
167+
const {args} = params;
168+
169+
if (args[0].type !== 'sym') return null;
170+
171+
switch (args[0].value) {
172+
case 'greater_than':
173+
return converter.callMethod(
174+
params.receiver, 'when_greater_than', params.args.slice(1),
175+
params.rubyBlockArgs, params.rubyBlock, params.node);
176+
}
177+
178+
return null;
179+
});
201180
}
202181
};
203182

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ class RubyToBlocksConverter {
302302
this.registerCallMethodWithBlock(receiverName, name, numArgs, 'none', createBlockFunc);
303303
}
304304

305-
_callMethod (receiver, name, args, rubyBlockArgs, rubyBlock, node) {
305+
callMethod (receiver, name, args, rubyBlockArgs, rubyBlock, node) {
306306
const receiverName = this._getReceiverName(receiver);
307307
if (!receiverName) return null;
308308

@@ -1120,7 +1120,7 @@ class RubyToBlocksConverter {
11201120
rubyBlock = this._processStatement(rubyBlockNode);
11211121
}
11221122

1123-
let block = this._callMethod(receiver, name, args, rubyBlockArgs, rubyBlock, node);
1123+
let block = this.callMethod(receiver, name, args, rubyBlockArgs, rubyBlock, node);
11241124
if (!block) {
11251125
block = this._callConvertersHandler('onSend', receiver, name, args, rubyBlockArgs, rubyBlock, node);
11261126
}

0 commit comments

Comments
 (0)