jruby_art 2.2.2 → 2.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/bin/k9 +4 -3
  3. data/lib/gluegen-rt-natives-linux-amd64.jar +0 -0
  4. data/lib/gluegen-rt-natives-macosx-universal.jar +0 -0
  5. data/lib/gluegen-rt-natives-windows-amd64.jar +0 -0
  6. data/lib/gluegen-rt.jar +0 -0
  7. data/lib/jogl-all-natives-linux-amd64.jar +0 -0
  8. data/lib/jogl-all-natives-macosx-universal.jar +0 -0
  9. data/lib/jogl-all-natives-windows-amd64.jar +0 -0
  10. data/lib/jogl-all.jar +0 -0
  11. data/lib/jruby_art-2.4.3.jar +0 -0
  12. data/lib/jruby_art/app.rb +8 -7
  13. data/lib/jruby_art/config.rb +2 -0
  14. data/lib/jruby_art/creators/sketch_writer.rb +31 -13
  15. data/lib/jruby_art/default_config.rb +2 -0
  16. data/lib/jruby_art/helper_methods.rb +22 -22
  17. data/lib/jruby_art/helpers/aabb.rb +3 -0
  18. data/lib/jruby_art/helpers/numeric.rb +1 -0
  19. data/lib/jruby_art/installer.rb +10 -7
  20. data/lib/jruby_art/java_opts.rb +2 -0
  21. data/lib/jruby_art/jruby_complete.rb +2 -0
  22. data/lib/jruby_art/launcher.rb +8 -3
  23. data/lib/jruby_art/library.rb +67 -67
  24. data/lib/jruby_art/library_loader.rb +4 -1
  25. data/lib/jruby_art/native_folder.rb +16 -14
  26. data/lib/jruby_art/native_loader.rb +3 -0
  27. data/lib/jruby_art/processing_ide.rb +5 -1
  28. data/lib/jruby_art/runner.rb +12 -10
  29. data/lib/jruby_art/runners/base.rb +1 -0
  30. data/lib/jruby_art/runners/live.rb +10 -7
  31. data/lib/jruby_art/runners/run.rb +1 -0
  32. data/lib/jruby_art/runners/watch.rb +6 -4
  33. data/lib/jruby_art/version.rb +2 -1
  34. data/library/boids/boids.rb +19 -10
  35. data/library/chooser/chooser.rb +10 -9
  36. data/library/color_group/color_group.rb +2 -0
  37. data/library/control_panel/control_panel.rb +8 -5
  38. data/library/dxf/dxf.rb +2 -0
  39. data/library/library_proxy/library_proxy.rb +2 -0
  40. data/library/net/net.rb +2 -0
  41. data/library/slider/slider.rb +24 -23
  42. data/library/vector_utils/vector_utils.rb +5 -1
  43. data/library/video_event/video_event.rb +3 -0
  44. data/vendors/Rakefile +23 -17
  45. metadata +13 -13
  46. data/lib/jruby_art-2.2.2.jar +0 -0
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'native_folder'
2
4
  require_relative 'native_loader'
3
5
 
@@ -17,71 +19,69 @@ class Library
17
19
  def locate
