ruby-processing 2.6.2 → 2.6.3

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 (129) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rpextras.jar +0 -0
  3. data/lib/ruby-processing.rb +5 -8
  4. data/lib/ruby-processing/app.rb +26 -27
  5. data/lib/ruby-processing/config.rb +0 -2
  6. data/lib/ruby-processing/exporters/application_exporter.rb +1 -1
  7. data/lib/ruby-processing/exporters/base_exporter.rb +1 -1
  8. data/lib/ruby-processing/exporters/creator.rb +11 -11
  9. data/lib/ruby-processing/helper_methods.rb +33 -31
  10. data/lib/ruby-processing/helpers/numeric.rb +1 -1
  11. data/lib/ruby-processing/helpers/range.rb +11 -0
  12. data/lib/ruby-processing/library_loader.rb +11 -16
  13. data/lib/ruby-processing/runner.rb +22 -24
  14. data/lib/ruby-processing/runners/watch.rb +1 -1
  15. data/lib/ruby-processing/version.rb +1 -1
  16. data/library/boids/boids.rb +39 -70
  17. data/library/control_panel/control_panel.rb +3 -3
  18. data/samples/contributed/circle_collision.rb +3 -3
  19. data/samples/contributed/fern.rb +7 -10
  20. data/samples/contributed/fibonacci_sphere.rb +2 -2
  21. data/samples/contributed/full_screen.rb +23 -22
  22. data/samples/contributed/grapher.rb +3 -3
  23. data/samples/contributed/gravity.rb +1 -1
  24. data/samples/contributed/mandelbrot.rb +10 -13
  25. data/samples/external_library/java_processing/box2d_processing/bumpy_surface_noise.rb +1 -1
  26. data/samples/external_library/java_processing/box2d_processing/library/custom_shape/custom_shape.rb +2 -2
  27. data/samples/external_library/java_processing/box2d_processing/library/particle_system/particle_system.rb +1 -1
  28. data/samples/external_library/java_processing/box2d_processing/library/surface/surface.rb +2 -2
  29. data/samples/external_library/java_processing/box2d_processing/liquidy.rb +1 -1
  30. data/samples/external_library/java_processing/fisica/bubbles.rb +2 -2
  31. data/samples/external_library/java_processing/fisica/joints.rb +4 -4
  32. data/samples/external_library/java_processing/generative_design/node_spring_attractor.rb +2 -2
  33. data/samples/external_library/java_processing/geomerative/hello_world_rotate_firstletter.rb +7 -7
  34. data/samples/external_library/java_processing/hemesh/twin_iso.rb +3 -3
  35. data/samples/external_library/java_processing/pbox2d/bumpy_surface_noise.rb +1 -1
  36. data/samples/external_library/java_processing/pbox2d/library/custom_shape/custom_shape.rb +2 -2
  37. data/samples/external_library/java_processing/pbox2d/library/particle_system/particle_system.rb +1 -1
  38. data/samples/external_library/java_processing/pbox2d/library/surface/surface.rb +2 -2
  39. data/samples/external_library/java_processing/pbox2d/liquidy.rb +1 -1
  40. data/samples/external_library/java_processing/peasy_cam/library/hilbert/hilbert.rb +4 -4
  41. data/samples/external_library/ruby_gem/draw_test.rb +2 -2
  42. data/samples/external_library/ruby_gem/game_of_life.rb +3 -3
  43. data/samples/processing_app/basics/arrays/array_objects.rb +2 -2
  44. data/samples/processing_app/basics/color/hue.rb +1 -1
  45. data/samples/processing_app/basics/control/conditionals1.rb +5 -24
  46. data/samples/processing_app/basics/control/conditionals2.rb +1 -1
  47. data/samples/processing_app/basics/form/bezier_ellipse.rb +1 -1
  48. data/samples/processing_app/basics/form/brick_tower.rb +4 -8
  49. data/samples/processing_app/basics/form/regular_polygon.rb +1 -1
  50. data/samples/processing_app/basics/form/star.rb +1 -1
  51. data/samples/processing_app/basics/form/triangle_strip.rb +1 -1
  52. data/samples/processing_app/basics/input/storing_input.rb +1 -1
  53. data/samples/processing_app/basics/lights/spot.rb +1 -1
  54. data/samples/processing_app/basics/math/additive_wave.rb +2 -2
  55. data/samples/processing_app/basics/math/double_random.rb +2 -2
  56. data/samples/processing_app/basics/math/noise_wave.rb +1 -1
  57. data/samples/processing_app/basics/math/random.rb +1 -1
  58. data/samples/processing_app/basics/objects/module.rb +1 -1
  59. data/samples/processing_app/basics/objects/struct.rb +1 -1
  60. data/samples/processing_app/basics/structure/loop.rb +19 -14
  61. data/samples/processing_app/basics/structure/recursion2.rb +2 -2
  62. data/samples/processing_app/basics/textures/texture3.rb +13 -33
  63. data/samples/processing_app/basics/transform/birds.rb +5 -5
  64. data/samples/processing_app/basics/transform/cubes_in_cube.rb +3 -3
  65. data/samples/processing_app/basics/transform/rotate.rb +1 -1
  66. data/samples/processing_app/basics/typography/kinetic_type.rb +1 -1
  67. data/samples/processing_app/demos/graphics/bezier_patch.rb +34 -34
  68. data/samples/processing_app/demos/graphics/trefoil.rb +1 -1
  69. data/samples/processing_app/demos/graphics/wiggling.rb +5 -5
  70. data/samples/processing_app/demos/performance/esfera.rb +4 -4
  71. data/samples/processing_app/demos/performance/text_rendering.rb +1 -1
  72. data/samples/processing_app/library/dxf/simple_export.rb +3 -3
  73. data/samples/processing_app/library/pdf/complex_3D.rb +11 -11
  74. data/samples/processing_app/library/vecmath/vec2d/bouncing_ball.rb +1 -1
  75. data/samples/processing_app/library/vecmath/vec2d/circle_collision.rb +3 -3
  76. data/samples/processing_app/library/vecmath/vec2d/library/flock/flock.rb +5 -5
  77. data/samples/processing_app/library/vecmath/vec2d/library/particle/{particle_system.rb → particle.rb} +28 -21
  78. data/samples/processing_app/library/vecmath/vec2d/morph.rb +3 -3
  79. data/samples/processing_app/library/vecmath/vec2d/particle_system_pshape.rb +3 -3
  80. data/samples/processing_app/library/vecmath/vec2d/reflection1.rb +2 -2
  81. data/samples/processing_app/library/vecmath/vec2d/seeking_neural.rb +3 -2
  82. data/samples/processing_app/library/vecmath/vec2d/simple_particle_system.rb +1 -1
  83. data/samples/processing_app/library/vecmath/vec3d/frame_of_reference.rb +4 -4
  84. data/samples/processing_app/topics/advanced_data/library/word/word.rb +1 -1
  85. data/samples/processing_app/topics/advanced_data/load_save_XML.rb +1 -1
  86. data/samples/processing_app/topics/advanced_data/load_save_json.rb +1 -1
  87. data/samples/processing_app/topics/advanced_data/load_save_struct_yaml.rb +1 -1
  88. data/samples/processing_app/topics/advanced_data/load_save_yaml.rb +1 -1
  89. data/samples/processing_app/topics/advanced_data/threads_two.rb +1 -2
  90. data/samples/processing_app/topics/cellular_automata/game_of_life.rb +3 -3
  91. data/samples/processing_app/topics/cellular_automata/library/ca/ca.rb +2 -2
  92. data/samples/processing_app/topics/cellular_automata/library/cell/cell.rb +4 -4
  93. data/samples/processing_app/topics/cellular_automata/library/simple_cell/simple_cell.rb +1 -1
  94. data/samples/processing_app/topics/cellular_automata/spore1.rb +1 -1
  95. data/samples/processing_app/topics/cellular_automata/spore2.rb +1 -1
  96. data/samples/processing_app/topics/create_shapes/group_pshape.rb +2 -2
  97. data/samples/processing_app/topics/create_shapes/library/particle/particle_system.rb +3 -3
  98. data/samples/processing_app/topics/create_shapes/library/polygon/polygon.rb +2 -2
  99. data/samples/processing_app/topics/create_shapes/library/star/star.rb +3 -3
  100. data/samples/processing_app/topics/create_shapes/particle_system_pshape.rb +1 -1
  101. data/samples/processing_app/topics/create_shapes/path_pshape.rb +1 -1
  102. data/samples/processing_app/topics/drawing/scribble_plotter.rb +2 -2
  103. data/samples/processing_app/topics/gui/button.rb +16 -16
  104. data/samples/processing_app/topics/gui/rollover.rb +13 -13
  105. data/samples/processing_app/topics/image_processing/blur.rb +2 -2
  106. data/samples/processing_app/topics/image_processing/edge_detection.rb +2 -2
  107. data/samples/processing_app/topics/lsystems/cstest.rb +1 -1
  108. data/samples/processing_app/topics/lsystems/library/stochastic_grammar/stochastic_grammar.rb +1 -1
  109. data/samples/processing_app/topics/motion/bouncy_bubbles.rb +1 -1
  110. data/samples/processing_app/topics/motion/brownian.rb +2 -2
  111. data/samples/processing_app/topics/motion/circle_collision.rb +1 -1
  112. data/samples/processing_app/topics/motion/cubes_in_cube.rb +1 -1
  113. data/samples/processing_app/topics/motion/library/cube/cube.rb +2 -2
  114. data/samples/processing_app/topics/motion/morph.rb +11 -11
  115. data/samples/processing_app/topics/motion/moving_on_curves.rb +4 -4
  116. data/samples/processing_app/topics/motion/puff.rb +4 -4
  117. data/samples/processing_app/topics/motion/reflection1.rb +3 -3
  118. data/samples/processing_app/topics/motion/reflection2.rb +1 -1
  119. data/samples/processing_app/topics/shaders/bw_shader.rb +1 -1
  120. data/samples/processing_app/topics/shaders/glsl_heightmap_noise.rb +2 -2
  121. data/samples/processing_app/topics/simulate/flocking.rb +6 -6
  122. data/samples/processing_app/topics/simulate/library/flock/flock.rb +33 -41
  123. data/samples/processing_app/topics/simulate/multiple_particle_systems.rb +34 -60
  124. data/samples/processing_app/topics/simulate/simple_particle_system.rb +20 -32
  125. data/samples/processing_app/topics/simulate/smoke_particle_system.rb +45 -57
  126. data/samples/processing_app/topics/simulate/springs.rb +40 -44
  127. metadata +4 -5
  128. data/samples/processing_app/library/vecmath/vec2d/multiple_particle_systems.rb +0 -141
  129. data/samples/processing_app/library/vecmath/vec2d/smoke_particle_system.rb +0 -133
