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 =
"  def key_pressed\n    Input.send(:key_pressed, key, key_code)\n    Input.send(:key_pushed, key, key_code)\n  end\n\n  def key_released\n    Input.send(:key_released, key, key_code)\n  end\n"
MOUSE_METHODS =
"  def mouse_pressed(event)\n    Input.send(:mouse_pressed, event.get_button)\n    Input.send(:mouse_pushed, event.get_button)\n  end\n\n  def mouse_released(event)\n    Input.send(:mouse_released, event.get_button)\n  end\n"
SKETCH_TEMPLATE_FOR_RP5 =
"  class Sketch < Processing::App\n    <% if has_methods %>\n    <%= source %>\n    <% else %>\n    def setup\n      size(DEFAULT_WIDTH, DEFAULT_HEIGHT, JAVA2D)\n      <%= source %>\n      no_loop\n    end\n    <% end %>\n    <% if !has_key_methods %>\n    \#{KEY_METHODS}\n    <% end %>\n\n    <% if !has_mouse_methods %>\n    \#{MOUSE_METHODS}\n    <% end %>\n  end\n"
SKETCH_TEMPLATE_FOR_DXRUBY_RP5 =
"  class Sketch < Processing::App\n    def setup\n      <%= source %>\n      size(Window.width, Window.height, JAVA2D)\n    end\n\n    def draw\n    end\n\n    <% if !has_key_methods %>\n    \#{KEY_METHODS}\n    <% end %>\n\n    <% if !has_mouse_methods %>\n    \#{MOUSE_METHODS}\n    <% end %>\n  end\n"

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