18
20
  return if (@path = Pathname.new(
19
21
  File.join(SKETCH_ROOT, 'library', name, "#{name}.rb")
20
- )).exist?
21
- return if (@path = Pathname.new(
22
- File.join(K9_ROOT, 'library', name, "#{name}.rb")
23
- )).exist?
24
-
25
- locate_java
26
- end
27
-
28
- def locate_java
29
- @dir = Pathname.new(
30
- File.join(SKETCH_ROOT, 'library', name)
31
- )
32
- return @path = dir.join(Pathname.new("#{name}.jar")) if dir.directory?
33
-
34
- locate_installed_java
35
- end
36
-
37
- def locate_installed_java
38
- unless dir.directory?
39
- if Processing::RP_CONFIG.fetch('processing_ide', false)
40
- prefix = library_path
41
- @dir = Pathname.new(
42
- File.join(prefix, 'libraries', name, 'library')
43
- )
44
- @path = dir.join(Pathname.new("#{name}.jar"))
45
- else
46
- @dir = Pathname.new(
47
- File.join(ENV['HOME'], '.jruby_art', 'libraries', name, 'library')
48
- )
49
- end
50
- @path = dir.join(Pathname.new("#{name}.jar"))
51
- end
52
- end
53
-
54
- def library_path
55
- Processing::RP_CONFIG.fetch('library_path', "#{ENV['HOME']}/.jruby_art")
56
- end
57
-
58
- def ruby?
59
- path.extname == '.rb'
60
- end
61
-
62
- def exist?
63
- path.exist?
64
- end
65
-
66
- def load_jars
67
- Dir.glob("#{dir}/*.jar").each do |jar|
68
- require jar
69
- end
70
- return unless native_binaries?
71
-
72
- add_binaries_to_classpath
73
- end
74
-
75
- def native_binaries?
76
- native_folder = NativeFolder.new
77
- native = native_folder.name
78
- @ppath = File.join(dir, native)
79
- File.directory?(ppath) &&
80
- !Dir.glob(File.join(ppath, native_folder.extension)).empty?
81
- end
82
-
83
- def add_binaries_to_classpath
84
- native_loader = NativeLoader.new
85
- native_loader.add_native_path(ppath)
86
- end
22
+ )).exist?
23
+ return if (@path = Pathname.new(
24
+ File.join(K9_ROOT, 'library', name, "#{name}.rb")
25
+ )).exist?
26
+
27
+ locate_java
28
+ end
29
+
30
+ def locate_java
31
+ @dir = Pathname.new(
32
+ File.join(SKETCH_ROOT, 'library', name)
33
+ )
34
+ return @path = dir.join(Pathname.new("#{name}.jar")) if dir.directory?
35
+
36
+ locate_installed_java
37
+ end
38
+
39
+ def locate_installed_java
40
+ return if dir.directory?
41
+
42
+ if Processing::RP_CONFIG.fetch('processing_ide', false)
43
+ prefix = library_path
44
+ @dir = Pathname.new(File.join(prefix, 'libraries', name, 'library'))
45
+ @path = dir.join(Pathname.new("#{name}.jar"))
46
+ else
47
+ @dir = Pathname.new(
48
+ File.join(ENV['HOME'], '.jruby_art', 'libraries', name, 'library')
49
+ )
50
+ end
51
+ @path = dir.join(Pathname.new("#{name}.jar"))
52
+ end
53
+
54
+ def library_path
55
+ Processing::RP_CONFIG.fetch('library_path', "#{ENV['HOME']}/.jruby_art")
56
+ end
57
+
58
+ def ruby?
59
+ path.extname == '.rb'
60
+ end
61
+
62
+ def exist?
63
+ path.exist?
64
+ end
65
+
66
+ def load_jars
67
+ Dir.glob("#{dir}/*.jar").sort.each do |jar|
68
+ require jar
87
69
  end
70
+ return unless native_binaries?
71
+
72
+ add_binaries_to_classpath
73
+ end
74
+
75
+ def native_binaries?
76
+ native_folder = NativeFolder.new
77
+ native = native_folder.name
78
+ @ppath = File.join(dir, native)
79
+ File.directory?(ppath) &&
80
+ !Dir.glob(File.join(ppath, native_folder.extension)).empty?
81
+ end
82
+
83
+ def add_binaries_to_classpath
84
+ native_loader = NativeLoader.new
85
+ native_loader.add_native_path(ppath)
86
+ end
87
+ end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: false
2
+
2
3
  # The processing wrapper module
3
4
  module Processing
4
5
  require_relative 'library'
@@ -19,7 +20,7 @@ module Processing
19
20
  # Load a list of Ruby or Java libraries (in that order)
20
21
  # Usage: load_libraries :video, :video_event
21
22
  #
22
- # If a library is put into a 'library' folder next to the sketch it will be used
23
+ # If a library is put into a 'library' folder next to the sketch it will be used
23
24
  # instead of the library that ships with vanilla processing (or ide installed), or JRubyArt.
24
25
  def load_libraries(*args)
25
26
  message = 'no such file to load -- %s'
@@ -32,10 +33,12 @@ module Processing
32
33
 
33
34
  def loader(name)
34
35
  return true if @loaded_libraries.include?(name)
36
+
35
37
  fname = name.to_s
36
38
  library = Library.new(fname)
37
39
  library.locate
38
40
  return require_library(library, name) if library.ruby?
41
+
39
42
  warn("Not found library: #{fname}") unless library.exist?
40
43
  load_jars(library, name)
41
44
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rbconfig'
2
4
 
3
5
  # Utility to load native binaries on Java CLASSPATH