@@ -1,4 +1,4 @@
1
- class Numeric #:nodoc:
1
+ class Numeric #:nodoc:
2
2
  def degrees
3
3
  self * 180 / Math::PI
4
4
  end
@@ -0,0 +1,11 @@
1
+ class Range #:nodoc:
2
+ def clip(n)
3
+ if cover?(n)
4
+ n
5
+ elsif n < min
6
+ min
7
+ else
8
+ max
9
+ end
10
+ end
11
+ end
@@ -20,10 +20,10 @@ module Processing
20
20
  def load_libraries(*args)
21
21
  args.each do |lib|
22
22
  loaded = load_ruby_library(lib) || load_java_library(lib)
23
- raise LoadError.new( "no such file to load -- #{lib}") if !loaded
23
+ fail(LoadError.new, "no such file to load -- #{lib}") unless loaded
24
24
  end
25
25
  end
26
- alias :load_library :load_libraries
26
+ alias_method :load_library, :load_libraries
27
27
 
28
28
  # For pure ruby libraries.
29
29
  # The library should have an initialization ruby file
@@ -38,17 +38,16 @@ module Processing
38
38
  return false
39
39
  end
40
40
  end
41
-
42
41
  path = get_library_paths(library_name, 'rb').first
43
42
  return false unless path
