# 「動き」ジャンル <% category = 'motion' require 'smalruby_editor' require 'smalruby_editor/blockly_message_helper' color = SmalrubyEditor::COLORS[category.to_sym] %> # ( )歩動かす <% n = "#{category}_move" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm('.move') %>, ['STEP', ['Number'], Blockly.ALIGN_RIGHT], Blockly.ALIGN_RIGHT) @setInputsInline(true) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> arg = Blockly.Ruby.valueToCode(@, 'STEP', Blockly.Ruby.ORDER_NONE) || '0' Blockly.Ruby.characterMethodCall_('move', "#{arg}") # 時計回りに( )度回す # 反時計回りに( )度回す <% [ ['right', ''], ['left', '-'], ].each do |suffix, sign| n = "#{category}_rotate_#{suffix}" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm(".turn_#{suffix}_degrees") %>, ['ANGLE', ['Number'], Blockly.ALIGN_RIGHT], Blockly.ALIGN_RIGHT) @setInputsInline(true) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> arg = Blockly.Ruby.valueToCode(@, 'ANGLE', Blockly.Ruby.ORDER_NONE) || '0' Blockly.Ruby.characterMethodCall_('rotate', "<%= sign %>#{arg}") <% end %> # ( )度に向ける <% n = "#{category}_set_angle" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm('.point_in_direction') %>, ['ANGLE', ['Number'], Blockly.ALIGN_RIGHT], Blockly.ALIGN_RIGHT) @setInputsInline(true) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> angle = Blockly.Ruby.valueToCode(@, 'ANGLE', Blockly.Ruby.ORDER_NONE) || '0' Blockly.Ruby.characterSetVariable_('angle', angle) # マウスポインターへ向ける <% n = "#{category}_point_towards_mouse" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @appendDummyInput() .appendField(<%= bm('.point_towards_mouse') %>) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> "#{Blockly.Ruby.rn()}point_towards(:mouse)\n" # [▼]へ向ける <% n = "#{category}_point_towards_character" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm('.point_towards_character') %>, ['CHAR', new Smalruby.FieldCharacter()], Blockly.ALIGN_RIGHT) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> char = @getCharacterFieldValue() Blockly.Ruby.characterMethodCall_('point_towards', char) # x座標を( )、y座標を( )にする <% n = "#{category}_set_x_y" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm('.set_x_y') %>, ['X', ['Number'], Blockly.ALIGN_RIGHT], ['Y', ['Number'], Blockly.ALIGN_RIGHT], Blockly.ALIGN_RIGHT) @setInputsInline(true) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> x = Blockly.Ruby.valueToCode(@, 'X', Blockly.Ruby.ORDER_NONE) || '0' y = Blockly.Ruby.valueToCode(@, 'Y', Blockly.Ruby.ORDER_NONE) || '0' Blockly.Ruby.characterSetVariable_('position', "[#{x}, #{y}]") # マウスポインターへ行く <% n = "#{category}_go_to_mouse" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @appendDummyInput() .appendField(<%= bm('.go_to_mouse') %>) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> Blockly.Ruby.characterMethodCall_('go_to(:mouse)') # [▼]へ行く # <% n = "#{category}_go_to_character" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm('.go_to_character') %>, ['CHAR', new Smalruby.FieldCharacter()], Blockly.ALIGN_RIGHT) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> char = @getCharacterFieldValue() Blockly.Ruby.characterMethodCall_("go_to(#{char})") # ( )秒でx座標を( )、y座標を( )に変える <% n = "#{category}_glide_to_x_y" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg('%1秒でx座標を%2、y座標を%3に変える', ['SEC', ['Number'], Blockly.ALIGN_RIGHT], ['X', ['Number'], Blockly.ALIGN_RIGHT], ['Y', ['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' x = Blockly.Ruby.valueToCode(@, 'X', Blockly.Ruby.ORDER_NONE) || '0' y = Blockly.Ruby.valueToCode(@, 'Y', Blockly.Ruby.ORDER_NONE) || '0' "#{Blockly.Ruby.rn()}glide_to(second: #{sec}, x: #{x}, y: #{y})\n" # x座標を( )ずつ変える # x座標を( )にする # y座標を( )ずつ変える # y座標を( )にする <% [ ['change_x_by', 'X', '+='], ['set_x', 'X', '='], ['change_y_by', 'Y', '+='], ['set_y', 'Y', '='], ].each do |suffix, name, operator| n = "#{category}_#{suffix}" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm(".#{suffix}") %>, ['<%= name %>', ['Number'], Blockly.ALIGN_RIGHT], Blockly.ALIGN_RIGHT) @setInputsInline(true) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> <%= name.downcase %> = Blockly.Ruby.valueToCode(@, '<%= name %>', Blockly.Ruby.ORDER_NONE) || '0' Blockly.Ruby.characterSetVariable_('<%= name.downcase %>', <%= name.downcase %>, '<%= operator %>') <% end %> # もし端に着いたら、跳ね返る <% n = "#{category}_turn_if_reach_wall" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @appendDummyInput().appendField(<%= bm('.turn_if_reach_wall') %>) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> Blockly.Ruby.characterMethodCall_('turn_if_reach_wall') # 跳ね返る <% n = "#{category}_turn" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @appendDummyInput().appendField(<%= bm('.turn') %>) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> Blockly.Ruby.characterMethodCall_('turn') # [▼水平(X)]方向に跳ね返る <% n = "#{category}_turn_xy" %> Blockly.Blocks['<%= n %>'] = init: ()-> dropdown = [ [<%= bm('.turn_xy_x') %>, 'x'], [<%= bm('.turn_xy_y') %>, 'y'], ] @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm('.turn_xy') %>, ['XY', new Blockly.FieldDropdown(dropdown)], Blockly.ALIGN_RIGHT) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> xy = @getFieldValue('XY') Blockly.Ruby.characterMethodCall_("turn_#{xy}") # 回転方法を[▼]にする <% n = "#{category}_set_rotation_style" %> Blockly.Blocks['<%= n %>'] = init: ()-> dropdown = [ [<%= bm('.set_rotation_style_left_right') %>, 'left_right'], [<%= bm('.set_rotation_style_none') %>, 'none'], [<%= bm('.set_rotation_style_free') %>, 'free'], ] @setHelpUrl('') @setColour(<%= color %>) @interpolateMsg(<%= bm('.set_rotation_style') %>, ['STYLE', new Blockly.FieldDropdown(dropdown)], Blockly.ALIGN_RIGHT) @setPreviousStatement(true) @setNextStatement(true) @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> style = @getFieldValue('STYLE') Blockly.Ruby.characterSetVariable_('rotation_style', ":#{style}") # 変数:x座標 # 変数:y座標 # 変数:向き <% %w(x y angle).each do |method| n = "#{category}_self_#{method}" %> Blockly.Blocks['<%= n %>'] = init: ()-> @setHelpUrl('') @setColour(<%= color %>) @appendDummyInput().appendField(<%= bm(".self_#{method}") %>) @setOutput(true, 'Number') @setTooltip('') Blockly.Ruby['<%= n %>'] = (block) -> Blockly.Ruby.characterMethodCallInput_('<%= method %>') <% end %>