smalruby/smalruby-editor

View on GitHub
app/assets/javascripts/blocks/looks.js.coffee.erb

Summary

Maintainability
Test Coverage
# 「見た目」ジャンル

<%
  category = 'looks'
  require 'smalruby_editor'
  require 'smalruby_editor/blockly_message_helper'
  color = SmalrubyEditor::COLORS[category.to_sym]
%>

# [ ]と( )秒言う
# [ ]と言う
# [ ]と( )秒考える
# [ ]と考える
<%
  %w(say think).each do |method|
%>

<% n = "#{category}_#{method}_second" %>
Blockly.Blocks['<%= n %>'] =
  init: ()->
    @setHelpUrl('')
    @setColour(<%= color %>)
    @interpolateMsg(<%= bm(".#{method}_with_second") %>,
                    ['TEXT', null, Blockly.ALIGN_RIGHT],
                    ['SEC', ['Number'], Blockly.ALIGN_RIGHT],
                    Blockly.ALIGN_RIGHT)
    @setInputsInline(true)
    @setPreviousStatement(true)
    @setNextStatement(true)
    @setTooltip('')

Blockly.Ruby['<%= n %>'] = (block) ->
  sec = Blockly.Ruby.valueToCode(@, 'SEC', Blockly.Ruby.ORDER_NONE) || '0'
  text = Blockly.Ruby.valueToCode(@, 'TEXT', Blockly.Ruby.ORDER_NONE) || Blockly.Ruby.quote_('')
  Blockly.Ruby.characterMethodCall_('<%= method %>', "message: #{text}, second: #{sec}")

<% n = "#{category}_#{method}" %>
Blockly.Blocks['<%= n %>'] =
  init: ()->
    @setHelpUrl('')
    @setColour(<%= color %>)
    @interpolateMsg(<%= bm(".#{method}") %>,
                    ['TEXT', null, Blockly.ALIGN_RIGHT],
                    Blockly.ALIGN_RIGHT)
    @setInputsInline(true)
    @setPreviousStatement(true)
    @setNextStatement(true)
    @setTooltip('')

Blockly.Ruby['<%= n %>'] = (block) ->
  text = Blockly.Ruby.valueToCode(@, 'TEXT', Blockly.Ruby.ORDER_NONE) || Blockly.Ruby.quote_('')
  Blockly.Ruby.characterMethodCall_('<%= method %>', "message: #{text}")
<% end %>

# 表示する
# 隠す
<%
  [
    ['show', 'true'],
    ['hide', 'false'],
  ].each do |suffix, val|
    n = "#{category}_#{suffix}"
%>

Blockly.Blocks['<%= n %>'] =
  init: ()->
    @setHelpUrl('')
    @setColour(<%= color %>)
    @appendDummyInput().appendField(<%= bm(".#{suffix}") %>)
    @setPreviousStatement(true)
    @setNextStatement(true)
    @setTooltip('')

Blockly.Ruby['<%= n %>'] = (block) ->
  Blockly.Ruby.characterSetVariable_('visible', '<%= val %>')
<% end %>

# 消滅する
<% n = "#{category}_vanish" %>
Blockly.Blocks['<%= n %>'] =
  init: ()->
    @setHelpUrl('')
    @setColour(<%= color %>)
    @appendDummyInput().appendField(<%= bm('.vanish') %>)
    @setPreviousStatement(true)
    @setNextStatement(true)
    @setTooltip('')

Blockly.Ruby['<%= n %>'] = (block) ->
  Blockly.Ruby.characterMethodCall_('vanish')


<% n = "#{category}_next_costume" %>
Blockly.Blocks['<%= n %>'] =
  init: ()->
    @setHelpUrl('')
    @setColour(<%= color %>)
    @appendDummyInput().appendField(<%= bm('.next_costume') %>)
    @setPreviousStatement(true)
    @setNextStatement(true)
    @setTooltip('')

Blockly.Ruby['<%= n %>'] = (block) ->
  Blockly.Ruby.characterMethodCall_('next_costume')


<% n = "#{category}_switch_costume" %>
Blockly.Blocks['<%= n %>'] =
  init: ()->
    @setHelpUrl('')
    @setColour(<%= color %>)
    @interpolateMsg(<%= bm('.switch_costume') %>,
                    ['COSTUME', new Smalruby.FieldCostume()],
                    Blockly.ALIGN_RIGHT)
    @setPreviousStatement(true)
    @setNextStatement(true)
    @setTooltip('')

Blockly.Ruby['<%= n %>'] = (block) ->
  costume = Blockly.Ruby.quote_(@getFieldValue('COSTUME'))
  Blockly.Ruby.characterMethodCall_("switch_costume(#{costume})")


# 大きさを( )%ずつ変える
# 大きさを( )%にする
<%
  [
    ['change_scale_by', 'ずつ変える', '+='],
    ['set_scale', 'にする', '='],
  ].each do |suffix, label_suffix, operator|
    n = "#{category}_#{suffix}"
%>

Blockly.Blocks['<%= n %>'] =
  init: ()->
    @setHelpUrl('')
    @setColour(<%= color %>)
    @interpolateMsg('大きさを%1%<%= label_suffix %>',
                     ['SCALE', ['Number'], Blockly.ALIGN_RIGHT],
                     Blockly.ALIGN_RIGHT)
    @setInputsInline(true)
    @setPreviousStatement(true)
    @setNextStatement(true)
    @setTooltip('')

Blockly.Ruby['<%= n %>'] = (block) ->
  scale = Blockly.Ruby.valueToCode(@, 'SCALE', Blockly.Ruby.ORDER_NONE) || '0'
  scale = parseInt(scale) / 100
  "self.scale <%= operator %> #{scale}\n"
<% end %>

# 変数:大きさ
<% n = "#{category}_self_scale" %>
Blockly.Blocks['<%= n %>'] =
  init: ()->
    @setHelpUrl('')
    @setColour(<%= color %>)
    @appendDummyInput().
      appendField('大きさ')
    @setOutput(true, 'Number')
    @setTooltip('')

Blockly.Ruby['<%= n %>'] = (block) ->
  ['scale', Blockly.Ruby.ORDER_ATOMIC]

# [▼プリセット画像]
<% n = "#{category}_preset_images" %>
Blockly.Blocks['<%= n %>'] =
  init: ()->
    images = [
      ['車1', 'car1.png'],
      ['車2', 'car2.png'],
      ['車3', 'car3.png'],
      ['車4', 'car4.png'],
      ['ボール1', 'ball1.png'],
      ['ボール2', 'ball2.png'],
      ['ボール3', 'ball3.png'],
      ['ボール4', 'ball4.png'],
      ['ボール5', 'ball5.png'],
      ['ボール6', 'ball6.png'],
      ['猫1', 'cat1.png'],
      ['猫2', 'cat2.png'],
      ['猫3', 'cat3.png'],
      ['かえる1', 'frog1.png'],
      ['コウガ リュウ1', 'ryu1.png'],
      ['コウガ リュウ2', 'ryu2.png'],
      ['イタチのタイチ', 'taichi1.png'],
      ['イタチのタイチ', 'taichi2.png'],
    ]
    @setHelpUrl('')
    @setColour(<%= color %>)
    @appendDummyInput().appendField(new Blockly.FieldDropdown(images), 'NAME')
    @setOutput(true, 'String')
    @setTooltip('')

Blockly.Ruby['<%= n %>'] = (block) ->
  code = Blockly.Ruby.quote_(@getFieldValue('NAME'))
  [code, Blockly.Ruby.ORDER_ATOMIC]