44
- return @loaded_libraries[library_name] = (require path)
43
+ @loaded_libraries[library_name] = (require path)
45
44
  end
46
45
 
47
46
  # For pure java libraries, such as the ones that are available
48
47
  # on this page: http://processing.org/reference/libraries/index.html
49
48
  #
50
49
  # P.S. -- Loading libraries which include native code needs to
51
- # hack the Java ClassLoader, so that you don't have to
50
+ # hack the 'Java ClassLoader', so that you don't have to
52
51
  # futz with your PATH. But it's probably bad juju.
53
52
  def load_java_library(library_name)
54
53
  library_name = library_name.to_sym
@@ -56,26 +55,23 @@ module Processing
56
55
  jpath = get_library_directory_path(library_name, 'jar')
57
56
  jars = get_library_paths(library_name, 'jar')
58
57
  return false if jars.empty?
59
- jars.each {|jar| require jar }
60
-
58
+ jars.each { |jar| require jar }
61
59
  platform_specific_library_paths = get_platform_specific_library_paths(jpath)
62
60
  platform_specific_library_paths = platform_specific_library_paths.select do |ppath|
63
61
  test(?d, ppath) && !Dir.glob(File.join(ppath, '*.{so,dll,jnilib}')).empty?
64
62
  end
65
63
 
