smalruby-editor 0.1.20 → 0.1.21

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.

Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/app/assets/javascripts/blocks/character.js.coffee.erb +3 -10
  4. data/app/assets/javascripts/blocks/control.js.coffee.erb +2 -1
  5. data/app/assets/javascripts/blocks/data.js.coffee.erb +2 -1
  6. data/app/assets/javascripts/blocks/etc.js.coffee.erb +2 -1
  7. data/app/assets/javascripts/blocks/events.js.coffee.erb +5 -4
  8. data/app/assets/javascripts/blocks/field_character.js.coffee.erb +9 -0
  9. data/app/assets/javascripts/blocks/hardware.js.coffee.erb +171 -54
  10. data/app/assets/javascripts/blocks/looks.js.coffee.erb +2 -1
  11. data/app/assets/javascripts/blocks/motion.js.coffee.erb +4 -16
  12. data/app/assets/javascripts/blocks/operators.js.coffee.erb +2 -1
  13. data/app/assets/javascripts/blocks/pen.js.coffee.erb +2 -1
  14. data/app/assets/javascripts/blocks/ruby.js.coffee.erb +2 -1
  15. data/app/assets/javascripts/blocks/sensing.js.coffee.erb +25 -3
  16. data/app/assets/javascripts/blocks/sound.js.coffee.erb +2 -1
  17. data/app/assets/javascripts/generators/ruby.js.coffee.erb +27 -5
  18. data/app/assets/javascripts/models/source_code.js.coffee +20 -7
  19. data/app/assets/javascripts/views/main_menu_view.js.coffee +5 -7
  20. data/app/assets/stylesheets/editor.css.scss +5 -1
  21. data/app/assets/stylesheets/toolbox.css.scss.erb +29 -24
  22. data/app/controllers/source_codes_controller.rb +7 -36
  23. data/app/helpers/editor_helper.rb +9 -0
  24. data/app/models/concerns/ruby_to_block/block/hardware_button_down_or_up.rb +25 -0
  25. data/app/models/concerns/ruby_to_block/block/hardware_button_not_use_pullup.rb +18 -0
  26. data/app/models/concerns/ruby_to_block/block/hardware_motor_driver.rb +22 -0
  27. data/app/models/concerns/ruby_to_block/block/hardware_motor_driver_set_speed.rb +20 -0
  28. data/app/models/concerns/ruby_to_block/block/hardware_motor_driver_speed.rb +24 -0
  29. data/app/models/concerns/ruby_to_block/block/hardware_on_button_down_or_up.rb +19 -0
  30. data/app/models/concerns/ruby_to_block/block/hardware_operation.rb +15 -0
  31. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_set_speed.rb +22 -0
  32. data/app/models/concerns/ruby_to_block/block/hardware_two_wheel_drive_car_speed.rb +26 -0
  33. data/app/models/concerns/ruby_to_block/block/ruby_p.rb +19 -0
  34. data/app/models/concerns/ruby_to_block/block/{motion_reach_wall.rb → sensing_reach_wall.rb} +1 -1
  35. data/app/models/concerns/ruby_to_block/block/text.rb +3 -2
  36. data/app/models/source_code.rb +20 -0
  37. data/app/views/editor/_toolbox.html.haml +84 -63
  38. data/app/views/editor/index.html.haml +1 -1
  39. data/demos/adjust_2wd_car.rb.xml +179 -0
  40. data/demos/car_chase.rb.xml +129 -126
  41. data/demos/hardware_led.rb.xml +7 -4
  42. data/demos/pong.rb.xml +17 -14
  43. data/demos/star.rb.xml +115 -112
  44. data/lib/smalruby_editor.rb +16 -0
  45. data/lib/smalruby_editor/version.rb +3 -3
  46. data/public/assets/{application-c8991557a0789ac1bc9220f409e7f1c1.js → application-734570836cdba680c1568220a51af40f.js} +216 -86
  47. data/public/assets/{application-c8991557a0789ac1bc9220f409e7f1c1.js.gz → application-734570836cdba680c1568220a51af40f.js.gz} +0 -0
  48. data/public/assets/{application-d4fe6c0f970efe8eab9267fd08718d96.css → application-898cb749439fba4ce44cffeac1216201.css} +37 -9
  49. data/public/assets/{application-d4fe6c0f970efe8eab9267fd08718d96.css.gz → application-898cb749439fba4ce44cffeac1216201.css.gz} +0 -0
  50. data/public/assets/manifest-332a5a1668194028b55103e0ea45c054.json +1 -1
  51. data/smalruby-editor.gemspec +2 -1
  52. data/spec/acceptance/block_mode/blocks/events/on_hit.feature +2 -0
  53. data/spec/acceptance/block_mode/blocks/hardware/button_down_or_up.feature +79 -0
  54. data/spec/acceptance/block_mode/blocks/hardware/button_not_use_pullup.feature +61 -0
  55. data/spec/acceptance/block_mode/blocks/hardware/motor_driver.feature +73 -0
  56. data/spec/acceptance/block_mode/blocks/hardware/motor_driver_speed.feature +93 -0
  57. data/spec/acceptance/block_mode/blocks/hardware/on_button_down_or_up.feature +87 -0
  58. data/spec/acceptance/block_mode/blocks/hardware/two_wheel_drive_car_speed.feature +111 -0
  59. data/spec/acceptance/block_mode/blocks/motion/reach_wall.feature +1 -1
  60. data/spec/acceptance/block_mode/blocks/operators/text.feature +38 -0
  61. data/spec/acceptance/block_mode/blocks/sensing/hit.feature +98 -52
  62. data/spec/acceptance/block_mode/blocks/sensing/reach_wall.feature +98 -0
  63. data/spec/acceptance/block_mode/demo.feature +3 -1
  64. data/spec/acceptance/standalone/save.feature +51 -0
  65. data/spec/helpers/editor_helper_spec.rb +20 -0
  66. data/spec/javascripts/models/source_code_spec.coffee +40 -0
  67. data/spec/models/concerns/ruby_to_block/block/hardware_spec.rb +269 -0
  68. data/spec/models/concerns/ruby_to_block/block/motion_spec.rb +1 -1
  69. data/spec/models/concerns/ruby_to_block/block/{motion_reach_wall_spec.rb → sensing_reach_wall_spec.rb} +2 -2
  70. data/spec/models/concerns/ruby_to_block/block/text_spec.rb +39 -0
  71. data/spec/models/concerns/ruby_to_block_spec.rb +2 -2
  72. data/spec/models/source_code_spec.rb +53 -0
  73. data/spec/steps/base_steps.rb +5 -0
  74. metadata +56 -12
  75. data/demos/rgb_led_anode.rb.xml +0 -83
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ec9963fe6c59d88b5083a8dc61c2c44ef6ce6b9
4
- data.tar.gz: fd979fa5452fedb4a8510610cd2e826f5fe42b3d
3
+ metadata.gz: c8f9db51b4fbe5048d292165d61594a894d6b8c2
4
+ data.tar.gz: 83461c45e3816844b626c79217ed0aab4905a13c
5
5
  SHA512:
