smalruby-editor 0.1.20-x86-mingw32 → 0.1.21-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of smalruby-editor might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/app/assets/javascripts/blocks/character.js.coffee.erb +3 -10
- data/app/assets/javascripts/blocks/control.js.coffee.erb +2 -1
- data/app/assets/javascripts/blocks/data.js.coffee.erb +2 -1
- data/app/assets/javascripts/blocks/etc.js.coffee.erb +2 -1
- data/app/assets/javascripts/blocks/events.js.coffee.erb +5 -4
- data/app/assets/javascripts/blocks/field_character.js.coffee.erb +9 -0
- data/app/assets/javascripts/blocks/hardware.js.coffee.erb +171 -54
- data/app/assets/javascripts/blocks/looks.js.coffee.erb +2 -1
- data/app/assets/javascripts/blocks/motion.js.coffee.erb +4 -16
- data/app/assets/javascripts/blocks/operators.js.coffee.erb +2 -1
- data/app/assets/javascripts/blocks/pen.js.coffee.erb +2 -1
- data/app/assets/javascripts/blocks/ruby.js.coffee.erb +2 -1
- data/app/assets/javascripts/blocks/sensing.js.coffee.erb +25 -3
- data/app/assets/javascripts/blocks/sound.js.coffee.erb +2 -1
- data/app/assets/javascripts/generators/ruby.js.coffee.erb +27 -5
- data/app/assets/javascripts/models/source_code.js.coffee +20 -7
- data/app/assets/javascripts/views/main_menu_view.js.coffee +5 -7
- data/app/assets/stylesheets/editor.css.scss +5 -1
- data/app/assets/stylesheets/toolbox.css.scss.erb +29 -24
- data/app/controllers/source_codes_controller.rb +7 -36
- data/app/helpers/editor_helper.rb +9 -0
- data/app/models/concerns/ruby_to_block/block/hardware_button_down_or_up.rb +25 -0
- data/app/models/concerns/ruby_to_block/block/hardware_button_not_use_pullup.rb +18 -0
- data/app/models/concerns/ruby_to_block/block/hardware_motor_driver.rb +22 -0
- data/app/models/concerns/ruby_to_block/block/hardware_motor_driver_set_speed.rb +20 -0
- data/app/models/concerns/ruby_to_block/block/hardware_motor_driver_speed.rb +24 -0
- data/app/models/concerns/ruby_to_block/block/hardware_on_button_down_or_up.rb +19 -0
- data/app/models/concerns/ruby_to_block/block/hardware_operation.rb +15 -0
- data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_set_speed.rb +22 -0
- data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_speed.rb +26 -0
- data/app/models/concerns/ruby_to_block/block/ruby_p.rb +19 -0
- data/app/models/concerns/ruby_to_block/block/{motion_reach_wall.rb → sensing_reach_wall.rb} +1 -1
- data/app/models/concerns/ruby_to_block/block/text.rb +3 -2
- data/app/models/source_code.rb +20 -0
- data/app/views/editor/_toolbox.html.haml +84 -63
- data/app/views/editor/index.html.haml +1 -1
- data/demos/adjust_2wd_car.rb.xml +179 -0
- data/demos/car_chase.rb.xml +129 -126
- data/demos/hardware_led.rb.xml +7 -4
- data/demos/pong.rb.xml +17 -14
- data/demos/star.rb.xml +115 -112
- data/lib/smalruby_editor/version.rb +3 -3
- data/lib/smalruby_editor.rb +16 -0
- data/public/assets/{application-c8991557a0789ac1bc9220f409e7f1c1.js → application-734570836cdba680c1568220a51af40f.js} +216 -86
- data/public/assets/{application-c8991557a0789ac1bc9220f409e7f1c1.js.gz → application-734570836cdba680c1568220a51af40f.js.gz} +0 -0
- data/public/assets/{application-d4fe6c0f970efe8eab9267fd08718d96.css → application-898cb749439fba4ce44cffeac1216201.css} +37 -9
- data/public/assets/{application-d4fe6c0f970efe8eab9267fd08718d96.css.gz → application-898cb749439fba4ce44cffeac1216201.css.gz} +0 -0
- data/public/assets/manifest-332a5a1668194028b55103e0ea45c054.json +1 -1
- data/smalruby-editor.gemspec +2 -1
- data/spec/acceptance/block_mode/blocks/events/on_hit.feature +2 -0
- data/spec/acceptance/block_mode/blocks/hardware/button_down_or_up.feature +79 -0
- data/spec/acceptance/block_mode/blocks/hardware/button_not_use_pullup.feature +61 -0
- data/spec/acceptance/block_mode/blocks/hardware/motor_driver.feature +73 -0
- data/spec/acceptance/block_mode/blocks/hardware/motor_driver_speed.feature +93 -0
- data/spec/acceptance/block_mode/blocks/hardware/on_button_down_or_up.feature +87 -0
- data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car_speed.feature +111 -0
- data/spec/acceptance/block_mode/blocks/motion/reach_wall.feature +1 -1
- data/spec/acceptance/block_mode/blocks/operators/text.feature +38 -0
- data/spec/acceptance/block_mode/blocks/sensing/hit.feature +98 -52
- data/spec/acceptance/block_mode/blocks/sensing/reach_wall.feature +98 -0
- data/spec/acceptance/block_mode/demo.feature +3 -1
- data/spec/acceptance/standalone/save.feature +51 -0
- data/spec/helpers/editor_helper_spec.rb +20 -0
- data/spec/javascripts/models/source_code_spec.coffee +40 -0
- data/spec/models/concerns/ruby_to_block/block/hardware_spec.rb +269 -0
- data/spec/models/concerns/ruby_to_block/block/motion_spec.rb +1 -1
- data/spec/models/concerns/ruby_to_block/block/{motion_reach_wall_spec.rb → sensing_reach_wall_spec.rb} +2 -2
- data/spec/models/concerns/ruby_to_block/block/text_spec.rb +39 -0
- data/spec/models/concerns/ruby_to_block_spec.rb +2 -2
- data/spec/models/source_code_spec.rb +53 -0
- data/spec/steps/base_steps.rb +5 -0
- metadata +56 -12
- data/demos/rgb_led_anode.rb.xml +0 -83
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20f711eaebefa511e016b5e546a05a7a9d6ba131
|
4
|
+
data.tar.gz: b2feda5f9659447e1b5736f8e7b6670129373cd7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c548cae61d1255fe7f1d347a5754ac96f03b30e0646485ae4cc6143f153da780fd7aff53f4f30258299201c001ce49b5eda000b920e0a3488504273c4f725c40
|
7
|
+
data.tar.gz: 67a0dda37bce833a7bc084d569008d99b1d9d543434cb99f380091f5dcbc354de45bf33da6b88b8d558c7f8d53c3a663a5a288d802c510103dd233edf9a8c792
|
data/.gitignore
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|
<%
|
4
4
|
category = 'character'
|
5
|
-
|
5
|
+
require 'smalruby_editor'
|
6
|
+
color = SmalrubyEditor::COLORS[category.to_sym]
|
6
7
|
%>
|
7
8
|
|
8
9
|
# キャラクター
|
@@ -65,15 +66,7 @@ Blockly.Blocks['<%= n %>'] =
|
|
65
66
|
|
66
67
|
Blockly.Ruby['<%= n %>'] = (block) ->
|
67
68
|
c = block.character
|
68
|
-
|
69
|
-
when 'left_right'
|
70
|
-
rotationStyle = ', rotation_style: :left_right'
|
71
|
-
when 'none'
|
72
|
-
rotationStyle = ', rotation_style: :none'
|
73
|
-
else
|
74
|
-
rotationStyle = ''
|
75
|
-
Blockly.Ruby.definitions_["character_#{c.get('name')}"] =
|
76
|
-
"#{c.get('name')} = Character.new(costume: #{Blockly.Ruby.quote_(c.costume())}, x: #{c.get('x')}, y: #{c.get('y')}, angle: #{c.get('angle')}#{rotationStyle})"
|
69
|
+
Blockly.Ruby.defineCharacter(c)
|
77
70
|
Blockly.Ruby.cs_().push(c)
|
78
71
|
try
|
79
72
|
targetBlock = block.getInputTargetBlock('DO')
|
@@ -2,10 +2,11 @@
|
|
2
2
|
|
3
3
|
<%
|
4
4
|
category = 'events'
|
5
|
-
|
5
|
+
require 'smalruby_editor'
|
6
|
+
color = SmalrubyEditor::COLORS[category.to_sym]
|
6
7
|
%>
|
7
8
|
|
8
|
-
#
|
9
|
+
# 実行ボタンがクリックされたとき
|
9
10
|
<% n = "#{category}_on_start" %>
|
10
11
|
Blockly.Blocks['<%= n %>'] =
|
11
12
|
init: ()->
|
@@ -69,7 +70,7 @@ Blockly.Blocks['<%= n %>'] =
|
|
69
70
|
@setHelpUrl('')
|
70
71
|
@setColour(<%= color %>)
|
71
72
|
@appendDummyInput()
|
72
|
-
.appendField(new Smalruby.FieldCharacter(), 'CHAR')
|
73
|
+
.appendField(new Smalruby.FieldCharacter(), 'CHAR')
|
73
74
|
.appendField('にぶつかったとき')
|
74
75
|
@appendStatementInput('DO')
|
75
76
|
@setPreviousStatement(true)
|
@@ -77,5 +78,5 @@ Blockly.Blocks['<%= n %>'] =
|
|
77
78
|
@setTooltip('')
|
78
79
|
|
79
80
|
Blockly.Ruby['<%= n %>'] = (block) ->
|
80
|
-
char = @
|
81
|
+
char = @getCharacterFieldValue()
|
81
82
|
Blockly.Ruby.characterEvent_(block, 'DO', 'hit', char)
|
@@ -106,3 +106,12 @@ Smalruby.FieldCharacter.NullCharacter =
|
|
106
106
|
off: -> $.noop
|
107
107
|
link: -> $.noop
|
108
108
|
unlink: -> $.noop
|
109
|
+
|
110
|
+
Blockly.Block.prototype.getCharacterFieldValue = (name = 'CHAR') ->
|
111
|
+
char = @getFieldValue(name)
|
112
|
+
|
113
|
+
if Blockly.Ruby.c()
|
114
|
+
c = Smalruby.Collections.CharacterSet.findWhere({ name: char })
|
115
|
+
Blockly.Ruby.defineCharacter(c)
|
116
|
+
|
117
|
+
char
|
@@ -2,13 +2,8 @@
|
|
2
2
|
|
3
3
|
<%
|
4
4
|
category = 'hardware'
|
5
|
-
|
6
|
-
|
7
|
-
looks: 270,
|
8
|
-
events: 33,
|
9
|
-
sensing: 190,
|
10
|
-
etc: 340,
|
11
|
-
}
|
5
|
+
require 'smalruby_editor'
|
6
|
+
colors = SmalrubyEditor::COLORS
|
12
7
|
%>
|
13
8
|
|
14
9
|
# ハードウェアの環境設定
|
@@ -35,6 +30,11 @@ acDropdown = [
|
|
35
30
|
['カソード', 'cathode']
|
36
31
|
]
|
37
32
|
|
33
|
+
lorPinDropdown = [
|
34
|
+
['左', 'left'],
|
35
|
+
['右', 'right'],
|
36
|
+
]
|
37
|
+
|
38
38
|
twoWDPinDropdown = (["D#{n}", "D#{n}"] for n in [2..10])
|
39
39
|
|
40
40
|
# ハードウェアを準備する
|
@@ -52,8 +52,8 @@ Blockly.Ruby['<%= n %>'] = (block) ->
|
|
52
52
|
|
53
53
|
# 「LED」サブジャンル
|
54
54
|
|
55
|
-
# LED[
|
56
|
-
# LED[
|
55
|
+
# LED[▼PIN]をオンにする
|
56
|
+
# LED[▼PIN]をオフにする
|
57
57
|
<%
|
58
58
|
[
|
59
59
|
['on', 'オン'],
|
@@ -83,7 +83,7 @@ Blockly.Ruby['<%= n %>'] = (block) ->
|
|
83
83
|
|
84
84
|
# 「RGB LED」サブジャンル
|
85
85
|
|
86
|
-
# RGB LED[▼アノード]コモン[
|
86
|
+
# RGB LED[▼アノード]コモン[▼PIN]を[カラー]にする
|
87
87
|
<% n = "#{category}_rgb_led_on" %>
|
88
88
|
Blockly.Blocks['<%= n %>'] =
|
89
89
|
init: ()->
|
@@ -111,7 +111,7 @@ Blockly.Ruby['<%= n %>'] = (block) ->
|
|
111
111
|
Blockly.Ruby.characterMethodCall_("rgb_led_#{ac}(#{Blockly.Ruby.quote_(pin)}).on",
|
112
112
|
"color: [#{red}, #{green}, #{blue}]")
|
113
113
|
|
114
|
-
# RGB LED[▼アノード]コモン[
|
114
|
+
# RGB LED[▼アノード]コモン[▼PIN]をオフにする
|
115
115
|
<% n = "#{category}_rgb_led_off" %>
|
116
116
|
Blockly.Blocks['<%= n %>'] =
|
117
117
|
init: ()->
|
@@ -223,7 +223,7 @@ Blockly.Ruby['<%= n %>'] = (block) ->
|
|
223
223
|
|
224
224
|
# 「サーボ」サブジャンル
|
225
225
|
|
226
|
-
# 「サーボ[
|
226
|
+
# 「サーボ[▼PIN]を( )度(5~180)にする」ブロック
|
227
227
|
<% n = "#{category}_servo_set_position" %>
|
228
228
|
Blockly.Blocks['<%= n %>'] =
|
229
229
|
init: ()->
|
@@ -248,14 +248,14 @@ Blockly.Ruby['<%= n %>'] = (block) ->
|
|
248
248
|
pos = Blockly.Ruby.valueToCode(@, 'POS', Blockly.Ruby.ORDER_FUNCTION_CALL) || '5'
|
249
249
|
Blockly.Ruby.characterMethodCall_("servo(#{Blockly.Ruby.quote_(pin)}).position = #{pos}")
|
250
250
|
|
251
|
-
#
|
251
|
+
# 「2WD車」サブジャンル
|
252
252
|
<% subcategory = 'two_wheel_drive_car' %>
|
253
253
|
|
254
|
-
# 2WD車[
|
255
|
-
# 2WD車[
|
256
|
-
# 2WD車[
|
257
|
-
# 2WD車[
|
258
|
-
# 2WD車[
|
254
|
+
# 2WD車[▼PIN]を進める
|
255
|
+
# 2WD車[▼PIN]をバックさせる
|
256
|
+
# 2WD車[▼PIN]を左に曲げる
|
257
|
+
# 2WD車[▼PIN]を右に曲げる
|
258
|
+
# 2WD車[▼PIN]を止める
|
259
259
|
<%
|
260
260
|
[
|
261
261
|
['forward', '進める'],
|
@@ -288,7 +288,7 @@ Blockly.Ruby['<%= n %>'] = (block) ->
|
|
288
288
|
Blockly.Ruby.characterMethodCall_("two_wheel_drive_car(#{Blockly.Ruby.quote_(pin)}).<%= method %>")
|
289
289
|
<% end %>
|
290
290
|
|
291
|
-
# 2WD車[
|
291
|
+
# 2WD車[▼PIN]を( )秒[▼コマンド]
|
292
292
|
<% n = "#{category}_#{subcategory}_run" %>
|
293
293
|
Blockly.Blocks['<%= n %>'] =
|
294
294
|
init: ()->
|
@@ -337,71 +337,188 @@ Blockly.Ruby['<%= n %>'] = (block) ->
|
|
337
337
|
code = Blockly.Ruby.quote_(@getFieldValue('COMMAND'))
|
338
338
|
[code, Blockly.Ruby.ORDER_ATOMIC]
|
339
339
|
|
340
|
-
#
|
340
|
+
# 2WD車[▼PIN]の[▼LOR]の速度を<速度の割合>%にする
|
341
|
+
<% n = "#{category}_#{subcategory}_set_speed" %>
|
342
|
+
Blockly.Blocks['<%= n %>'] =
|
343
|
+
init: ()->
|
344
|
+
@setHelpUrl('')
|
345
|
+
@setColour(<%= colors[:motion] %>)
|
346
|
+
@appendDummyInput()
|
347
|
+
.appendField('2WD車')
|
348
|
+
.appendField(new Blockly.FieldDropdown(pwmPinDropdown), 'PIN')
|
349
|
+
.appendField('の')
|
350
|
+
.appendField(new Blockly.FieldDropdown(lorPinDropdown), 'LOR')
|
351
|
+
.appendField('の速度を')
|
352
|
+
@interpolateMsg('%1%にする',
|
353
|
+
['SPEED', ['Number'], Blockly.ALIGN_RIGHT],
|
354
|
+
Blockly.ALIGN_RIGHT)
|
355
|
+
@setInputsInline(true)
|
356
|
+
@setPreviousStatement(true)
|
357
|
+
@setNextStatement(true)
|
358
|
+
@setTooltip('')
|
341
359
|
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
%>
|
360
|
+
Blockly.Ruby['<%= n %>'] = (block) ->
|
361
|
+
pin = @getFieldValue('PIN')
|
362
|
+
lor = @getFieldValue('LOR')
|
363
|
+
speed = Blockly.Ruby.valueToCode(@, 'SPEED', Blockly.Ruby.ORDER_NONE) || '100'
|
364
|
+
Blockly.Ruby.characterMethodCall_("two_wheel_drive_car(#{Blockly.Ruby.quote_(pin)}).#{lor}_speed = #{speed}")
|
365
|
+
|
366
|
+
# 2WD車[▼PIN]の[▼LOR]の速度(%)
|
367
|
+
<% n = "#{category}_#{subcategory}_speed" %>
|
368
|
+
Blockly.Blocks['<%= n %>'] =
|
369
|
+
init: ()->
|
370
|
+
@setHelpUrl('')
|
371
|
+
@setColour(<%= colors[:sensing] %>)
|
372
|
+
@appendDummyInput()
|
373
|
+
.appendField('2WD車')
|
374
|
+
.appendField(new Blockly.FieldDropdown(pwmPinDropdown), 'PIN')
|
375
|
+
.appendField('の')
|
376
|
+
.appendField(new Blockly.FieldDropdown(lorPinDropdown), 'LOR')
|
377
|
+
.appendField('の速度(%)')
|
378
|
+
@setOutput(true, 'Number')
|
379
|
+
@setTooltip('')
|
380
|
+
|
381
|
+
Blockly.Ruby['<%= n %>'] = (block) ->
|
382
|
+
pin = @getFieldValue('PIN')
|
383
|
+
lor = @getFieldValue('LOR')
|
384
|
+
Blockly.Ruby.characterMethodCallInput_("two_wheel_drive_car(#{Blockly.Ruby.quote_(pin)}).#{lor}_speed")
|
385
|
+
|
386
|
+
# 「(モータードライバ{で,の})モータ」サブジャンル
|
387
|
+
<% subcategory = 'motor_driver' %>
|
388
|
+
|
389
|
+
# (モータードライバ[▼PIN]で)モーターを[▼正転させる]
|
390
|
+
<% n = "#{category}_#{subcategory}" %>
|
391
|
+
Blockly.Blocks['<%= n %>'] =
|
392
|
+
init: ()->
|
393
|
+
methodDropdown = [
|
394
|
+
['正転させる', 'forward'],
|
395
|
+
['逆転させる', 'backward'],
|
396
|
+
['止める', 'stop'],
|
397
|
+
]
|
398
|
+
|
399
|
+
@setHelpUrl('')
|
400
|
+
@setColour(<%= colors[:motion] %>)
|
401
|
+
@appendDummyInput()
|
402
|
+
.appendField('(モータードライバ')
|
403
|
+
.appendField(new Blockly.FieldDropdown(pwmPinDropdown), 'PIN')
|
404
|
+
.appendField('で)モーターを')
|
405
|
+
.appendField(new Blockly.FieldDropdown(methodDropdown), 'METHOD')
|
406
|
+
@setInputsInline(true)
|
407
|
+
@setPreviousStatement(true)
|
408
|
+
@setNextStatement(true)
|
409
|
+
@setTooltip('')
|
410
|
+
|
411
|
+
Blockly.Ruby['<%= n %>'] = (block) ->
|
412
|
+
pin = @getFieldValue('PIN')
|
413
|
+
method = @getFieldValue('METHOD')
|
414
|
+
|
415
|
+
Blockly.Ruby.characterMethodCall_("motor_driver(#{Blockly.Ruby.quote_(pin)}).#{method}")
|
351
416
|
|
417
|
+
# (モータードライバ[▼PIN]の)モーターの速度を<SPEED>%にする
|
418
|
+
<% n = "#{category}_#{subcategory}_set_speed" %>
|
352
419
|
Blockly.Blocks['<%= n %>'] =
|
353
420
|
init: ()->
|
421
|
+
@setHelpUrl('')
|
422
|
+
@setColour(<%= colors[:motion] %>)
|
423
|
+
@appendDummyInput()
|
424
|
+
.appendField('(モータードライバ')
|
425
|
+
.appendField(new Blockly.FieldDropdown(pwmPinDropdown), 'PIN')
|
426
|
+
.appendField('の)モーターの速度を')
|
427
|
+
@interpolateMsg('%1%にする',
|
428
|
+
['SPEED', ['Number'], Blockly.ALIGN_RIGHT],
|
429
|
+
Blockly.ALIGN_RIGHT)
|
430
|
+
@setInputsInline(true)
|
431
|
+
@setPreviousStatement(true)
|
432
|
+
@setNextStatement(true)
|
433
|
+
@setTooltip('')
|
434
|
+
|
435
|
+
Blockly.Ruby['<%= n %>'] = (block) ->
|
436
|
+
pin = @getFieldValue('PIN')
|
437
|
+
speed = Blockly.Ruby.valueToCode(@, 'SPEED', Blockly.Ruby.ORDER_NONE) || '100'
|
438
|
+
Blockly.Ruby.characterMethodCall_("motor_driver(#{Blockly.Ruby.quote_(pin)}).speed = #{speed}")
|
439
|
+
|
440
|
+
# (モータードライバ[▼PIN]の)モーターの速度(%)
|
441
|
+
<% n = "#{category}_#{subcategory}_speed" %>
|
442
|
+
Blockly.Blocks['<%= n %>'] =
|
443
|
+
init: ()->
|
444
|
+
@setHelpUrl('')
|
445
|
+
@setColour(<%= colors[:sensing] %>)
|
446
|
+
@appendDummyInput()
|
447
|
+
.appendField('(モータードライバ')
|
448
|
+
.appendField(new Blockly.FieldDropdown(pwmPinDropdown), 'PIN')
|
449
|
+
.appendField('の)モーターの速度(%)')
|
450
|
+
@setOutput(true, 'Number')
|
451
|
+
@setTooltip('')
|
452
|
+
|
453
|
+
Blockly.Ruby['<%= n %>'] = (block) ->
|
454
|
+
pin = @getFieldValue('PIN')
|
455
|
+
Blockly.Ruby.characterMethodCallInput_("motor_driver(#{Blockly.Ruby.quote_(pin)}).speed")
|
456
|
+
|
457
|
+
|
458
|
+
# 「ボタン」サブジャンル
|
459
|
+
|
460
|
+
# 条件:ボタン[▼PIN]が[▼押された]
|
461
|
+
<% n = "#{category}_button_down_or_up" %>
|
462
|
+
Blockly.Blocks['<%= n %>'] =
|
463
|
+
init: ()->
|
464
|
+
douDropdown = window.SmalrubyEditor.Sensing.DownOrUpDropdown
|
465
|
+
|
354
466
|
@setHelpUrl('')
|
355
467
|
@setColour(<%= colors[:sensing] %>)
|
356
468
|
@appendDummyInput()
|
357
469
|
.appendField('ボタン')
|
358
470
|
.appendField(new Blockly.FieldDropdown(dioPinDropdown), 'PIN')
|
359
|
-
.appendField('
|
471
|
+
.appendField('が')
|
472
|
+
.appendField(new Blockly.FieldDropdown(douDropdown), 'DOU')
|
360
473
|
@setOutput(true, 'Boolean')
|
361
474
|
@setTooltip('')
|
362
475
|
|
363
476
|
Blockly.Ruby['<%= n %>'] = (block) ->
|
364
477
|
pin = @getFieldValue('PIN')
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
# ボタン[▼]を押したとき
|
369
|
-
# ボタン[▼]を離したとき
|
370
|
-
<%
|
371
|
-
[
|
372
|
-
['down', '押した'],
|
373
|
-
['up', '離した'],
|
374
|
-
].each do |name, label|
|
375
|
-
n = "#{category}_on_button_#{name}"
|
376
|
-
%>
|
478
|
+
dou = @getFieldValue('DOU')
|
479
|
+
Blockly.Ruby.characterMethodCallInput_("button(#{Blockly.Ruby.quote_(pin)}).#{dou}?")
|
377
480
|
|
481
|
+
# ボタン[▼PIN]が[▼押された]とき
|
482
|
+
<% n = "#{category}_on_button_down_or_up" %>
|
378
483
|
Blockly.Blocks['<%= n %>'] =
|
379
484
|
init: ()->
|
485
|
+
douDropdown = window.SmalrubyEditor.Sensing.DownOrUpDropdown
|
486
|
+
|
380
487
|
@setHelpUrl('')
|
381
488
|
@setColour(<%= colors[:events] %>)
|
382
489
|
@appendDummyInput()
|
383
490
|
.appendField('ボタン')
|
384
491
|
.appendField(new Blockly.FieldDropdown(dioPinDropdown), 'PIN')
|
385
|
-
.appendField('
|
492
|
+
.appendField('が')
|
493
|
+
.appendField(new Blockly.FieldDropdown(douDropdown), 'DOU')
|
494
|
+
.appendField('とき')
|
386
495
|
@appendStatementInput('DO')
|
387
496
|
@setPreviousStatement(true)
|
388
497
|
@setNextStatement(true)
|
389
498
|
@setTooltip('')
|
390
499
|
|
391
500
|
Blockly.Ruby['<%= n %>'] = (block) ->
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
"""
|
396
|
-
|
501
|
+
pin = @getFieldValue('PIN')
|
502
|
+
dou = @getFieldValue('DOU')
|
503
|
+
Blockly.Ruby.characterEvent_(block, 'DO', "button_#{dou}", Blockly.Ruby.quote_(pin))
|
397
504
|
|
398
|
-
|
399
|
-
|
505
|
+
# ボタン[▼PIN]のプルアップ抵抗を使わない
|
506
|
+
<% n = "#{category}_button_not_use_pullup" %>
|
507
|
+
Blockly.Blocks['<%= n %>'] =
|
508
|
+
init: ()->
|
509
|
+
@setHelpUrl('')
|
510
|
+
@setColour(<%= colors[:etc] %>)
|
511
|
+
@appendDummyInput()
|
512
|
+
.appendField('ボタン')
|
513
|
+
.appendField(new Blockly.FieldDropdown(dioPinDropdown), 'PIN')
|
514
|
+
.appendField('のプルアップ抵抗を使わない')
|
515
|
+
@setPreviousStatement(true)
|
516
|
+
@setNextStatement(true)
|
517
|
+
@setTooltip('')
|
400
518
|
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
<% end %>
|
519
|
+
Blockly.Ruby['<%= n %>'] = (block) ->
|
520
|
+
pin = @getFieldValue('PIN')
|
521
|
+
Blockly.Ruby.characterMethodCall_("button(#{Blockly.Ruby.quote_(pin)}).not_use_pullup")
|
405
522
|
|
406
523
|
# 「センサー」サブジャンル
|
407
524
|
|
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|
<%
|
4
4
|
category = 'motion'
|
5
|
-
|
5
|
+
require 'smalruby_editor'
|
6
|
+
color = SmalrubyEditor::COLORS[category.to_sym]
|
6
7
|
%>
|
7
8
|
|
8
9
|
# ( )歩動かす
|
@@ -97,7 +98,7 @@ Blockly.Blocks['<%= n %>'] =
|
|
97
98
|
@setTooltip('')
|
98
99
|
|
99
100
|
Blockly.Ruby['<%= n %>'] = (block) ->
|
100
|
-
char = @
|
101
|
+
char = @getCharacterFieldValue()
|
101
102
|
Blockly.Ruby.characterMethodCall_('point_towards', char)
|
102
103
|
|
103
104
|
# x座標を( )、y座標を( )にする
|
@@ -150,7 +151,7 @@ Blockly.Blocks['<%= n %>'] =
|
|
150
151
|
@setTooltip('')
|
151
152
|
|
152
153
|
Blockly.Ruby['<%= n %>'] = (block) ->
|
153
|
-
char = @
|
154
|
+
char = @getCharacterFieldValue()
|
154
155
|
Blockly.Ruby.characterMethodCall_("go_to(#{char})")
|
155
156
|
|
156
157
|
# ( )秒でx座標を( )、y座標を( )に変える
|
@@ -220,19 +221,6 @@ Blockly.Blocks['<%= n %>'] =
|
|
220
221
|
Blockly.Ruby['<%= n %>'] = (block) ->
|
221
222
|
Blockly.Ruby.characterMethodCall_('turn_if_reach_wall')
|
222
223
|
|
223
|
-
# 条件:端に着いた
|
224
|
-
<% n = "#{category}_reach_wall" %>
|
225
|
-
Blockly.Blocks['<%= n %>'] =
|
226
|
-
init: ()->
|
227
|
-
@setHelpUrl('')
|
228
|
-
@setColour(<%= color %>)
|
229
|
-
@appendDummyInput().appendField('端に着いた')
|
230
|
-
@setOutput(true, 'Boolean')
|
231
|
-
@setTooltip('')
|
232
|
-
|
233
|
-
Blockly.Ruby['<%= n %>'] = (block) ->
|
234
|
-
Blockly.Ruby.characterMethodCallInput_('reach_wall?')
|
235
|
-
|
236
224
|
# 跳ね返る
|
237
225
|
<% n = "#{category}_turn" %>
|
238
226
|
Blockly.Blocks['<%= n %>'] =
|
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|
<%
|
4
4
|
category = 'sensing'
|
5
|
-
|
5
|
+
require 'smalruby_editor'
|
6
|
+
color = SmalrubyEditor::COLORS[category.to_sym]
|
6
7
|
%>
|
7
8
|
|
8
9
|
# 調べるの環境設定
|
@@ -26,6 +27,27 @@ window.SmalrubyEditor.Sensing =
|
|
26
27
|
['中ボタン', 'M_MBUTTON'],
|
27
28
|
['右ボタン', 'M_RBUTTON'],
|
28
29
|
]
|
30
|
+
DownOrUpDropdown: [
|
31
|
+
['押された', 'down'],
|
32
|
+
['離された', 'up'],
|
33
|
+
]
|
34
|
+
|
35
|
+
# 条件:端に触れた
|
36
|
+
<% n = "#{category}_reach_wall" %>
|
37
|
+
Blockly.Blocks['<%= n %>'] =
|
38
|
+
init: ()->
|
39
|
+
@setHelpUrl('')
|
40
|
+
@setColour(<%= color %>)
|
41
|
+
@appendDummyInput().appendField('端に触れた')
|
42
|
+
@setOutput(true, 'Boolean')
|
43
|
+
@setTooltip('')
|
44
|
+
|
45
|
+
Blockly.Ruby['<%= n %>'] = (block) ->
|
46
|
+
Blockly.Ruby.characterMethodCallInput_('reach_wall?')
|
47
|
+
|
48
|
+
# HACK: 後方互換性のため、motion_reach_wallとして複製する
|
49
|
+
Blockly.Blocks['motion_reach_wall'] = Blockly.Blocks['<%= n %>']
|
50
|
+
Blockly.Ruby['motion_reach_wall'] = Blockly.Ruby['<%= n %>']
|
29
51
|
|
30
52
|
# 条件:キーボードの[▼キー]が[▼押された]
|
31
53
|
<% n = "#{category}_input_key_push_or_down" %>
|
@@ -104,7 +126,7 @@ Blockly.Blocks['<%= n %>'] =
|
|
104
126
|
@setTooltip('')
|
105
127
|
|
106
128
|
Blockly.Ruby['<%= n %>'] = (block) ->
|
107
|
-
char = @
|
129
|
+
char = @getCharacterFieldValue()
|
108
130
|
Blockly.Ruby.characterMethodCallInput_('hit?', char)
|
109
131
|
|
110
132
|
# [ ]と聞いて待つ
|
@@ -192,7 +214,7 @@ Blockly.Blocks['<%= n %>'] =
|
|
192
214
|
@setTooltip('')
|
193
215
|
|
194
216
|
Blockly.Ruby['<%= n %>'] = (block) ->
|
195
|
-
char = @
|
217
|
+
char = @getCharacterFieldValue()
|
196
218
|
property = @getFieldValue('PROPERTY')
|
197
219
|
c = Smalruby.Collections.CharacterSet.findWhere({ name: char })
|
198
220
|
Blockly.Ruby.characterMethodCallInput_(property, null, { object: c })
|
@@ -51,6 +51,20 @@ Blockly.Ruby.init = ->
|
|
51
51
|
@definitions_['receiver_stack'] = ['main']
|
52
52
|
@definitions_['character_stack'] = []
|
53
53
|
|
54
|
+
Blockly.Ruby.defineCharacter = (c) ->
|
55
|
+
name = c.get('name')
|
56
|
+
blockName = "character_#{name}"
|
57
|
+
if !Blockly.Ruby.definitions_[blockName]
|
58
|
+
switch c.get('rotationStyle')
|
59
|
+
when 'left_right'
|
60
|
+
rotationStyle = ', rotation_style: :left_right'
|
61
|
+
when 'none'
|
62
|
+
rotationStyle = ', rotation_style: :none'
|
63
|
+
else
|
64
|
+
rotationStyle = ''
|
65
|
+
Blockly.Ruby.definitions_[blockName] =
|
66
|
+
"#{name} = Character.new(costume: #{Blockly.Ruby.quote_(c.costume())}, x: #{c.get('x')}, y: #{c.get('y')}, angle: #{c.get('angle')}#{rotationStyle})"
|
67
|
+
|
54
68
|
Blockly.Ruby.characterStack = ->
|
55
69
|
@definitions_['character_stack']
|
56
70
|
|
@@ -159,12 +173,20 @@ Blockly.Ruby.finish = (code) ->
|
|
159
173
|
Blockly.Ruby.scrubNakedValue = (line) ->
|
160
174
|
line + '\n'
|
161
175
|
|
176
|
+
Blockly.Ruby.escapeChars_ =
|
177
|
+
'"': '\\"'
|
178
|
+
|
162
179
|
Blockly.Ruby.quote_ = (string) ->
|
163
|
-
#
|
164
|
-
#
|
165
|
-
|
166
|
-
|
167
|
-
|
180
|
+
# copy and modified goog.string.quote:
|
181
|
+
# http://docs.closure-library.googlecode.com/git/namespace_goog_string.html
|
182
|
+
s = String(string)
|
183
|
+
sb = ['"']
|
184
|
+
for i in [0...s.length]
|
185
|
+
do (i) ->
|
186
|
+
ch = s.charAt(i)
|
187
|
+
sb[i + 1] = Blockly.Ruby.escapeChars_[ch] || ch
|
188
|
+
sb.push('"')
|
189
|
+
sb.join('')
|
168
190
|
|
169
191
|
Blockly.Ruby.scrub_ = (block, code) ->
|
170
192
|
if code == null
|