66
- if !platform_specific_library_paths.empty?
64
+ unless platform_specific_library_paths.empty?
67
65
  platform_specific_library_paths << java.lang.System.getProperty('java.library.path')
68
66
  new_library_path = platform_specific_library_paths.join(java.io.File.pathSeparator)
69
-
70
67
  java.lang.System.setProperty('java.library.path', new_library_path)
71
-
72
68
  field = java.lang.Class.for_name('java.lang.ClassLoader').get_declared_field('sys_paths')
73
69
  if field
74
70
  field.accessible = true
75
71
  field.set(java.lang.Class.for_name('java.lang.System').get_class_loader, nil)
76
72
  end
77
73
  end
78
- return @loaded_libraries[library_name] = true
74
+ @loaded_libraries[library_name] = true
79
75
  end
80
76
 
81
77
  def get_platform_specific_library_paths(basename)
@@ -87,12 +83,11 @@ module Processing
87
83
  java.lang.System.getProperty('java.vm.name').index('64')
88
84
  bits = '64'
89
85
  end
90
-
91
- _match_string_, platform = {'Mac' => 'macosx', 'Linux' => 'linux', 'Windows' => 'windows' }.detect do |string, _platform_|
86
+ _match_string_, platform = {'Mac' => 'macosx', 'Linux' => 'linux', 'Windows' => 'windows' }.find do |string, _platform_|
92
87
  java.lang.System.getProperty('os.name').index(string)
93
88
  end
94
89
  platform ||= 'other'
95
- [platform, platform + bits].collect { |p| File.join(basename, p) }
90
+ [platform, platform + bits].map { |p| File.join(basename, p) }
96
91
  end
97
92
 
98
93
  def get_library_paths(library_name, extension = nil)
@@ -103,7 +98,7 @@ module Processing
103
98
  protected
104
99
 
105
100
  def get_library_directory_path(library_name, extension = nil)
106
- extensions = extension ? [extension] : %w{jar rb}
101
+ extensions = extension ? [extension] : %w(jar rb)
107
102
  extensions.each do |ext|
