ruby-processing 2.6.2 → 2.6.3

Sign up to get free protection for your applications and to get access to all the features.
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