ruby-processing 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. data/CHANGELOG +137 -0
  2. data/LICENSE +37 -0
  3. data/README +61 -0
  4. data/bin/rp5 +4 -0
  5. data/lib/core/core.jar +0 -0
  6. data/lib/core/jruby-complete.jar +0 -0
  7. data/lib/ruby-processing.rb +27 -0
  8. data/lib/ruby-processing/app.rb +358 -0
  9. data/lib/ruby-processing/exporters/applet_exporter.rb +75 -0
  10. data/lib/ruby-processing/exporters/application_exporter.rb +87 -0
  11. data/lib/ruby-processing/exporters/base_exporter.rb +133 -0
  12. data/lib/ruby-processing/exporters/creator.rb +46 -0
  13. data/lib/ruby-processing/helpers/string.rb +27 -0
  14. data/lib/ruby-processing/runner.rb +143 -0
  15. data/lib/ruby-processing/runners/base.rb +5 -0
  16. data/lib/ruby-processing/runners/live.rb +11 -0
  17. data/lib/ruby-processing/runners/run.rb +5 -0
  18. data/lib/ruby-processing/runners/watch.rb +42 -0
  19. data/lib/templates/applet/images/built_with.jpg +0 -0
  20. data/lib/templates/applet/images/ruby.jpg +0 -0
  21. data/lib/templates/applet/images/top.png +0 -0
  22. data/lib/templates/applet/index.html.erb +111 -0
  23. data/lib/templates/applet/library/library.txt +1 -0
  24. data/lib/templates/application/Contents/Info.plist.erb +58 -0
  25. data/lib/templates/application/Contents/MacOS/JavaApplicationStub +0 -0
  26. data/lib/templates/application/Contents/PkgInfo +1 -0
  27. data/lib/templates/application/Contents/Resources/sketch.icns +0 -0
  28. data/lib/templates/application/lib/MANIFEST.MF +3 -0
  29. data/lib/templates/application/lib/args.txt.erb +3 -0
  30. data/lib/templates/application/lib/library/library.txt +1 -0
  31. data/lib/templates/application/run.erb +4 -0
  32. data/lib/templates/application/run.exe +0 -0
  33. data/lib/templates/create/blank_sketch.rb.erb +15 -0
  34. data/library/boids/boids.rb +222 -0
  35. data/library/control_panel/control_panel.rb +149 -0
  36. data/library/dxf/bin/processing/dxf/RawDXF.class +0 -0
  37. data/library/dxf/dxfviewer.jar +0 -0
  38. data/library/dxf/library/dxf.jar +0 -0
  39. data/library/javascript/library/export.txt +6 -0
  40. data/library/javascript/library/javascript.jar +0 -0
  41. data/library/minim/library/jl1.0.jar +0 -0
  42. data/library/minim/library/jsminim.jar +0 -0
  43. data/library/minim/library/minim-spi.jar +0 -0
  44. data/library/minim/library/minim.jar +0 -0
  45. data/library/minim/library/mp3spi1.9.4.jar +0 -0
  46. data/library/minim/library/tritonus_aos.jar +0 -0
  47. data/library/minim/library/tritonus_share.jar +0 -0
  48. data/library/minim/license.txt +339 -0
  49. data/library/minim/version.txt +1 -0
  50. data/library/net/bin/processing/net/Client.class +0 -0
  51. data/library/net/bin/processing/net/Server.class +0 -0
  52. data/library/net/library/net.jar +0 -0
  53. data/library/opengl/bin/processing/opengl/PGraphicsOpenGL$ImageCache.class +0 -0
  54. data/library/opengl/bin/processing/opengl/PGraphicsOpenGL$TessCallback.class +0 -0
  55. data/library/opengl/bin/processing/opengl/PGraphicsOpenGL.class +0 -0
  56. data/library/opengl/library/export.txt +13 -0
  57. data/library/opengl/library/gluegen-rt-natives-linux-amd64.jar +0 -0
  58. data/library/opengl/library/gluegen-rt-natives-linux-i586.jar +0 -0
  59. data/library/opengl/library/gluegen-rt-natives-macosx-ppc.jar +0 -0
  60. data/library/opengl/library/gluegen-rt-natives-macosx-universal.jar +0 -0
  61. data/library/opengl/library/gluegen-rt-natives-windows-amd64.jar +0 -0
  62. data/library/opengl/library/gluegen-rt-natives-windows-i586.jar +0 -0
  63. data/library/opengl/library/gluegen-rt.dll +0 -0
  64. data/library/opengl/library/gluegen-rt.jar +0 -0
  65. data/library/opengl/library/gluegen-rt.jar.pack.gz +0 -0
  66. data/library/opengl/library/jogl-natives-linux-amd64.jar +0 -0
  67. data/library/opengl/library/jogl-natives-linux-i586.jar +0 -0
  68. data/library/opengl/library/jogl-natives-macosx-ppc.jar +0 -0
  69. data/library/opengl/library/jogl-natives-macosx-universal.jar +0 -0
  70. data/library/opengl/library/jogl-natives-windows-amd64.jar +0 -0
  71. data/library/opengl/library/jogl-natives-windows-i586.jar +0 -0
  72. data/library/opengl/library/jogl.dll +0 -0
  73. data/library/opengl/library/jogl.jar +0 -0
  74. data/library/opengl/library/jogl.jar.pack.gz +0 -0
  75. data/library/opengl/library/jogl_awt.dll +0 -0
  76. data/library/opengl/library/jogl_cg.dll +0 -0
  77. data/library/opengl/library/libgluegen-rt.jnilib +0 -0
  78. data/library/opengl/library/libgluegen-rt.so +0 -0
  79. data/library/opengl/library/libjogl.jnilib +0 -0
  80. data/library/opengl/library/libjogl.so +0 -0
  81. data/library/opengl/library/libjogl_awt.jnilib +0 -0
  82. data/library/opengl/library/libjogl_awt.so +0 -0
  83. data/library/opengl/library/libjogl_cg.jnilib +0 -0
  84. data/library/opengl/library/libjogl_cg.so +0 -0
  85. data/library/opengl/library/opengl.jar +0 -0
  86. data/library/pdf/bin/processing/pdf/PGraphicsPDF.class +0 -0
  87. data/library/pdf/library/itext.jar +0 -0
  88. data/library/pdf/library/pdf.jar +0 -0
  89. data/library/pdf/notes.txt +9 -0
  90. data/library/serial/bin/processing/serial/Serial.class +0 -0
  91. data/library/serial/library/RXTXcomm.jar +0 -0
  92. data/library/serial/library/export.txt +3 -0
  93. data/library/serial/library/librxtxSerial.jnilib +0 -0
  94. data/library/serial/library/librxtxSerial.so +0 -0
  95. data/library/serial/library/rxtxSerial.dll +0 -0
  96. data/library/serial/library/serial.jar +0 -0
  97. data/library/video/bin/processing/video/Capture.class +0 -0
  98. data/library/video/bin/processing/video/Movie.class +0 -0
  99. data/library/video/bin/processing/video/MovieMaker.class +0 -0
  100. data/library/video/library/video.jar +0 -0
  101. data/samples/animator.rb +47 -0
  102. data/samples/circle_collision.rb +213 -0
  103. data/samples/fern.rb +49 -0
  104. data/samples/flight_patterns.rb +64 -0
  105. data/samples/full_screen.rb +35 -0
  106. data/samples/getting_started.rb +43 -0
  107. data/samples/jwishy.rb +85 -0
  108. data/samples/kinetic_type.rb +100 -0
  109. data/samples/learning_processing/ABOUT +11 -0
  110. data/samples/learning_processing/chapter_01/1_stroke_and_fill.rb +34 -0
  111. data/samples/learning_processing/chapter_01/2_nofill.rb +25 -0
  112. data/samples/learning_processing/chapter_01/3_rgb_color.rb +31 -0
  113. data/samples/learning_processing/chapter_01/4_alpha_transparency.rb +36 -0
  114. data/samples/learning_processing/chapter_01/5_zoog.rb +37 -0
  115. data/samples/learning_processing/chapter_02/1_zoog_again.rb +39 -0
  116. data/samples/learning_processing/chapter_03/1_zoog_as_dynamic_sketch.rb +44 -0
  117. data/samples/learning_processing/chapter_03/2_mouse_x_and_mouse_y.rb +26 -0
  118. data/samples/learning_processing/chapter_03/3_zoog_as_dynamic_sketch_with_variation.rb +41 -0
  119. data/samples/learning_processing/chapter_03/4_drawing_a_continuous_line.rb +18 -0
  120. data/samples/learning_processing/chapter_03/5_mouse_pressed_and_key_pressed.rb +29 -0
  121. data/samples/learning_processing/chapter_03/6_interactive_zoog.rb +50 -0
  122. data/samples/learning_processing/chapter_04/1_variable_declaration.rb +24 -0
  123. data/samples/learning_processing/chapter_04/2_using_variables.rb +27 -0
  124. data/samples/learning_processing/chapter_04/3_varying_variables.rb +27 -0
  125. data/samples/learning_processing/chapter_04/4_many_variables.rb +38 -0
  126. data/samples/learning_processing/chapter_04/5_using_system_variables.rb +28 -0
  127. data/samples/learning_processing/chapter_04/6_ellipse_with_variables.rb +24 -0
  128. data/samples/learning_processing/chapter_04/7_filling_variables_with_random_values.rb +27 -0
  129. data/samples/learning_processing/chapter_04/8_variable_zoog.rb +50 -0
  130. data/samples/learning_processing/chapter_05/01_conditionals.rb +31 -0
  131. data/samples/learning_processing/chapter_05/02_more_conditionals.rb +38 -0
  132. data/samples/learning_processing/chapter_05/03_rollovers.rb +34 -0
  133. data/samples/learning_processing/chapter_05/04_hold_down_the_button.rb +33 -0
  134. data/samples/learning_processing/chapter_05/05_button_as_switch.rb +39 -0
  135. data/samples/learning_processing/chapter_05/06_bouncing_ball.rb +33 -0
  136. data/samples/learning_processing/chapter_05/07_bouncing_color.rb +37 -0
  137. data/samples/learning_processing/chapter_05/08_square_following_edge.rb +59 -0
  138. data/samples/learning_processing/chapter_05/09_simple_gravity.rb +43 -0
  139. data/samples/learning_processing/chapter_05/10_zoog_and_conditionals.rb +53 -0
  140. data/samples/learning_processing/chapter_06/01_many_lines.rb +29 -0
  141. data/samples/learning_processing/chapter_06/02_many_lines_with_variables.rb +53 -0
  142. data/samples/learning_processing/chapter_06/03_while_loop.rb +30 -0
  143. data/samples/learning_processing/chapter_06/04_infinite_loop.rb +25 -0
  144. data/samples/learning_processing/chapter_06/05_another_infinite_loop.rb +33 -0
  145. data/samples/learning_processing/chapter_06/06_legs_with_a_for_loop.rb +41 -0
  146. data/samples/learning_processing/chapter_06/07_local_variables.rb +39 -0
  147. data/samples/learning_processing/chapter_06/08_lines_one_at_a_time.rb +30 -0
  148. data/samples/learning_processing/chapter_06/09_simple_while_loop_with_interactivity.rb +41 -0
  149. data/samples/learning_processing/chapter_06/10_zoog_with_arms.rb +56 -0
  150. data/samples/learning_processing/chapter_06/11_multiple_zoogs.rb +46 -0
  151. data/samples/learning_processing/chapter_07/01_defining_a_function.rb +22 -0
  152. data/samples/learning_processing/chapter_07/02_calling_a_function.rb +22 -0
  153. data/samples/learning_processing/chapter_07/03_bouncing_ball_with_functions.rb +49 -0
  154. data/samples/learning_processing/chapter_07/04_function_returns_distance.rb +48 -0
  155. data/samples/learning_processing/chapter_07/05_zoog_with_functions.rb +71 -0
  156. data/samples/learning_processing/chapter_08/01_car_class_and_car_variable.rb +45 -0
  157. data/samples/learning_processing/chapter_08/02_two_car_objects.rb +60 -0
  158. data/samples/learning_processing/chapter_08/03_object_oriented_zoog.rb +81 -0
  159. data/samples/learning_processing/chapter_10/01_catcher.rb +35 -0
  160. data/samples/learning_processing/chapter_10/02_bouncing_ball.rb +44 -0
  161. data/samples/learning_processing/chapter_10/03_bouncing_balls_with_intersection.rb +69 -0
  162. data/samples/learning_processing/chapter_10/04_a_timer.rb +24 -0
  163. data/samples/learning_processing/chapter_10/05_object_oriented_timer.rb +42 -0
  164. data/samples/learning_processing/chapter_10/06_simple_raindrop.rb +23 -0
  165. data/samples/learning_processing/chapter_10/07_drops_one_at_a_time.rb +63 -0
  166. data/samples/learning_processing/chapter_13/02_random_number_distribution.rb +24 -0
  167. data/samples/learning_processing/chapter_13/03_probabilities.rb +33 -0
  168. data/samples/learning_processing/chapter_13/04_perlin_noise.rb +22 -0
  169. data/samples/learning_processing/chapter_13/06_oscillation.rb +29 -0
  170. data/samples/learning_processing/chapter_13/07_wave.rb +31 -0
  171. data/samples/learning_processing/chapter_13/08_recursion.rb +30 -0
  172. data/samples/learning_processing/chapter_13/09_two_dimensional_array.rb +21 -0
  173. data/samples/learning_processing/chapter_13/10_two_dimensional_array_with_objects.rb +54 -0
  174. data/samples/learning_processing/chapter_14/01_growing_rectangle.rb +26 -0
  175. data/samples/learning_processing/chapter_14/02_multiple_translations.rb +37 -0
  176. data/samples/learning_processing/chapter_14/03_depth_rectangle.rb +29 -0
  177. data/samples/learning_processing/chapter_14/04_pyramid_using_beingshape.rb +55 -0
  178. data/samples/learning_processing/chapter_14/05_rotate_rectangle_around_center.rb +28 -0
  179. data/samples/learning_processing/chapter_14/06_rotate_z.rb +24 -0
  180. data/samples/learning_processing/chapter_14/07_rotate_x.rb +24 -0
  181. data/samples/learning_processing/chapter_14/08_rotate_y.rb +24 -0
  182. data/samples/learning_processing/chapter_14/09_rotate_all.rb +24 -0
  183. data/samples/learning_processing/chapter_14/10_draw_pyramid.rb +59 -0
  184. data/samples/learning_processing/chapter_14/12_rotating_one_square.rb +25 -0
  185. data/samples/learning_processing/chapter_14/13_rotating_another_square.rb +25 -0
  186. data/samples/learning_processing/chapter_14/14_rotating_both_squares.rb +43 -0
  187. data/samples/learning_processing/chapter_14/15_rotating_many_things.rb +56 -0
  188. data/samples/learning_processing/chapter_14/16_simple_solar_system.rb +53 -0
  189. data/samples/learning_processing/chapter_14/17_nested_push_and_pop.rb +50 -0
  190. data/samples/learning_processing/chapter_14/18_object_oriented_solar_system.rb +69 -0
  191. data/samples/learning_processing/chapter_15/01_hello_world_image.rb +20 -0
  192. data/samples/learning_processing/chapter_15/02_image_sprite.rb +29 -0
  193. data/samples/learning_processing/chapter_15/03_swapping_images.rb +25 -0
  194. data/samples/learning_processing/chapter_15/04_image_sequence.rb +22 -0
  195. data/samples/learning_processing/chapter_15/05_setting_pixels.rb +19 -0
  196. data/samples/learning_processing/chapter_15/06_pixels_2d.rb +29 -0
  197. data/samples/learning_processing/chapter_15/07_image_pixels.rb +40 -0
  198. data/samples/learning_processing/chapter_15/08_image_brightness.rb +29 -0
  199. data/samples/learning_processing/chapter_15/09_flashlight_effect.rb +42 -0
  200. data/samples/learning_processing/chapter_15/10_brightness_threshold.rb +33 -0
  201. data/samples/learning_processing/chapter_15/11_brightness_threshold_with_filter.rb +20 -0
  202. data/samples/learning_processing/chapter_15/12_pixel_neighbour_differences.rb +43 -0
  203. data/samples/learning_processing/chapter_15/14_pointillism.rb +34 -0
  204. data/samples/learning_processing/chapter_15/15_2d_image_mapped_to_3d.rb +43 -0
  205. data/samples/learning_processing/chapter_15/data/animal0.jpg +0 -0
  206. data/samples/learning_processing/chapter_15/data/animal1.jpg +0 -0
  207. data/samples/learning_processing/chapter_15/data/animal2.jpg +0 -0
  208. data/samples/learning_processing/chapter_15/data/animal3.jpg +0 -0
  209. data/samples/learning_processing/chapter_15/data/animal4.jpg +0 -0
  210. data/samples/learning_processing/chapter_15/data/animal5.jpg +0 -0
  211. data/samples/learning_processing/chapter_15/data/animal6.jpg +0 -0
  212. data/samples/learning_processing/chapter_15/data/face.jpg +0 -0
  213. data/samples/learning_processing/chapter_15/data/mysummervacation.jpg +0 -0
  214. data/samples/learning_processing/chapter_15/data/sunflower.jpg +0 -0
  215. data/samples/learning_processing/chapter_16/01_display_video.rb +25 -0
  216. data/samples/learning_processing/chapter_16/02_manipulate_video_image.rb +24 -0
  217. data/samples/reflection.rb +26 -0
  218. data/samples/simple_buffer.rb +49 -0
  219. data/samples/tree.rb +83 -0
  220. metadata +348 -0