108
103
  [ "#{SKETCH_ROOT}/library/#{library_name}",
109
104
  "#{Processing::RP_CONFIG['PROCESSING_ROOT']}/modes/java/libraries/#{library_name}/library",
@@ -138,7 +133,7 @@ module Processing
138
133
  sketchbook_paths << spath
139
134
  end
140
135
  end
141
- if !preferences_paths.empty?
136
+ unless preferences_paths.empty?
142
137
  matched_lines = File.readlines(preferences_paths.first).grep(/^sketchbook\.path=(.+)/) { $1 }
143
138
  sketchbook_path = matched_lines.first
144
139
  else
@@ -45,7 +45,7 @@ module Processing
45
45
 
46
46
  # Start running a ruby-processing sketch from the passed-in arguments
47
47
  def self.execute
48
- runner = self.new
48
+ runner = new
49
49
  runner.parse_options(ARGV)
50
50
  runner.execute!
51
51
  end
@@ -92,20 +92,20 @@ module Processing
92
92
 
93
93
  # Just simply run a ruby-processing sketch.
94
94
  def run(sketch, args)
95
- ensure_exists(sketch)
95
+ ensure_exists(sketch)
96
96
  spin_up('run.rb', sketch, args)
97
97
  end
98
98
 
99
99
  # Run a sketch, keeping an eye on it's file, and reloading
100
100
  # whenever it changes.
101
101
  def watch(sketch, args)
102
- ensure_exists(sketch)
102
+ ensure_exists(sketch)
103
103
  spin_up('watch.rb', sketch, args)
104
104
  end
105
105
 
106
106
  # Run a sketch, opening its guts to IRB, letting you play with it.
107
107
  def live(sketch, args)
108
- ensure_exists(sketch)
108
+ ensure_exists(sketch)
109
109
  spin_up('live.rb', sketch, args)
110
110
  end
111
111
 
@@ -124,7 +124,7 @@ module Processing
124
124
  check(proc_root, installed)
125
125
  when /install/
126
126
  system "cd #{RP5_ROOT}/vendors && rake"
127
- if !proc_root
127
+ unless proc_root
128
128
  set_processing_root
129
129
  warn 'PROCESSING_ROOT set optimistically, run check to confirm'
130
130
  end
@@ -199,7 +199,7 @@ module Processing
199
199
  end
200
200
 
201
201
  def ensure_exists(sketch)
202
- puts "Couldn't find: #{sketch}" and exit unless File.exist?(sketch)
202
+ puts "Couldn't find: #{sketch}" && exit unless File.exist?(sketch)
203
203
  end
204
204
 
205
205
  def jruby_complete
@@ -213,23 +213,21 @@ module Processing
213
213
  end
214
214
 
215
215
  def os
216
- @os ||=
217
- host_os = RbConfig::CONFIG['host_os']
218
- case host_os
219
- when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
220
- :windows
221
- when /darwin|mac os/
222
- :macosx
223
- when /linux/
224
- :linux
225
- when /solaris|bsd/
226
- :unix
227
- else
228
- raise "unknown os: #{host_os.inspect}"
229
- end
216
+ @os ||= host_os = RbConfig::CONFIG['host_os']
217
+ case host_os
218
+ when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
219
+ :windows
220
+ when /darwin|mac os/
221
+ :macosx
222
+ when /linux/
223
+ :linux
224
+ when /solaris|bsd/
225
+ :unix
226
+ else
227
+ fail "unknown os: #{host_os.inspect}"
228
+ end
230
229
  end
231
230
 
232
-
233
231
  # Optimistically set processing root
234
232
  def set_processing_root
235
233
  require 'psych'
@@ -237,13 +235,13 @@ module Processing
237
235
  data = {}
238
236
  path = File.expand_path("#{ENV['HOME']}/.rp5rc")
239
237
  if @os == :macosx
240
- data['PROCESSING_ROOT'] = %q(/Applications/Processing.app/Contents/Java)
238
+ data['PROCESSING_ROOT'] = '/Applications/Processing.app/Contents/Java'
241
239
  else
242
240
  root = "#{ENV['HOME']}/processing-2.2.1"
243
241
  data['PROCESSING_ROOT'] = root
244
242
  end
245
- data['JRUBY'] = %q(true)
246
- open(path, 'w:UTF-8') {|f| f.write(data.to_yaml) }
243
+ data['JRUBY'] = true
244
+ open(path, 'w:UTF-8') { |f| f.write(data.to_yaml) }
247
245
  end
248
246
 
249
247
  # On the Mac, we can display a fat, shiny ruby in the Dock.
@@ -15,7 +15,7 @@ module Processing
15
15
  # and restarting the sketch whenever it changes.
16
16
  def start_watching
17
17
  start_runner
18
- loop do
18
+ Kernel.loop do
19
19
  if @files.find { |file| File.exist?(file) && File.stat(file).mtime > @time }
20
20
  puts 'reloading sketch...'
21
21
  $app && $app.close
@@ -1,3 +1,3 @@
1
1
  module RubyProcessing
2
- VERSION = '2.6.2'
2
+ VERSION = '2.6.3'
3
3
  end
@@ -14,22 +14,22 @@ class Boid
14
14
  @perch_time = 0.0
15
15
  end
16
16
 
17
- def cohesion(d = 100.0)
17
+ def cohesion(d = 100.0)
18
18
  # Boids gravitate towards the center of the flock,
19
19
  # Which is the averaged position of the rest of the boids.
20
20
  cvx, cvy, cvz = 0.0, 0.0, 0.0
21
- boids.reject{|bd| bd.equal? self}.each do |boid|
22
- cvx, cvy, cvz = cvx+boid.x, cvy+boid.y, cvz+boid.z
21
+ boids.reject { |bd| bd.equal? self }.each do |boid|
22
+ cvx, cvy, cvz = cvx + boid.x, cvy + boid.y, cvz + boid.z
23
23
  end
24
24
  count = boids.length - 1.0
25
- cvx, cvy, cvz = cvx/count, cvy/count, cvz/count
25
+ cvx, cvy, cvz = cvx / count, cvy / count, cvz / count
26
26
  return (cvx - x) / d, (cvy - y) / d, (cvz - z) / d
27
27
  end
28
28
 
29
29
  def separation(radius = 10.0)
30
30
  # Boids don't like to cuddle.
31
31
  svx, svy, svz = 0.0, 0.0, 0.0
32
- boids.reject{|bd| bd.equal? self}.each do |boid|
32
+ boids.reject { |bd| bd.equal? self }.each do |boid|
33
33
  dvx, dvy, dvz = x - boid.x, y - boid.y, z - boid.z
34
34
  svx += dvx if dvx.abs < radius
35
35
  svy += dvy if dvy.abs < radius
@@ -41,15 +41,15 @@ class Boid
41
41
  def alignment(d = 5.0)
42
42
  # Boids like to fly at the speed of traffic.
43
43
  avx, avy, avz = 0.0, 0.0, 0.0
44
- boids.reject{|bd| bd.equal? self}.each do |boid|
45
- avx, avy, avz = avx+boid.vx, avy+boid.vy, avz+boid.vz
44
+ boids.reject { |bd| bd.equal? self }.each do |boid|
45
+ avx, avy, avz = avx + boid.vx, avy + boid.vy, avz + boid.vz
46
46
  end
47
47
  count = boids.length - 1.0
48
48
  avx, avy, avz = avx / count, avy / count, avz / count
49
49
  return (avx - vx) / d, (avy - vy) / d, (avz - vz) / d
50
50
  end
51
51
 
52
- def limit(max=30.0)
52
+ def limit(max = 30.0)
53
53
  # Tweet, Tweet! The boid police will bust you for breaking the speed limit.
54
54
  most = [@vx.abs, @vy.abs, @vz.abs].max
55
55
  return if most < max
@@ -71,10 +71,12 @@ class Boid
71
71
  end
72
72
  end
73
73
 
74
+ require 'forwardable'
74
75
 
75
-
76
- class Boids
77
- extend Enumerable
76
+ class Boids
77
+ include Enumerable
78
+ extend Forwardable
79
+ def_delegators(:@boids, :reject, :<<, :each, :shuffle!, :length, :next)
78
80
 
79
81
  attr_accessor :boids, :x, :y, :w, :h,
80
82
  :scattered, :has_goal, :flee
@@ -86,34 +88,13 @@ class Boids
86
88
  def initialize
87
89
  @boids = []
88
90
  end
89
-
90
- def each &block
91
- boids.each &block
92
- end
93
-
94
- def reject &block
95
- boids.reject &block
96
- end
97
-
98
-
99
- def shuffle!
100
- boids.shuffle!
101
- end
102
-
103
- def << obj
104
- boids << obj
105
- end
106
-
107
- def length
108
- boids.length
109
- end
110
-
91
+
111
92
  def self.flock(n, x, y, w, h)
112
- return Boids.new.setup(n, x, y, w, h)
93
+ Boids.new.setup(n, x, y, w, h)
113
94
  end
114
95
 
115
96
  def setup(n, x, y, w, h)
116
- n.times do |i|
97
+ n.times do
117
98
  dx, dy = rand(w), rand(h)
118
99
  z = rand(200.0)
119
100
  self << Boid.new(self, x + dx, y + dy, z)
@@ -125,11 +106,11 @@ class Boids
125
106
  @scatter_i = 0.0
126
107
  @perch = 1.0 # Lower this number to divebomb.
127
108
  @perch_y = h
128
- @perch_t = -> {rand(25..75.0)}
109
+ @perch_t = -> { rand(25..75.0) }
129
110
  @has_goal = false
130
111
  @flee = false
131
112
  @goal_x = @goal_y = @goal_z = 0.0
132
- return self
113
+ self
133
114
  end
134
115
 
135
116
  def scatter(chance = 0.005, frames = 50.0)
@@ -142,7 +123,7 @@ class Boids
142
123
  end
143
124
 
144
125
  def perch(ground = nil, chance = 1.0, frames = nil)
145
- frames ||= -> {rand(25..75.0)}
126
+ frames ||= -> { rand(25..75.0) }
146
127
  ground ||= h
147
128
  @perch, @perch_y, @perch_t = chance, ground, frames
148
129
  end
@@ -164,40 +145,36 @@ class Boids
164
145
  def constrain
165
146
  # Put them boids in a cage.
166
147
  dx, dy = w * 0.1, h * 0.1
167
- self.each do |b|
148
+ each do |b|
168
149
  b.vx += rand(dx) if b.x < x - dx
169
150
  b.vx += rand(dy) if b.y < y - dy
170
151
  b.vx -= rand(dx) if b.x > x + w + dx
171
152
  b.vy -= rand(dy) if b.y > y + h + dy
172
153
  b.vz += 10.0 if b.z < 0.0
173
154
  b.vz -= 10.0 if b.z > 100.0
174
-
175
- if b.y > @perch_y && rand < @perch
176
- b.y = @perch_y
177
- b.vy = -(b.vy.abs) * 0.2
178
- b.is_perching = true
179
- @perch_t.respond_to?(:call) ? b.perch_time = @perch_t.call : b.perch_time = @perch_t
180
- end
155
+ next unless b.y > @perch_y && rand < @perch
156
+ b.y = @perch_y
157
+ b.vy = -(b.vy.abs) * 0.2
158
+ b.is_perching = true
159
+ @perch_t.respond_to?(:call) ? b.perch_time = @perch_t.call : b.perch_time = @perch_t
181
160
  end
182
161
  end
183
162
 
184
- def update(opts={}) # Just flutter, little boids ... just flutter away.
163
+ def update(opts = {}) # Just flutter, little boids ... just flutter away.
185
164
  options = {
186
- shuffled: true, # Shuffling keeps things flowing smooth.
187
- cohesion: 100.0,
188
- separation: 10.0,
189
- alignment: 5.0,
190
- goal: 20.0,
191
- limit: 30.0
192
- }
165
+ shuffled: true, # Shuffling keeps things flowing smooth.
166
+ cohesion: 100.0,
167
+ separation: 10.0,
168
+ alignment: 5.0,
169
+ goal: 20.0,
170
+ limit: 30.0
171
+ }
193
172
  options.merge! opts
