Skip to content

Commit 3c3bf0f

Browse files
committed
refactor: events blocks
1 parent 0713298 commit 3c3bf0f

File tree

2 files changed

+36
-54
lines changed

2 files changed

+36
-54
lines changed

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

Lines changed: 14 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -83,101 +83,73 @@ const EventConverter = {
8383
},
8484

8585
register: function (converter) {
86-
converter.registerCallMethod('self', 'when_flag_clicked', 0, params => {
87-
const {rubyBlockArgs, rubyBlock} = params;
88-
89-
if (!rubyBlockArgs) return null;
90-
if (rubyBlockArgs.length !== 0) return null;
91-
if (!rubyBlock) return null;
86+
converter.registerCallMethodWithBlock('self', 'when_flag_clicked', 0, 0, params => {
87+
const {rubyBlock} = params;
9288

9389
const block = converter.createBlock('event_whenflagclicked', 'hat');
9490
converter.setParent(rubyBlock, block);
9591
return block;
9692
});
9793

98-
converter.registerCallMethod('self', 'when_key_pressed', 1, params => {
99-
const {args, rubyBlockArgs, rubyBlock} = params;
94+
converter.registerCallMethodWithBlock('self', 'when_key_pressed', 1, 0, params => {
95+
const {args, rubyBlock} = params;
10096

10197
if (!converter.isString(args[0])) return null;
10298
if (KeyOptions.indexOf(args[0].toString()) < 0) return null;
10399

104-
if (!rubyBlockArgs) return null;
105-
if (rubyBlockArgs.length !== 0) return null;
106-
if (!rubyBlock) return null;
107-
108100
const block = converter.createBlock('event_whenkeypressed', 'hat');
109101
converter.addField(block, 'KEY_OPTION', args[0]);
110102
converter.setParent(rubyBlock, block);
111103
return block;
112104
});
113105

114-
converter.registerCallMethod('sprite', 'when_clicked', 0, params => {
115-
const {rubyBlockArgs, rubyBlock} = params;
116-
117-
if (!rubyBlockArgs) return null;
118-
if (rubyBlockArgs.length !== 0) return null;
119-
if (!rubyBlock) return null;
106+
converter.registerCallMethodWithBlock('sprite', 'when_clicked', 0, 0, params => {
107+
const {rubyBlock} = params;
120108

121109
const block = converter.createBlock('event_whenthisspriteclicked', 'hat');
122110
converter.setParent(rubyBlock, block);
123111
return block;
124112
});
125113

126-
converter.registerCallMethod('stage', 'when_clicked', 0, params => {
127-
const {rubyBlockArgs, rubyBlock} = params;
128-
129-
if (!rubyBlockArgs) return null;
130-
if (rubyBlockArgs.length !== 0) return null;
131-
if (!rubyBlock) return null;
114+
converter.registerCallMethodWithBlock('stage', 'when_clicked', 0, 0, params => {
115+
const {rubyBlock} = params;
132116

133117
const block = converter.createBlock('event_whenstageclicked', 'hat');
134118
converter.setParent(rubyBlock, block);
135119
return block;
136120
});
137121

138-
converter.registerCallMethod('self', 'when_backdrop_switches', 1, params => {
139-
const {args, rubyBlockArgs, rubyBlock} = params;
122+
converter.registerCallMethodWithBlock('self', 'when_backdrop_switches', 1, 0, params => {
123+
const {args, rubyBlock} = params;
140124

141125
if (!converter.isString(args[0])) return null;
142126

143-
if (!rubyBlockArgs) return null;
144-
if (rubyBlockArgs.length !== 0) return null;
145-
if (!rubyBlock) return null;
146-
147127
const block = converter.createBlock('event_whenbackdropswitchesto', 'hat');
148128
converter.addField(block, 'BACKDROP', args[0]);
149129
converter.setParent(rubyBlock, block);
150130
return block;
151131
});
152132

153-
converter.registerCallMethod('self', 'when_greater_than', 2, params => {
154-
const {args, rubyBlockArgs, rubyBlock} = params;
133+
converter.registerCallMethodWithBlock('self', 'when_greater_than', 2, 0, params => {
134+
const {args, rubyBlock} = params;
155135

156136
if (!converter.isString(args[0])) return null;
157137
const args0 = args[0].toString().toUpperCase();
158138
if (GreaterThanMenu.indexOf(args0) < 0) return null;
159139
if (!converter.isNumberOrBlock(args[1])) return null;
160140

161-
if (!rubyBlockArgs) return null;
162-
if (rubyBlockArgs.length !== 0) return null;
163-
if (!rubyBlock) return null;
164-
165141
const block = converter.createBlock('event_whengreaterthan', 'hat');
166142
converter.addField(block, 'WHENGREATERTHANMENU', args0);
167143
converter.addNumberInput(block, 'VALUE', 'math_number', args[1], 10);
168144
converter.setParent(rubyBlock, block);
169145
return block;
170146
});
171147

172-
converter.registerCallMethod('self', 'when_receive', 1, params => {
173-
const {args, rubyBlockArgs, rubyBlock} = params;
148+
converter.registerCallMethodWithBlock('self', 'when_receive', 1, 0, params => {
149+
const {args, rubyBlock} = params;
174150

175151
if (!converter.isString(args[0])) return null;
176152

177-
if (!rubyBlockArgs) return null;
178-
if (rubyBlockArgs.length !== 0) return null;
179-
if (!rubyBlock) return null;
180-
181153
const broadcastMsg = converter.lookupOrCreateBroadcastMsg(args[0]);
182154
const block = converter.createBlock('event_whenbroadcastreceived', 'hat');
183155
converter.addField(block, 'BROADCAST_OPTION', broadcastMsg.name, {
@@ -193,8 +165,6 @@ const EventConverter = {
193165

194166
if (!converter.isStringOrBlock(args[0])) return null;
195167

196-
if (rubyBlock) return null;
197-
198168
const menuBlock = converter.createBlock('event_broadcast_menu', 'value', {
199169
shadow: true
200170
});

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

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -275,35 +275,47 @@ class RubyToBlocksConverter {
275275
});
276276
}
277277

278-
registerCallMethod (receiverName, name, numArgs, createBlockFunc) {
278+
registerCallMethodWithBlock (receiverName, name, numArgs, numRubyBlockArgs, createBlockFunc) {
279279
if (receiverName === 'self') {
280-
this.registerCallMethod('sprite', name, numArgs, createBlockFunc);
281-
this.registerCallMethod('stage', name, numArgs, createBlockFunc);
280+
this.registerCallMethodWithBlock('sprite', name, numArgs, numRubyBlockArgs, createBlockFunc);
281+
this.registerCallMethodWithBlock('stage', name, numArgs, numRubyBlockArgs, createBlockFunc);
282282
return;
283283
}
284284
let methodToNumArgs = this._receiverToMethods[receiverName];
285285
if (!methodToNumArgs) methodToNumArgs = this._receiverToMethods[receiverName] = {};
286286

287-
let numArgsToCreateBlockFuncs = methodToNumArgs[name];
288-
if (!numArgsToCreateBlockFuncs) numArgsToCreateBlockFuncs = methodToNumArgs[name] = {};
287+
let numArgsToNumRubyBlockArgs = methodToNumArgs[name];
288+
if (!numArgsToNumRubyBlockArgs) numArgsToNumRubyBlockArgs = methodToNumArgs[name] = {};
289+
290+
let numRubyBlockArgsToCreateBlockFuncs = numArgsToNumRubyBlockArgs[numArgs];
291+
if (!numRubyBlockArgsToCreateBlockFuncs) numRubyBlockArgsToCreateBlockFuncs = numArgsToNumRubyBlockArgs[numArgs] = {};
289292

290-
let createBlockFuncs = numArgsToCreateBlockFuncs[numArgs];
291-
if (!createBlockFuncs) createBlockFuncs = numArgsToCreateBlockFuncs[numArgs] = [];
293+
let createBlockFuncs = numRubyBlockArgsToCreateBlockFuncs[numRubyBlockArgs];
294+
if (!createBlockFuncs) createBlockFuncs = numRubyBlockArgsToCreateBlockFuncs[numRubyBlockArgs] = [];
292295

293296
createBlockFuncs.push(createBlockFunc);
294297
}
295298

299+
registerCallMethod (receiverName, name, numArgs, createBlockFunc) {
300+
this.registerCallMethodWithBlock(receiverName, name, numArgs, 'none', createBlockFunc);
301+
}
302+
296303
_callMethod (receiver, name, args, rubyBlockArgs, rubyBlock, node) {
297304
const receiverName = this._getReceiverName(receiver);
298305
if (!receiverName) return null;
299306

300307
const methodToNumArgs = this._receiverToMethods[receiverName];
301308
if (!methodToNumArgs) return null;
302309

303-
const numArgsToCreateBlockFuncs = methodToNumArgs[name];
304-
if (!numArgsToCreateBlockFuncs) return null;
310+
const numArgsToNumRubyBlockArgs = methodToNumArgs[name];
311+
if (!numArgsToNumRubyBlockArgs) return null;
312+
313+
const numRubyBlockArgsToCreateBlockFuncs = numArgsToNumRubyBlockArgs[args.length];
314+
if (!numRubyBlockArgsToCreateBlockFuncs) return null;
305315

306-
const createBlockFuncs = numArgsToCreateBlockFuncs[args.length];
316+
let numRubyBlockArgs = 'none';
317+
if (rubyBlock) numRubyBlockArgs = rubyBlockArgs.length;
318+
const createBlockFuncs = numRubyBlockArgsToCreateBlockFuncs[numRubyBlockArgs];
307319
if (!createBlockFuncs) return null;
308320

309321
const params = {

0 commit comments

Comments
 (0)