@@ -5,10 +7,9 @@ require 'rbconfig'
5
7
  class NativeFolder
6
8
  attr_reader :os, :bit
7
9
 
8
- LINUX_FORMAT = 'linux%s'.freeze
9
- ARM32 = '-armv6hf'.freeze
10
- # ARM64 = '-aarch64'.freeze
11
- WIN_FORMAT = 'windows%d'.freeze
10
+ LINUX_FORMAT = 'linux%<bit>d'
11
+ # ARM64 = '-aarch64'
12
+ WIN_FORMAT = 'windows%<bit>d'
12
13
  WIN_PATTERNS = [
13
14
  /bccwin/i,
14
15
  /cygwin/i,
@@ -20,25 +21,26 @@ class NativeFolder
20
21
 
21
22
  def initialize
22
23
  @os = RbConfig::CONFIG['host_os'].downcase
23
- @bit = java.lang.System.get_property('os.arch')
24
+ @bit = /64/.match?(java.lang.System.get_property('os.arch')) ? 64 : 32
24
25
  end
25
26
 
26
27
  def name
27
28
  return 'macosx' if /darwin|mac/.match?(os)
28
- if /linux/.match?(os)
29
- return format(LINUX_FORMAT, '64') if /amd64/.match?(bit)
30
- return format(LINUX_FORMAT, ARM32) if /arm/.match?(bit)
31
- end
32
- if WIN_PATTERNS.any? { |pat| pat =~ os }
33
- return format(WIN_FORMAT, '64') if /64/.match?(bit)
34
- return format(WIN_FORMAT, '32') if /32/.match?(bit)
29
+
30
+ return format(LINUX_FORMAT, bit: bit) if /linux/.match?(os)
31
+
32
+ unless WIN_PATTERNS.any? { |pat| pat.match?(os) }
33
+ raise StandardError, 'Unsupported Architecture'
35
34
  end
36
- raise 'Unsupported Architecture'
35
+
36
+ format(WIN_FORMAT, bit: bit)
37
37
  end
38
38
 
39
39
  def extension
40
40
  return '*.so' if /linux/.match?(os)
41
- return '*.dll' if WIN_PATTERNS.any? { |pat| pat =~ os }
41
+
42
+ return '*.dll' if WIN_PATTERNS.any? { |pat| pat.match?(os) }
43
+
42
44
  '*.dylib' # MacOS
43
45
  end
44
46
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This class knows how to dynamically set the 'java' native library path
2
4
  # It might not work with java 9?
3
5
  class NativeLoader
@@ -20,6 +22,7 @@ class NativeLoader
20
22
  field = JC::Class.for_name('java.lang.ClassLoader')
21
23
  .get_declared_field('sys_paths')
22
24
  return unless field
25
+
23
26
  field.accessible = true # some jruby magic
24
27
  field.set(JC::Class.for_name('java.lang.System').get_class_loader, nil)
25
28
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # detects processing preferences.txt, extracts sketchbook_path
2
4
  class ProcessingIde
3
5
  attr_reader :preferences
@@ -12,7 +14,9 @@ class ProcessingIde
12
14
  def sketchbook_path
13
15
  File.open(preferences, 'r') do |file|
14
16
  file.each_line do |line|
15
- return line.tap { |sli| sli.slice!('sketchbook.path.three=') }.chomp if line =~ /sketchbook/
17
+ if /sketchbook/.match?(line)
18
+ return line.tap { |sli| sli.slice!('sketchbook.path.three=') }.chomp
19
+ end
16
20
  end
17
21
  end
18
22
  end
@@ -23,11 +23,11 @@ module Processing
23
23
  /ming/i,
24
24
  /mswin/i,
25
25
  /wince/i
26
- ]
26
+ ].freeze
27
27
 
28
- INSTALL = <<~MSG
29
- <Config|JRuby-Complete|Samples>
30
- or <Sound|Video> library
28
+ INSTALL = <<~MSG.freeze
29
+ <Config|JRuby-Complete|Samples>
30
+ or <Sound|Video> library
31
31
  MSG
32
32
 
33
33
  attr_reader :options, :argc, :filename, :os
@@ -141,9 +141,10 @@ module Processing
141
141
  def install(library = nil)
142
142
  require_relative 'installer'
143
143
  library ||= 'new'