194
-
195
- self.shuffle! if options[:shuffled]
173
+ shuffle! if options[:shuffled]
196
174
  m1 = 1.0 # cohesion
197
175
  m2 = 1.0 # separation
198
176
  m3 = 1.0 # alignment
199
177
  m4 = 1.0 # goal
200
-
201
178
  @scattered = true if !(@scattered) && rand < @scatter
202
179
  if @scattered
203
180
  m1 = -m1
@@ -208,11 +185,9 @@ class Boids
208
185
  @scattered = false
209
186
  @scatter_i = 0.0
210
187
  end
211
-
212
188
  m4 = 0.0 unless @has_goal
213
189
  m4 = -m4 if @flee
214
-
215
- self.each do |b|
190
+ each do |b|
216
191
  if b.is_perching
217
192
  if b.perch_time > 0.0
218
193
  b.perch_time -= 1.0
@@ -221,24 +196,18 @@ class Boids
221
196
  b.is_perching = false
222
197
  end
223
198
  end
224
-
225
199
  vx1, vy1, vz1 = b.cohesion(options[:cohesion])
226
200
  vx2, vy2, vz2 = b.separation(options[:separation])
227
201
  vx3, vy3, vz3 = b.alignment(options[:alignment])
228
202
  vx4, vy4, vz4 = b.goal(@goal_x, @goal_y, @goal_z, options[:goal])