6
- metadata.gz: ff0fb931c40fc501d0c84c28d520e538cb4f7ecb06e9d55a7d1f065ff8f25a23847da67f1390b8f14bbbdef7c3f7b1524cd94b0dd58b90d450d4802719526f6b
7
- data.tar.gz: 6b1c3860b0ef8da51c38438a2ff9c6976ce32cb15da264e953083648deadd24e917beb3716d6788a55032c4bfea7a90b8ba78303733bbef3d38d39431e97b66a
6
+ metadata.gz: 08231775c5f8c410072fcf1a6a484f90da2a42f05e2cb6f6b092f2cc734d1a43f5b5fbdb6060606194e3bc1cf0ec2aa8ae6dc602a408cd3870ca3f336733ed90
7
+ data.tar.gz: de52b28fd77fbbdb05d7b1a044ce68053da28c6231a537a6c7601ac9f6125575d03744ff046654027e18bfaf51c54198ce34c1808f08f48a2f0b17285ead92be
data/.gitignore CHANGED
@@ -23,4 +23,3 @@
23
23
  /coverage
24
24
  /pkg
25
25
  /features
26
- /demos/*.xml
@@ -2,7 +2,8 @@
2
2
 
3
3
  <%
4
4
  category = 'character'
5
- color = 198
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
- switch c.get('rotationStyle')
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,7 +2,8 @@
2
2
 
3
3
  <%
4
4
  category = 'control'
5
- color = 43
5
+ require 'smalruby_editor'
6
+ color = SmalrubyEditor::COLORS[category.to_sym]
6
7
  %>
7
8
 
8
9
  # ( )秒待つ
@@ -2,5 +2,6 @@
2
2
 
3
3
  <%
4
4
  category = 'data'
5
- color = 29
5
+ require 'smalruby_editor'
6
+ color = SmalrubyEditor::COLORS[category.to_sym]
6
7
  %>
@@ -2,5 +2,6 @@
2
2
 
3
3
  <%
4
4
  category = 'etc'
5
- color = 270
5
+ require 'smalruby_editor'
6
+ color = SmalrubyEditor::COLORS[category.to_sym]
6
7
  %>
@@ -2,10 +2,11 @@
2
2
 
3
3
  <%
4
4
  category = 'events'
5
- color = 33
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') # TODO
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 = @getFieldValue('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
- colors = {
6
- motion: 208,
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
- # 「サーボ[▼ピン]を( )度(5~180)にする」ブロック
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
- ['down', '押している'],
347
- ['up', '離している'],
348
- ].each do |method, label|
349
- n = "#{category}_button_#{method}"
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('を<%= label %>')
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
- ["button(#{pin}).<%= method %>?", Blockly.Ruby.ORDER_ATOMIC]
366
- <% end %>
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('を<%= label %>とき')
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
- if (var0 = Blockly.Ruby.receiverName())
393
- pin = @getFieldValue('PIN')
394
- branch = Blockly.Ruby.statementToCode(block, 'DO') || '\n'
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
- #{var0}.on(:button_<%= name %>, #{pin}) do
399
- #{branch}end
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
- else
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 = 'looks'
5
- color = 270
5
+ require 'smalruby_editor'
6
+ color = SmalrubyEditor::COLORS[category.to_sym]
6
7
  %>
7
8
 
8
9
  # [ ]と( )秒言う
@@ -2,7 +2,8 @@
2
2
 
3
3
  <%
4
4
  category = 'motion'
5
- color = 208
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 = @getFieldValue('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 = @getFieldValue('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 %>'] =