144
- case library.downcase
144
+ choice = library.downcase
145
+ case choice
145
146
  when /sound|video/
146
- system "cd #{K9_ROOT}/vendors && rake download_and_copy_#{choice}"
147
+ system "cd #{K9_ROOT}/vendors && rake install_#{choice}"
147
148
  when /samples/
148
149
  system "cd #{K9_ROOT}/vendors && rake install_samples"
149
150
  when /jruby/
@@ -156,11 +157,10 @@ module Processing
156
157
  system "cd #{K9_ROOT}/vendors && rake"
157
158
  Installer.new.install
158
159
  else
159
- warn format('No installer for %s', library)
160
+ warn format('No installer for %<library>s', library: library)
160
161
  end
161
162
  end
162
163
 
163
-
164
164
  def check
165
165
  require_relative '../jruby_art/config'
166
166
  Config.new.check
@@ -201,7 +201,9 @@ module Processing
201
201
 
202
202
  # NB: We really do mean to use 'and' not '&&' for flow control purposes
203
203
  def ensure_exists(filename)
204
- puts("Couldn't find: #{filename}") and exit unless FileTest.exist?(filename)
204
+ return if FileTest.exist?(filename)
205
+
206
+ puts("Couldn't find: #{filename}") and exit
205
207
  end
206
208
 
207
209
  def jruby_complete
@@ -213,7 +215,7 @@ module Processing
213
215
  end
214
216
 
215
217
  def remove_old_config
216
- old_config = File.join("#{ENV['HOME']}", '.jruby_art', 'config.yml')
218
+ old_config = File.join((ENV['HOME']).to_s, '.jruby_art', 'config.yml')
217
219
  puts "Removing #{old_config}"
218
220
  system "rm #{old_config}"
219
221
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  SKETCH_PATH ||= ARGV.shift
3
4
  SKETCH_ROOT ||= File.absolute_path(File.dirname(SKETCH_PATH))
4
5
 
@@ -1,17 +1,20 @@
1
1
  # frozen_string_literal: false
2
+
2
3
  # A pry shell for live coding.
3
4
  # Will start with your sketch.
4
5
  require_relative 'base'
5
6
  Processing.load_and_run_sketch
6
7
 
8
+ # Custom Exception
7
9
  class PryException < StandardError
10
+ MESSAGE = "You need to 'jruby -S gem install pry' for 'live' mode".freeze
11
+
12
+ def initialize(msg = MESSAGE)
13
+ super
14
+ end
8
15
  end
9
16
 
10
- MESSAGE = "You need to 'jruby -S gem install pry' for 'live' mode".freeze
17
+ raise PryException unless Gem::Specification.find_all_by_name('pry').any?
11
18
 
12
- if Gem::Specification.find_all_by_name('pry').any?
13
- require 'pry'
14
- Processing.app.pry
15
- else
16
- raise(PryException.new, MESSAGE)
17
- end
19
+ require 'pry'
20
+ Processing.app.pry
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative 'base'
3
4
 
4
5
  Processing.load_and_run_sketch
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: false
2
+
2
3
  require_relative 'base'
3
4
  require_relative '../config'
4
5
 
@@ -21,9 +22,10 @@ module Processing
21
22
  EOS
22
23
  SLEEP_TIME = 0.2
23
24
  def initialize
24
- count = Dir["**.*rb"].length
25
+ count = Dir['**.*rb'].length
25
26
  max_watch = RP_CONFIG.fetch('MAX_WATCH', 20)
26
- return warn format(WATCH_MESSAGE, max_watch, count) if count > max_watch.to_i
27
+ abort format(WATCH_MESSAGE, max_watch, count) if count > max_watch.to_i
28
+
27
29
  reload_files_to_watch
28
30
  @time = Time.now
29
31
  start_watching
@@ -36,7 +38,7 @@ module Processing
36
38
  Kernel.loop do
37
39
  if @files.find { |file| FileTest.exist?(file) && File.stat(file).mtime > @time }
38
40
  puts 'reloading sketch...'
39
- Processing.app && Processing.app.close
41
+ Processing.app&.close
40
42
  java.lang.System.gc
41
43
  @time = Time.now
42
44
  start_runner
@@ -66,7 +68,7 @@ module Processing
66
68
  end
67
69
 
68
70
  def start_runner
69
- @runner.kill if @runner && @runner.alive?
71
+ @runner.kill if @runner&.alive?
70
72
  @runner.join