229
-
230
- b.vx += m1*vx1 + m2*vx2 + m3*vx3 + m4*vx4
231
- b.vy += m1*vy1 + m2*vy2 + m3*vy3 + m4*vy4
232
- b.vz += m1*vz1 + m2*vz2 + m3*vz3 + m4*vz4
233
-
203
+ b.vx += m1 * vx1 + m2 * vx2 + m3 * vx3 + m4 * vx4
204
+ b.vy += m1 * vy1 + m2 * vy2 + m3 * vy3 + m4 * vy4
205
+ b.vz += m1 * vz1 + m2 * vz2 + m3 * vz3 + m4 * vz4
234
206
  b.limit(options[:limit])
235
-
236
207
  b.x += b.vx
237
208
  b.y += b.vy
238
209
  b.z += b.vz
239
210
  end
240
- self.constrain
211
+ constrain
241
212
  end
242
213
  end
243
-
244
-
@@ -59,7 +59,7 @@ module ControlPanel
59
59
 
60
60
  # Creates check-box elements for control_panel
61
61
  class Checkbox < javax.swing.JCheckBox
62
- def initialize(control_panel, name, proc=nil)
62
+ def initialize(control_panel, name, proc = nil)
63
63
  @control_panel = control_panel
64
64
  super(name.to_s)
65
65
  set_preferred_size(java.awt.Dimension.new(190, 64))
@@ -107,7 +107,7 @@ module ControlPanel
107
107
  set_size 200, 30 + (64 * elements.size)
108
108
  set_default_close_operation javax.swing.JFrame::HIDE_ON_CLOSE
109
109
  set_resizable false
110
- set_location($app.width + 10, 0) unless ($app.width + 10 > $app.displayWidth)
110
+ set_location($app.width + 10, 0) unless $app.width + 10 > $app.displayWidth
111
111
  panel.visible = true
112
112
  end
113
113
 
@@ -154,7 +154,7 @@ module ControlPanel
154
154
  laf = lafinfo.select do |info|
155
155
  info.getName.eql? lf.capitalize
156
156
  end
157
- javax.swing.UIManager.setLookAndFeel(laf[0].getClassName)
157
+ javax.swing.UIManager.setLookAndFeel(laf[0].getClassName)
158
158
  end
159
159
  end
160
160