@@ -0,0 +1,5 @@
1
+ $LOAD_PATH << File.expand_path(File.dirname(__FILE__) + "/../../")
2
+
3
+ module Processing
4
+ SKETCH_PATH = ARGV[0]
5
+ end
@@ -0,0 +1,11 @@
1
+ # An IRB shell for live coding.
2
+ # This flavor will either load up empty Ruby-Processing,
3
+ # or will start with your sketch.
4
+
5
+ require "#{File.dirname(__FILE__)}/base.rb"
6
+
7
+ require 'irb'
8
+ ARGV[0] = nil # To keep IRB from trying to run it multiple times.
9
+ require Processing::SKETCH_PATH
10
+ IRB.setup(__FILE__)
11
+ IRB.start()
@@ -0,0 +1,5 @@
1
+ # Windows apps start life in the wrong folder.
2
+ ARGV[1] = nil and Dir.chdir('lib') if ARGV[1] == '--windows-app'
3
+
4
+ require "#{File.dirname(__FILE__)}/base.rb"
5
+ require Processing::SKETCH_PATH
@@ -0,0 +1,42 @@
1
+ require "#{File.dirname(__FILE__)}/base.rb"
2
+
3
+ module Processing
4
+
5
+ # A sketch loader, observer, and reloader, to tighten
6
+ # the feedback between code and effect.
7
+ class Watcher
8
+
9
+ # Sic a new Processing::Watcher on a given sketch.
10
+ def initialize(sketch)
11
+ @file = sketch
12
+ @time = Time.now
13
+ load @file
14
+ start_watching
15
+ end
16
+
17
+ # Kicks off a thread to watch the sketch, reloading Ruby-Processing
18
+ # and restarting the sketch whenever it changes.
19
+ def start_watching
20
+ thread = Thread.start do
21
+ loop do
22
+ file_mtime = File.stat(@file).mtime
23
+ if file_mtime > @time
24
+ @time = file_mtime
25
+ Processing::App.wipe_out_current_app!
26
+ GC.start
27
+ begin
28
+ load @file
29
+ rescue SyntaxError
30
+ print "Syntax Error in your sketch: ", $!, "\n"
31
+ end
32
+ end
33
+ sleep 0.1
34
+ end
35
+ end
36
+ thread.join
37
+ end
38
+
39
+ end
40
+ end
41
+
42
+ Processing::Watcher.new(Processing::SKETCH_PATH)
Binary file
@@ -0,0 +1,111 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+
5
+ <head>
6
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
7
+ <title><%= @title %></title>
8
+ <style type="text/css">
9
+ body {
10
+ background: #000000;
11
+ font-family: Arial;
12
+ font-size: 12px;
13
+ color: #bbb;
14
+ text-align: center;
15
+ line-height: 16px;
16
+ }
17
+ a {
18
+ color: #bbb;
19
+ margin: 0; padding: 0;
20
+ }
21
+ a img {
22
+ border: 0;
23
+ margin: 0;
24
+ padding: 0;
25
+ }
26
+ #container {
27
+ width: <%= @width_plus_14 %>px;
28
+ margin: 0 auto;
29
+ margin-top: 20px;
30
+ }
31
+ #the_applet {
32
+ padding: 6px;
33
+ padding-top: 7px; padding-bottom: 2px;
34
+ background: #262626 url(images/top.png) top left repeat-x;
35
+ border: 1px solid #363636; border-top: 0;
36
+ }
37
+ #built_with {
38
+ width: 150px;
39
+ margin: 0 auto;
40
+ margin-top: 30px;
41
+ padding: 0;
42
+ }
43
+ #description {
44
+ font-size: 12px;
45
+ width: <%= @width %>px;
46
+ padding: 7px;
47
+ background: #111;
48
+ text-align: justify;
49
+ margin: 0 auto;
50
+ margin-top: 30px; margin-bottom: 10px;
51
+ border: 1px solid #363636;
52
+ }
53
+ #description h1 {
54
+ font-size: 18px;
55
+ font-weight: normal;
56
+ color: #999;
57
+ font-variant: small-caps;
58
+ text-align: center;
59
+ }
60
+ </style>
61
+ </head>
62
+
63
+ <body>
64
+ <div id="container">
65
+
66
+ <div id="the_applet">
67
+ <object
68
+ type="application/x-java-applet"
69
+ code="<%= @starting_class %>"
70
+ codebase="."
71
+ style="margin: 0; padding: 0;"
72
+ width="<%= @width %>" height="<%= @height %>">
73
+
74
+ <param name="archive" value="<%= @file_list %>" />
75
+ <param name="jruby.script" value="<%= @main_file %>" />
76
+ <param name="image" value="images/ruby.jpg" />
77
+ <param name="boxbgcolor" value="#000000" />
78
+ <param name="lang" value="en" />
79
+ <param name="mayscript" value="true" />
80
+ <param name="scriptable" value="true" />
81
+ <param name="progressbar" value="true" />
82
+
83
+ <% if @opengl %>
84
+ <param name="codebase_lookup" value="false" />
85
+ <param name="subapplet.classname" value="org.jruby.JRubyApplet" />
86
+ <param name="subapplet.displayname" value="<%= @title %>" />
87
+ <% end %>
88
+
89
+ <!-- And if you don't have java. -->
90
+ To view this content, you need to install Java from <a href="http://java.com">java.com</a>
91
+ </object>
92
+ </div>
93
+
94
+ <div id="built_with">
95
+ <a href="http://the-shoebox.org/apps/44/">
96
+ <img src="images/built_with.jpg" alt="Ruby-Processing" />
97
+ </a>
98
+ Via <a href="http://jruby.codehaus.org/">JRuby</a> and <a href="http://processing.org/">Processing</a><br />
99
+ Source: <a href="<%= @main_file %>"><%= @main_file %></a>
100
+ </div>
101
+
102
+ <% unless @description.empty? %>
103
+ <div id="description">
104
+ <h1><%= @title %></h1>
105
+ <p><%= @description %></p>
106
+ </div>
107
+ <% end %>
108
+
109
+ </div>
110
+ </body>
111
+ </html>
@@ -0,0 +1 @@
1
+ All of your included libraries will be safely tucked away in here.
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleName</key>
6
+ <string><%= @title %></string>
7
+ <key>CFBundleVersion</key>
8
+ <string>1.0</string>
9
+ <key>CFBundleAllowMixedLocalizations</key>
10
+ <string>true</string>
11
+ <key>CFBundleExecutable</key>
12
+ <string>JavaApplicationStub</string>
13
+ <key>CFBundleDevelopmentRegion</key>
14
+ <string>English</string>
15
+ <key>CFBundlePackageType</key>
16
+ <string>APPL</string>
17
+ <key>CFBundleSignature</key>
18
+ <string>????</string>
19
+ <key>CFBundleInfoDictionaryVersion</key>
20
+ <string>6.0</string>
21
+ <key>CFBundleIconFile</key>
22
+ <string>sketch.icns</string>
23
+ <key>CFBundleIdentifier</key>
24
+ <string>org.ruby-processing.<%= @class_name %></string>
25
+ <key>Java</key>
26
+ <dict>
27
+ <key>VMOptions</key>
28
+ <string>-Xms128M -Xmx256M</string>
29
+ <key>MainClass</key>
30
+ <string>org.jruby.Main</string>
31
+ <key>WorkingDirectory</key>
32
+ <string>$JAVAROOT</string>
33
+ <key>Arguments</key>
34
+ <string>ruby-processing/runners/run.rb <%= @main_file %></string>
35
+ <key>JVMVersion</key>
36
+ <string>1.3+</string>
37
+ <key>ClassPath</key>
38
+ <string><%= @class_path %></string>
39
+ <key>Properties</key>
40
+ <dict>
41
+ <key>apple.laf.useScreenMenuBar</key>
42
+ <string>true</string>
43
+ <key>apple.awt.showGrowBox</key>
44
+ <string>false</string>
45
+ <key>com.apple.smallTabs</key>
46
+ <string>true</string>
47
+ <key>apple.awt.Antialiasing</key>
48
+ <string>false</string>
49
+ <key>apple.awt.TextAntialiasing</key>
50
+ <string>true</string>
51
+ <key>com.apple.hwaccel</key>
52
+ <string>true</string>
53
+ <key>apple.awt.use-file-dialog-packages</key>
54
+ <string>false</string>
55
+ </dict>
56
+ </dict>
57
+ </dict>
58
+ </plist>
@@ -0,0 +1 @@
1
+ APPL????
@@ -0,0 +1,3 @@
1
+ Manifest-Version: 1.0
2
+ Created-By: JRuby
3
+ Main-Class: org.jruby.Main
@@ -0,0 +1,3 @@
1
+
2
+ org.jruby.Main lib/ruby-processing/runners/run.rb <%= @main_file %> --windows-app
3
+ <%= @windows_class_path %>
@@ -0,0 +1 @@
1
+ All of your included libraries will be safely tucked away in here.
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+ APPDIR=$(dirname "$0")
3
+ cd "$APPDIR/lib"
4
+ java -cp "<%= @linux_class_path %>" org.jruby.Main ruby-processing/runners/run.rb <%= @main_file %>
Binary file
@@ -0,0 +1,15 @@
1
+ require 'ruby-processing'
2
+
3
+ class <%= @name %> < Processing::App
4
+
5
+ def setup
6
+
7
+ end
8
+
9
+ def draw
10
+
11
+ end
12
+
13
+ end
14
+
15
+ <%= @name %>.new :title => "<%= @title %>", :width => <%= @width %>, :height => <%= @height %>
@@ -0,0 +1,222 @@
1
+ # Boids -- after Tom de Smedt.
2
+ # See his Python version: http://nodebox.net/code/index.php/Boids
3
+ # This is an example of how a pure-Ruby library can work.
4
+ # -- omygawshkenas
5
+
6
+ class Boid
7
+ attr_accessor :boids, :x, :y, :z, :vx, :vy, :vz, :is_perching, :perch_time
8
+
9
+ def initialize(boids, x, y, z)
10
+ @boids, @flock = boids, boids
11
+ @x, @y, @z = x, y, z
12
+ @vx, @vy, @vz = 0.0, 0.0, 0.0
13
+ @is_perching = false
14
+ @perch_time = 0.0
15
+ end
16
+
17
+ def cohesion(d = 100.0)
18
+ # Boids gravitate towards the center of the flock,
19
+ # Which is the averaged position of the rest of the boids.
20
+ vx = vy = vz = 0.0
21
+ @boids.each do |boid|
22
+ vx, vy, vz = vx+boid.x, vy+boid.y, vz+boid.z unless boid == self
23
+ end
24
+ count = @boids.length - 1.0
25
+ vx, vy, vz = vx/count, vy/count, vz/count
26
+ return (vx - @x)/d, (vy - @y)/d, (vz - @z)/d
27
+ end
28
+
29
+ def separation(radius = 10.0)
30
+ # Boids don't like to cuddle.
31
+ vx = vy = vz = 0.0
32
+ @boids.each do |boid|
33
+ if boid != self
34
+ dvx, dvy, dvz = @x - boid.x, @y - boid.y, @z - boid.z
35
+ vx += dvx if dvx.abs < radius
36
+ vy += dvy if dvy.abs < radius
37
+ vz += dvz if dvz.abs < radius
38
+ end
39
+ end
40
+ return vx, vy, vz
41
+ end
42
+
43
+ def alignment(d = 5.0)
44
+ # Boids like to fly at the speed of traffic.
45
+ vx = vy = vz = 0.0
46
+ @boids.each do |boid|
47
+ if boid != self
48
+ vx, vy, vz = vx+boid.vx, vy+boid.vy, vz+boid.vz
49
+ end
50
+ end
51
+ count = @boids.length - 1.0
52
+ vx, vy, vz = vx/count, vy/count, vz/count
53
+ return (vx - @vx)/d, (vy - @vy)/d, (vz - @vz)/d
54
+ end
55
+
56
+ def limit(max=30.0)
57
+ # Tweet, Tweet! The boid police will bust you for breaking the speed limit.
58
+ @vx = (@vx/@vx.abs) * max if @vx.abs > max
59
+ @vy = (@vy/@vy.abs) * max if @vy.abs > max
60
+ @vz = (@vz/@vz.abs) * max if @vz.abs > max
61
+ end
62
+
63
+ def angle
64
+ a = (Math.atan(@vy / @vx) * (180.0 / Math::PI)) + 360.0
65
+ a += 180.0 if @vx < 0.0
66
+ return a
67
+ end
68
+
69
+ def goal(x, y, z, d = 50.0)
70
+ # Them boids is hungry.
71
+ return (x - @x)/d, (y - @y)/d, (z - @z)/d
72
+ end
73
+ end
74
+
75
+
76
+
77
+ class Boids < Array
78
+ attr_accessor :boids, :x, :y, :w, :h,
79
+ :scattered, :has_goal, :flee
80
+
81
+ attr_reader :scatter, :scatter_time, :scatter_i,
82
+ :perch, :perch_y, :perch_t,
83
+ :goal_x, :goal_y, :goal_z
84
+
85
+ def self.flock(n, x, y, w, h)
86
+ return Boids.new.setup(n, x, y, w, h)
87
+ end
88
+
89
+ def setup(n, x, y, w, h)
90
+ n.times do |i|
91
+ dx, dy = rand(w), rand(h)
92
+ z = rand(200.0)
93
+ self << Boid.new(self, x + dx, y + dy, z)
94
+ end
95
+ @x, @y, @w, @h = x, y, w, h
96
+ @scattered = false
97
+ @scatter = 0.005
98
+ @scatter_time = 50.0
99
+ @scatter_i = 0.0
100
+ @perch = 1.0 # Lower this number to divebomb.
101
+ @perch_y = @h
102
+ @perch_time = lambda {25.0 + rand(50.0)}
103
+ @has_goal = false
104
+ @flee = false
105
+ @goal_x = @goal_y = @goal_z = 0.0
106
+ return self
107
+ end
108
+
109
+ def scatter(chance = 0.005, frames = 50.0)
110
+ @scatter = chance
111
+ @scatter_time = frames
112
+ end
113
+
114
+ def no_scatter
115
+ @scatter = 0.0
116
+ end
117
+
118
+ def perch(ground = nil, chance = 1.0, frames = nil)
119
+ frames ||= lambda {25.0 + rand(50.0)}
120
+ ground ||= @h
121
+ @perch, @perch_y, @perch_time = chance, ground, frames
122
+ end
123
+
124
+ def no_perch
125
+ @perch = 0.0
126
+ end
127
+
128
+ def goal(x, y, z, flee = false)
129
+ @has_goal = true
130
+ @flee = flee
131
+ @goal_x, @goal_y, @goal_z = x, y, z
132
+ end
133
+
134
+ def no_goal
135
+ @has_goal = false
136
+ end
137
+
138
+ def constrain
139
+ # Put them boids in a cage.
140
+ dx, dy = @w * 0.1, @h * 0.1
141
+ self.each do |b|
142
+ b.vx += rand(dx) if b.x < @x - dx
143
+ b.vx += rand(dy) if b.y < @y - dy
144
+ b.vx -= rand(dx) if b.x > @x + @w + dx
145
+ b.vy -= rand(dy) if b.y > @y + @h + dy
146
+ b.vz += 10.0 if b.z < 0.0
147
+ b.vz -= 10.0 if b.z > 100.0
148
+
149
+ if b.y > @perch_y && rand < @perch
150
+ b.y = @perch_y
151
+ b.vy = -(b.vy.abs) * 0.2
152
+ b.is_perching = true
153
+ @perch_time.respond_to?(:call) ? b.perch_time = @perch_time.call : b.perch_time = @perch_time
154
+ end
155
+ end
156
+ end
157
+
158
+ def shuffle
159
+ self.sort! { rand }
160
+ end
161
+
162
+ def update(opts={})
163
+ # Just flutter, little boids ... just flutter away.
164
+ # Shuffling keeps things flowing smooth.
165
+ options = {:shuffled => true,
166
+ :cohesion => 100.0,
167
+ :separation => 10.0,
168
+ :alignment => 5.0,
169
+ :goal => 20.0,
170
+ :limit => 30.0}
171
+ options.merge! opts
172
+
173
+ self.shuffle if options[:shuffled]
174
+ m1 = 1.0 # cohesion
175
+ m2 = 1.0 # separation
176
+ m3 = 1.0 # alignment
177
+ m4 = 1.0 # goal
178
+
179
+ @scattered = true if !(@scattered) && rand < @scatter
180
+ if @scattered
181
+ m1 = -m1
182
+ m3 *= 0.25
183
+ @scatter_i += 1.0
184
+ end
185
+ if @scatter_i >= @scatter_time
186
+ @scattered = false
187
+ @scatter_i = 0.0
188
+ end
189
+
190
+ m4 = 0.0 unless @has_goal
191
+ m4 = -m4 if @flee
192
+
193
+ self.each do |b|
194
+ if b.is_perching
195
+ if b.perch_time > 0.0
196
+ b.perch_time -= 1.0
197
+ next
198
+ else
199
+ b.is_perching = false
200
+ end
201
+ end
202
+
203
+ vx1, vy1, vz1 = b.cohesion(options[:cohesion])
204
+ vx2, vy2, vz2 = b.separation(options[:separation])
205
+ vx3, vy3, vz3 = b.alignment(options[:alignment])
206
+ vx4, vy4, vz4 = b.goal(@goal_x, @goal_y, @goal_z, options[:goal])
207
+
208
+ b.vx += m1*vx1 + m2*vx2 + m3*vx3 + m4*vx4
209
+ b.vy += m1*vy1 + m2*vy2 + m3*vy3 + m4*vy4
210
+ b.vz += m1*vz1 + m2*vz2 + m3*vz3 + m4*vz4
211
+
212
+ b.limit(options[:limit])
213
+
214
+ b.x += b.vx
215
+ b.y += b.vy
216
+ b.z += b.vz
217
+ end
218
+ self.constrain
219
+ end
220
+ end
221
+
222
+