71
73
  @runner = nil
72
74
  start_original
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # A wrapper for version
3
4
  module JRubyArt
4
- VERSION = '2.2.2'
5
+ VERSION = '2.4.3'
5
6
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # Boids -- after Tom de Smedt.
3
4
  # See his Python version: http://nodebox.net/code/index.php/Boids
4
5
  # This is an example of how a pure-Ruby library can work. Original for
@@ -8,7 +9,8 @@ class Boid
8
9
  attr_reader :boids
9
10
  attr_accessor :vel, :pos, :is_perching, :perch_time
10
11
  def initialize(boids, pos)
11
- @boids, @flock = boids, boids
12
+ @boids = boids
13
+ @flock = boids
12
14
  @pos = pos
13
15
  @vel = Vec3D.new
14
16
  @is_perching = false
@@ -54,6 +56,7 @@ class Boid
54
56
  # Tweet, Tweet! The boid police will bust you for breaking the speed limit.
55
57
  most = [vel.x.abs, vel.y.abs, vel.z.abs].max
56
58
  return if most < max
59
+
57
60
  scale = max / most.to_f
58
61
  @vel *= scale
59
62
  end
@@ -70,13 +73,13 @@ end
70
73
 
71
74
  require 'forwardable'
72
75
 
73
- # The Boids class
76
+ # The Boids class NB: perchance => perch chance
74
77
  class Boids
75
78
  include Enumerable
76
79
  extend Forwardable
77
80
  def_delegators(:@boids, :reject, :<<, :each, :shuffle!, :length, :next)
78
81
 
79
- attr_reader :has_goal, :perch, :perch_tm, :perch_y
82
+ attr_reader :has_goal, :perchance, :perch_tm, :perch_y
80
83
 
81
84
  def initialize
82
85
  @boids = []
@@ -89,16 +92,20 @@ class Boids
89
92
 
90
93
  def setup(n, x, y, w, h)
91
94
  n.times do
92
- dx, dy = rand(w), rand(h)
95
+ dx = rand(w)
96
+ dy = rand(h)
93
97
  z = rand(200.0)
94
98
  self << Boid.new(self, Vec3D.new(x + dx, y + dy, z))
95
99
  end
96
- @x, @y, @w, @h = x, y, w, h
100
+ @x = x
101
+ @y = y
102
+ @w = w
103
+ @h = h
97
104
  @scattered = false
98
105
  @scatter = 0.005
99
106
  @scatter_time = 50.0
100
107
  @scatter_i = 0.0
101
- @perch = 1.0 # Lower this number to divebomb.
108
+ @perchance = 1.0 # Lower this number to divebomb.
102
109
  @perch_y = h
103
110
  @perch_tm = -> { 25.0 + rand(50.0) }
104
111
  @has_goal = false
@@ -119,11 +126,11 @@ class Boids
119
126
  def perch(ground = nil, chance = 1.0, frames = nil)
120
127
  @perch_tm = frames.nil? ? -> { 25.0 + rand(50.0) } : frames
121
128
  @perch_y = ground.nil? ? @h : ground
122
- @perch = chance
129
+ @perchance = chance
123
130
  end
124
131
 
125
132
  def no_perch
126
- @perch = 0.0
133
+ @perchance = 0.0
127
134
  end
128
135
 
129
136
  def reset_goal(target)
@@ -146,7 +153,8 @@ class Boids
146
153
 
147
154
  def constrain
148
155
  # Put them boids in a cage.
149
- dx, dy = @w * 0.1, @h * 0.1
156
+ dx = @w * 0.1
157
+ dy = @h * 0.1
150
158
  each do |b|
151
159
  b.vel.x += rand(dx) if b.pos.x < @x - dx
152
160
  b.vel.y += rand(dy) if b.pos.y < @y - dy
@@ -154,7 +162,8 @@ class Boids
154
162
  b.vel.y -= rand(dy) if b.pos.y > @y + @h + dy
155
163
  b.vel.z += 10.0 if b.pos.z < 0.0
156
164
  b.vel.z -= 10.0 if b.pos.z > 100.0
157
- next unless b.pos.y > perch_y && rand < perch
165
+ next unless b.pos.y > perch_y && rand < perchance
166
+
158
167
  b.pos.y = perch_y
159
168
  b.vel.y = b.vel.y.abs * -0.2
160
169
  b.is_perching = true