Module: Processing

Defined in:
lib/dxruby_rp5/runner.rb,
lib/dxruby_rp5/runners/base.rb

Defined Under Namespace

Classes: Runner

Constant Summary collapse

KEY_METHODS =
<<-EOS
  def key_pressed
    Input.send(:key_pressed, key, key_code)
    Input.send(:key_pushed, key, key_code)
  end

  def key_released
    Input.send(:key_released, key, key_code)
  end
EOS
MOUSE_METHODS =
<<-EOS
  def mouse_pressed(event)
    Input.send(:mouse_pressed, event.get_button)
    Input.send(:mouse_pushed, event.get_button)
  end

  def mouse_released(event)
    Input.send(:mouse_released, event.get_button)
  end
EOS
SKETCH_TEMPLATE_FOR_RP5 =
<<-EOS
  class Sketch < Processing::App
    <% if has_methods %>
    <%= source %>
    <% else %>
    def setup
      size(DEFAULT_WIDTH, DEFAULT_HEIGHT, JAVA2D)
      <%= source %>
      no_loop
    end
    <% end %>
    <% if !has_key_methods %>
    #{KEY_METHODS}
    <% end %>

    <% if !has_mouse_methods %>
    #{MOUSE_METHODS}
    <% end %>
  end
EOS
SKETCH_TEMPLATE_FOR_DXRUBY_RP5 =
<<-EOS
  class Sketch < Processing::App
    def setup
      <%= source %>
      size(Window.width, Window.height, JAVA2D)
    end

    def draw
    end

    <% if !has_key_methods %>
    #{KEY_METHODS}
    <% end %>

    <% if !has_mouse_methods %>
    #{MOUSE_METHODS}
    <% end %>
  end
EOS

Class Method Summary collapse

Class Method Details

.load_and_run_sketchObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/dxruby_rp5/runners/base.rb', line 69

def self.load_and_run_sketch
  source = self.read_sketch_source
  has_sketch = !!source.match(/^[^#]*< Processing::App/)
  has_methods = !!source.match(/^[^#]*(def\s+setup|def\s+draw)/)
  has_window_loop = !!source.match(/^[^#]*(Window\.loop\sdo)/)
  has_key_methods = !!source.match(/^[^#]*(def\s+(key_pressed|key_typed|key_released))/)
  has_mouse_methods = !!source.match(/^[^#]*(def\s+(mouse_pressed|mouse_released))/)

  if has_sketch
    load File.join(SKETCH_ROOT, SKETCH_PATH)
    Processing::App.sketch_class.new if !$app
  else
    require 'erb'
    code = has_window_loop ?
      ERB.new(SKETCH_TEMPLATE_FOR_DXRUBY_RP5).result(binding) :
      ERB.new(SKETCH_TEMPLATE_FOR_RP5).result(binding)
    Object.class_eval code, SKETCH_PATH, -1
    Processing::App.sketch_class.new
  end
end