pbox2d 0.5.0-java → 0.6.0-java

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 892dc4c6bb63dfa90f257605378cf40da48bed18
4
- data.tar.gz: 58a5e3b1de46dad55499d945ca32f8bfc5dbe623
3
+ metadata.gz: 2b3b3f0c237c5cf38c10b625751a518d36d692f2
4
+ data.tar.gz: 28aa8334e4f84613d0743949cd4f67b031612c01
5
5
  SHA512:
6
- metadata.gz: cc18b5cb955557edc6e2989591201cd8d397afe6317bf787816eafcf444b31d9f3a53412e9e65a872b0c52af1d906abd181545d43d5cf1b4348f11939d74b70d
7
- data.tar.gz: 75b35aabdbe6c41bed94efeab684b5c533e8461106c488464c4a6bb74899eb83a860d0886ed77b78a6fe95c8a6f4a23985e5d5e31b04b9526d9898c839aca4f3
6
+ metadata.gz: 2857f66b9284572a9259d40e75db177eebc48c722eaabb84cf7a4241f0f601b12e172f009482d5ea2c78df5927d2c259993461376a92da58415d94b4752cbb3d
7
+ data.tar.gz: 4fec10358a5a1b97cd0cda88523593a755f9a0fd44b2288cc15a1fe7de2106633c4db58c7be77e044de7c3295833a1d39cd1e78577fe3b363dd92380b9d7ed30
data/CHANGELOG.md CHANGED
@@ -1,4 +1,8 @@
1
- ### v0.5.0.pre
1
+ ### v0.6.0
2
+
3
+ Added import for jbox2d Particle, ParticleGroup etc (see PB module). Introduced WorldBuilder module to get rid of boilerplate code for the user. Reworked examples to use a common Boundary class.
4
+
5
+ ### v0.5.0
2
6
 
3
7
  Break compatability with ruby-processing. New build uses maven. Works with JRuby-9.0.3.0, processing-3.0.1 and jdk8.
4
8
 
data/CONTRIBUTING.md CHANGED
@@ -17,7 +17,6 @@ already been submitted. When submitting a bug report, ideally include a [Gist][]
17
17
  that includes a stack trace and any details that may be necessary to reproduce
18
18
  the bug, including your gem version, Ruby version, and operating system.
19
19
 
20
-
21
20
  ## Submitting a Pull Request
22
21
  1. [Fork the repository.][fork]
23
22
  2. [Submit a pull request.][pr]
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ### Using JBox2D in ruby-processing
2
2
 
3
- Here we demonstrate how to use JBox2D library as a rubygem. This approach could be an exemplar of how to use other processing/java libraries with both ruby-processing and JRubyArt.
3
+ Here we demonstrate how to use JBox2D library as a rubygem. This approach could be an exemplar of how to use other processing/java libraries with both ruby-processing and JRubyArt (now using a maven build).
4
4
  ![liquidy](http://4.bp.blogspot.com/-dwnDQZVugwo/VFXrDxGOy4I/AAAAAAAAEgo/irsZxW_WLOA/s400/liquidy.png)
5
5
 
6
6
 
data/Rakefile CHANGED
@@ -25,7 +25,7 @@ end
25
25
  desc 'Compile'
26
26
  task :compile do
27
27
  sh "mvn package"
28
- sh "mvn dependency:copy"
28
+ sh "cp ${HOME}/jbox2d/jbox2d-library/target/jbox2d-library-2.3.1-SNAPSHOT.jar lib"
29
29
  sh "mv target/box2d.jar lib"
30
30
  end
31
31
 
@@ -10,9 +10,7 @@ attr_reader :srface, :box2d, :particles
10
10
  def setup
11
11
  sketch_title 'Bumpy Surface Noise'
12
12
  # Initialize box2d physics and create the world
13
- @box2d = Box2D.new(self)
14
- box2d.init_options(gravity: [0, -20])
15
- box2d.create_world
13
+ @box2d = WorldBuilder.build(app: self, gravity: [0, -20])
16
14
  # to later set a custom gravity
17
15
  # box2d.gravity([0, -20])
18
16
  # Create the empty list
@@ -14,8 +14,7 @@ end
14
14
 
15
15
  def setup
16
16
  sketch_title 'Collision Listening'
17
- @box2d = Box2D.new(self)
18
- box2d.create_world
17
+ @box2d = WorldBuilder.build(app: self)
19
18
  box2d.add_listener(CustomListener.new)
20
19
  @particles = []
21
20
  @wall = Boundary.new(box2d, Vect.new(width / 2, height - 5), Vect.new(width, 10))
@@ -28,7 +28,7 @@ class Boundary
28
28
  b.create_fixture(sd, 1)
29
29
  end
30
30
 
31
- # Draw the boundary, if it were at an angle we'd have to do something fancier
31
+ # Draw the boundary, if it were at an angle we'd have to do something fancy
32
32
  def display
33
33
  fill(0)
34
34
  stroke(0)
@@ -20,8 +20,7 @@ end
20
20
 
21
21
  def setup
22
22
  # Initialize box2d physics and create the world
23
- @box2d = Box2D.new(self)
24
- box2d.create_world
23
+ @box2d = WorldBuilder.build(app: self)
25
24
  @system = ParticleSystem.new
26
25
  @boundaries = []
27
26
  # Add a bunch of fixed boundaries
@@ -11,11 +11,11 @@ class ParticleSystem
11
11
  include Enumerable, Runnable
12
12
  extend Forwardable
13
13
  def_delegators(:@pairs, :each, :reject!, :<<)
14
-
14
+
15
15
  def initialize
16
16
  @pairs = []
17
17
  end
18
-
18
+
19
19
  def add_pair(x, y)
20
20
  self << Pair.new(x, y)
21
21
  end
@@ -1,7 +1,8 @@
1
+ # Re-usable Boundary class
1
2
  class Boundary
2
3
  include Processing::Proxy
3
4
  attr_reader :box2d, :b, :pos, :size, :a
4
-
5
+
5
6
  def initialize(b2d, pos, sz, a = 0)
6
7
  @box2d, @pos, @size, @a = b2d, pos, sz, a
7
8
  # Define the polygon
@@ -21,7 +22,7 @@ class Boundary
21
22
  b.create_fixture(sd, 1)
22
23
  end
23
24
 
24
- # Draw the boundary, it doesn't move so we don't have to ask the Body for location
25
+ # Draw the boundary, it doesn't move so we don't ask for location
25
26
  def display
26
27
  fill(0)
27
28
  stroke(0)
@@ -31,7 +32,7 @@ class Boundary
31
32
  push_matrix
32
33
  translate(pos.x, pos.y)
33
34
  rotate(-a)
34
- rect(0, 0, size.x,size.y)
35
+ rect(0, 0, size.x, size.y)
35
36
  pop_matrix
36
37
  end
37
38
  end
data/examples/lib/box.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # A Box class, note how to access class ParticleGroupDef in jruby
2
- # which is imported into PB module (not in global namespace)
2
+ # which is imported to PB module to avoid namespace clashes
3
3
  class Box
4
- attr_accessor :pg
5
4
  def initialize(b2d, x, y)
6
5
  w = rand(1..3)
7
6
  h = rand(1..3)
@@ -10,6 +9,6 @@ class Box
10
9
  shape.setAsBox(w, h, pos, 0)
11
10
  pd = PB::ParticleGroupDef.new
12
11
  pd.shape = shape
13
- @pg = b2d.world.create_particle_group(pd)
12
+ b2d.world.create_particle_group(pd)
14
13
  end
15
14
  end
@@ -70,5 +70,3 @@ class CustomShape
70
70
  body.set_angular_velocity(rand(-5.0..5))
71
71
  end
72
72
  end
73
-
74
-
@@ -2,9 +2,9 @@
2
2
  # when two particles collide (no change just hitting boundary)
3
3
  class Particle
4
4
  extend Forwardable
5
- def_delegators(:@app, :box2d, :begin_shape, :color, :end_shape, :line, :pop_matrix,
6
- :ellipse, :translate, :rotate, :stroke, :push_matrix, :fill,
7
- :no_fill, :stroke_weight)
5
+ def_delegators(:@app, :box2d, :begin_shape, :color, :end_shape, :line,
6
+ :pop_matrix, :ellipse, :translate, :rotate, :stroke,
7
+ :push_matrix, :fill, :no_fill, :stroke_weight)
8
8
  attr_accessor :body
9
9
  attr_reader :radius, :col
10
10
 
@@ -2,11 +2,12 @@ require 'forwardable'
2
2
 
3
3
  module Runnable
4
4
  def run
5
- reject! { |item| item.done }
6
- each { |item| item.display }
5
+ reject!(&:done)
6
+ each(&:display)
7
7
  end
8
8
  end
9
9
 
10
+ # Not be confused with the jbox2d ParticleSystem
10
11
  class ParticleSystem
11
12
  include Enumerable, Runnable
12
13
  extend Forwardable
@@ -14,15 +15,15 @@ class ParticleSystem
14
15
  def_delegator(:@particles, :empty?, :dead?)
15
16
 
16
17
  attr_reader :x, :y
17
-
18
+
18
19
  def initialize(bd, num, x, y)
19
20
  @particles = [] # Initialize the Array
20
- @x, @y = x, y # Store the origin point
21
+ @x, @y = x, y # Store the origin point
21
22
  num.times do
22
23
  self << Particle.new(bd, x, y)
23
24
  end
24
25
  end
25
-
26
+
26
27
  def add_particles(bd, n)
27
28
  n.times do
28
29
  self << Particle.new(bd, x, y)
@@ -37,9 +38,9 @@ class Particle
37
38
  include Processing::Proxy
38
39
  TRAIL_SIZE = 6
39
40
  # We need to keep track of a Body
40
-
41
+
41
42
  attr_reader :trail, :body, :box2d
42
-
43
+
43
44
  # Constructor
44
45
  def initialize(b2d, x, y)
45
46
  @box2d = b2d
@@ -49,22 +50,22 @@ class Particle
49
50
  # This way we have collisions, but they don't overwhelm the system
50
51
  make_body(x, y, 0.2)
51
52
  end
52
-
53
+
53
54
  # This function removes the particle from the box2d world
54
55
  def kill_body
55
56
  box2d.destroy_body(body)
56
57
  end
57
-
58
+
58
59
  # Is the particle ready for deletion?
59
60
  def done
60
61
  # Let's find the screen position of the particle
61
62
  pos = box2d.body_coord(body)
62
63
  # Is it off the bottom of the screen?
63
- return false unless (pos.y > box2d.height + 20)
64
+ return false unless pos.y > box2d.height + 20
64
65
  kill_body
65
66
  true
66
67
  end
67
-
68
+
68
69
  # Drawing the box
69
70
  def display
70
71
  # We look at each body and get its screen position
@@ -84,7 +85,7 @@ class Particle
84
85
  end
85
86
  end_shape
86
87
  end
87
-
88
+
88
89
  # This function adds the rectangle to the box2d world
89
90
  def make_body(x, y, r)
90
91
  # Define and create the body
@@ -100,7 +101,7 @@ class Particle
100
101
  fd = FixtureDef.new
101
102
  fd.shape = cs
102
103
  fd.density = 1
103
- fd.friction = 0 # Slippery when wet!
104
+ fd.friction = 0 # Slippery when wet!
104
105
  fd.restitution = 0.5
105
106
  # We could use this if we want to turn collisions off
106
107
  # cd.filter.groupIndex = -10
@@ -1,25 +1,25 @@
1
+ # custom runnable module
1
2
  module Runnable
2
3
  def run
3
- reject! { |item| item.done }
4
- each { |item| item.display }
4
+ reject!(&:done)
5
+ each(&:display)
5
6
  end
6
7
  end
7
8
 
9
+ # using forwardable to make a custom enumerable
8
10
  class ShapeSystem
9
11
  include Enumerable, Runnable
10
12
  extend Forwardable
11
13
  def_delegators(:@polygons, :each, :reject!, :<<)
12
14
 
13
15
  attr_reader :bd
14
-
16
+
15
17
  def initialize(bd)
16
18
  @bd = bd
17
- @polygons = [] # Initialize the Array
19
+ @polygons = [] # Initialize the Array
18
20
  end
19
-
21
+
20
22
  def add_polygon(x, y)
21
23
  self << CustomShape.new(bd, x, y)
22
24
  end
23
25
  end
24
-
25
-
@@ -56,9 +56,9 @@ class Surface
56
56
  stroke(0)
57
57
  fill(135, 206, 250)
58
58
  begin_shape
59
- vertex(width, 0) # extra vertices so we can fill sky
60
- surface.map { |v| vertex(v.x, v.y) } # the mountain range
61
- vertex(0, 0) # extra vertices so we can fill sky
59
+ vertex(width, 0) # extra vertices so we can fill sky
60
+ surface.map { |v| vertex(v.x, v.y) } # the mountain range
61
+ vertex(0, 0) # extra vertices so we can fill sky
62
62
  end_shape
63
63
  end
64
64
  end
@@ -100,7 +100,7 @@ class Particle
100
100
  # Get its angle of rotation
101
101
  a = body.get_angle
102
102
  push_matrix
103
- translate(pos.x, pos.y)
103
+ translate(pos.x, pos.y)
104
104
  rotate(-a)
105
105
  fill(175)
106
106
  stroke(0)
@@ -133,4 +133,4 @@ class Particle
133
133
  body.set_linear_velocity(Vec2.new(rand(-10..10), rand(5..10)))
134
134
  body.set_angular_velocity(rand(-10..10))
135
135
  end
136
- end
136
+ end
@@ -11,11 +11,13 @@ attr_reader :boxes, :boundaries, :box2d
11
11
 
12
12
  Vect = Struct.new(:x, :y)
13
13
 
14
+ def settings
15
+ size(640, 360, P2D)
16
+ end
17
+
14
18
  def setup
15
19
  sketch_title 'Liquid Fun Test'
16
- @box2d = Box2D.new(self)
17
- box2d.init_options(gravity: [0, -10])
18
- box2d.create_world
20
+ @box2d = WorldBuilder.build(app: self)
19
21
  @boxes = []
20
22
  box2d.world.set_particle_radius(0.15)
21
23
  box2d.world.set_particle_damping(0.2)
@@ -43,7 +45,3 @@ def draw
43
45
  fill(0)
44
46
  text(format('f.p.s %d', frame_rate), 10, 60)
45
47
  end
46
-
47
- def settings
48
- size(640, 360, P2D)
49
- end
data/examples/liquidy.rb CHANGED
@@ -5,11 +5,13 @@ attr_reader :box2d, :boundaries, :systems
5
5
 
6
6
  Vect = Struct.new(:x, :y)
7
7
 
8
+ def settings
9
+ size(400, 300)
10
+ end
11
+
8
12
  def setup
9
13
  sketch_title 'Liquidy'
10
- @box2d = Box2D.new(self)
11
- box2d.init_options(gravity: [0, -20])
12
- box2d.create_world
14
+ @box2d = WorldBuilder.build(app: self, gravity: [0, -20])
13
15
  @systems = []
14
16
  @boundaries = [
15
17
  Boundary.new(box2d, Vect.new(50, 100), Vect.new(300, 5), -0.3),
@@ -34,7 +36,3 @@ def mouse_pressed
34
36
  # Add a new Particle System whenever the mouse is clicked
35
37
  systems << ParticleSystem.new(box2d, 0, mouse_x, mouse_y)
36
38
  end
37
-
38
- def settings
39
- size(400,300)
40
- end
@@ -30,13 +30,13 @@ class Boundary
30
30
  b.create_fixture(sd, 1)
31
31
  end
32
32
 
33
- # Draw the boundary, if it were at an angle we'd have to do something fancier
33
+ # Draw the boundary, if it were at an angle we'd have to do something fancy
34
34
  def display
35
35
  no_fill
36
36
  stroke(127)
37
37
  fill(127)
38
38
  stroke_weight(1)
39
- rect_mode(Java::ProcessingCore::CENTER)
39
+ rect_mode(Java::ProcessingCore::PConstants::CENTER)
40
40
  a = b.get_angle
41
41
  push_matrix
42
42
  translate(x, y)
@@ -34,7 +34,7 @@ class Box
34
34
  pos = box2d.body_coord(body)
35
35
  # Get its angle of rotation
36
36
  a = body.getAngle
37
- rect_mode(Java::ProcessingCore::CENTER)
37
+ rect_mode(Java::ProcessingCore::PConstants::CENTER)
38
38
  push_matrix
39
39
  translate(pos.x, pos.y)
40
40
  rotate(a)
@@ -1,4 +1,4 @@
1
- # dummy_spring.rb by Martin Prout
1
+ # dummy_spring.rb by Martin Prout
2
2
  # An example of duck-typing in ruby-processing
3
3
 
4
4
  # This class avoids the tests for null of the vanilla processing version
@@ -14,11 +14,14 @@ require 'forwardable'
14
14
  # A reference to our box2d world
15
15
  attr_reader :box2d, :boundaries, :box, :spring
16
16
 
17
- def setup
17
+ def settings
18
18
  size(640, 360)
19
+ end
20
+
21
+ def setup
22
+ sketch_title 'Mouse Joint'
19
23
  # Initialize box2d physics and create the world
20
- @box2d = Box2D.new self
21
- box2d.create_world
24
+ @box2d = WorldBuilder.build(app: self)
22
25
  # Make the box
23
26
  @box = Box.new(width / 2, height / 2)
24
27
  # Make a dummy spring
data/examples/polygons.rb CHANGED
@@ -11,9 +11,7 @@ Vect = Struct.new(:x, :y)
11
11
  def setup
12
12
  sketch_title 'Polygons'
13
13
  smooth
14
- @box2d = Box2D.new(self)
15
- box2d.init_options(gravity: [0, -20])
16
- box2d.create_world
14
+ @box2d = WorldBuilder.build(app: self, gravity: [0, -20])
17
15
  @system = ShapeSystem.new self
18
16
  @boundaries = [
19
17
  Boundary.new(box2d, Vect.new(width / 4, height - 5), Vect.new(width / 2 - 50, 10)),
@@ -9,34 +9,42 @@ java_alias :stroke_int, :stroke, [Java::int]
9
9
 
10
10
  Vect = Struct.new(:x, :y)
11
11
 
12
+ def settings
13
+ size(400, 300)
14
+ end
15
+
12
16
  def setup
13
17
  sketch_title 'Quick Test'
14
- stroke_int(0) # set stroke this way to avoid overload warnings
18
+ stroke_int(0) # set stroke this way to avoid overload warnings
15
19
  srand(5)
16
20
  # Initialize box2d physics and create the world
17
- @box2d = Box2D.new(self)
21
+ @box2d = WorldBuilder.build(applet: self, scale: 10, gravity: [0, -20.0])
18
22
  puts box2d.version # print out version of pbox2d gem in use
19
- box2d.init_options(scale: 10, gravity: [0, -20.0])
20
- box2d.create_world
21
- # Set a custom gravity
22
- # box2d.gravity(0, -20)
23
- # Create ArrayLists
23
+ # To later set a custom gravity
24
+ # box2d.gravity(0, -20)
25
+ # Create ArrayLists
24
26
  @boxes = []
25
27
  @boundaries = [
26
- Boundary.new(box2d, Vect.new(width / 4, height - 5), Vect.new(width / 2 - 50, 10)),
27
- Boundary.new(box2d, Vect.new(3 * width / 4, height - 50), Vect.new(width / 2 - 50, 10))
28
+ Boundary.new(
29
+ box2d,
30
+ Vect.new(width / 4, height - 5),
31
+ Vect.new(width / 2 - 50, 10)),
32
+ Boundary.new(
33
+ box2d,
34
+ Vect.new(3 * width / 4, height - 50),
35
+ Vect.new(width / 2 - 50, 10))
28
36
  ]
29
37
  end
30
38
 
31
39
  def draw
32
- background_int(255) # set background this way to avoid overload warnings
40
+ background_int(255) # set background this way to avoid overload warnings
33
41
  # Boxes fall from the top every so often
34
42
  boxes << Box.new(box2d, width / 2, 30) if rand < 0.99
35
- boundaries.each(&:display)
36
- boxes.each(&:display)
37
- # Boxes that leave the screen, we delete them note they have to be deleted
38
- # from both the box2d world and locally
39
- boxes.reject!(&:done)
43
+ boundaries.each(&:display)
44
+ boxes.each(&:display)
45
+ # Boxes that leave the screen, we delete them note they have to be deleted
46
+ # from both the box2d world and locally
47
+ boxes.reject!(&:done)
40
48
  exit if frame_count >= 908
41
49
  end
42
50
 
@@ -45,7 +53,7 @@ class Box
45
53
  include Processing::Proxy
46
54
  # We need to keep track of a Body and a width and height
47
55
  attr_reader :box2d, :body, :w, :h
48
-
56
+
49
57
  # Constructor
50
58
  def initialize(b2d, x, y)
51
59
  @w = rand(4..16)
@@ -54,7 +62,7 @@ class Box
54
62
  # Add the box to the box2d world
55
63
  make_body(Vec2.new(x, y), w, h)
56
64
  end
57
-
65
+
58
66
  def done
59
67
  # Let's find the screen position of the particle
60
68
  pos = box2d.body_coord(body)
@@ -63,13 +71,13 @@ class Box
63
71
  box2d.destroy_body(body)
64
72
  true
65
73
  end
66
-
74
+
67
75
  # Drawing the box
68
76
  def display
69
77
  # We look at each body and get its screen position
70
78
  pos = box2d.body_coord(body)
71
79
  # Get its angle of rotation
72
- a = body.angle
80
+ a = body.angle
73
81
  rect_mode(CENTER)
74
82
  push_matrix
75
83
  translate(pos.x, pos.y)
@@ -78,25 +86,25 @@ class Box
78
86
  rect(0, 0, w, h)
79
87
  pop_matrix
80
88
  end
81
-
89
+
82
90
  # This function adds the rectangle to the box2d world
83
- def make_body(center, w, h)
91
+ def make_body(center, w, h)
84
92
  # Define a polygon (this is what we use for a rectangle)
85
93
  sd = PolygonShape.new
86
94
  box2d_w = box2d.scale_to_world(w / 2)
87
95
  box2d_h = box2d.scale_to_world(h / 2)
88
- sd.setAsBox(box2d_w, box2d_h)
96
+ sd.setAsBox(box2d_w, box2d_h)
89
97
  # Define a fixture
90
98
  fd = FixtureDef.new
91
99
  fd.shape = sd
92
100
  # Parameters that affect physics
93
101
  fd.density = 1
94
102
  fd.friction = 0.3
95
- fd.restitution = 0.5
103
+ fd.restitution = 0.5
96
104
  # Define the body and make it from the shape
97
105
  bd = BodyDef.new
98
106
  bd.type = BodyType::DYNAMIC
99
- bd.position.set(box2d.processing_to_world(center))
107
+ bd.position.set(box2d.processing_to_world(center))
100
108
  cs = CircleShape.new
101
109
  @body = box2d.create_body(bd)
102
110
  body.create_fixture(fd)
@@ -105,7 +113,3 @@ class Box
105
113
  body.setAngularVelocity(rand(-5.0..5))
106
114
  end
107
115
  end
108
-
109
- def settings
110
- size(400,300)
111
- end
@@ -39,7 +39,7 @@ class Box
39
39
  body.createFixture(fd)
40
40
 
41
41
  # Give it some initial random velocity
42
- body.setLinearVelocity(Vec2.new(rand(-5..5),rand(2..5)))
42
+ body.setLinearVelocity(Vec2.new(rand(-5..5), rand(2..5)))
43
43
  body.setAngularVelocity(rand(-5..5))
44
44
  end
45
45
 
@@ -57,12 +57,12 @@ class Box
57
57
 
58
58
  rect_mode(Java::ProcessingCore::PConstants::CENTER)
59
59
  push_matrix
60
- translate(pos.x,pos.y)
60
+ translate(pos.x, pos.y)
61
61
  rotate(-a)
62
62
  fill(127)
63
63
  stroke(0)
64
64
  stroke_weight(2)
65
- rect(0,0,w,h)
65
+ rect(0, 0, w, h)
66
66
  pop_matrix
67
67
  end
68
68
  end
@@ -11,13 +11,12 @@ require_relative 'particle_system'
11
11
  attr_reader :box2d, :windmill, :system
12
12
 
13
13
  def settings
14
- size(640,360)
14
+ size(640, 360)
15
15
  end
16
16
 
17
17
  def setup
18
18
  sketch_title 'Revolute Joint'
19
- @box2d = Box2D.new(self)
20
- box2d.createWorld
19
+ @box2d = WorldBuilder.build(app: self)
21
20
  @windmill = Windmill.new(width / 2, 175)
22
21
  @system = ParticleSystem.new
23
22
  end
@@ -37,3 +36,4 @@ def draw
37
36
  fill(0)
38
37
  text(format("Click mouse to toggle motor.\nMotor: %s", status), 10, height - 30)
39
38
  end
39
+
@@ -11,7 +11,7 @@ class Windmill
11
11
  # Our object is two boxes and one joint
12
12
  # Consider making the fixed box much smaller and not drawing it
13
13
  attr_reader :joint, :box1, :box2
14
-
14
+
15
15
  def initialize(x, y)
16
16
  @app = $app
17
17
  # Initialize locations of two boxes
@@ -22,25 +22,25 @@ class Windmill
22
22
  # NB: using java_send to access the unreachable 'initialize' method
23
23
  rjd.java_send :initialize, [Body, Body, Vec2], box1.body, box2.body, box1.body.getWorldCenter
24
24
  # Turning on a motor (optional)
25
- rjd.motorSpeed = Math::PI * 2 # how fast?
25
+ rjd.motorSpeed = Math::PI * 2 # how fast?
26
26
  rjd.maxMotorTorque = 1000.0 # how powerful?
27
- rjd.enableMotor = false # is it on?
27
+ rjd.enableMotor = false # is it on?
28
28
  # There are many other properties you can set for a Revolute joint
29
29
  # For example, you can limit its angle between a minimum and a maximum
30
- # See box2d manual for more
30
+ # See box2d manual for more
31
31
  # Create the joint
32
32
  @joint = box2d.world.createJoint(rjd)
33
33
  end
34
-
34
+
35
35
  # Turn the motor on or off
36
36
  def toggle_motor
37
37
  joint.enableMotor(!joint.isMotorEnabled)
38
38
  end
39
-
39
+
40
40
  def motor_on?
41
41
  joint.isMotorEnabled
42
- end
43
-
42
+ end
43
+
44
44
  def display
45
45
  box2.display
46
46
  box1.display
@@ -1,6 +1,6 @@
1
1
  require 'forwardable'
2
2
 
3
- CENTER ||= Java::ProcessingCore::CENTER
3
+ CENTER ||= Java::ProcessingCore::PConstants::CENTER
4
4
  # The boundary class is used to create a floor in this
5
5
  # sketch. Note it does not have a change method
6
6
  class Boundary
@@ -23,7 +23,7 @@ class Boundary
23
23
  b.set_user_data(self)
24
24
  end
25
25
 
26
- # Draw the boundary, if it were at an angle we'd have to do something fancier
26
+ # Draw the boundary, if it were at an angle we'd have to do something fancy
27
27
  def display
28
28
  fill(0)
29
29
  stroke(0)
@@ -6,10 +6,13 @@ require_relative 'lib/boundary'
6
6
 
7
7
  attr_reader :box2d, :particles, :wall
8
8
 
9
- def setup
9
+ def settings
10
10
  size 400, 400
11
- @box2d = Box2D.new(self)
12
- box2d.create_world
11
+ end
12
+
13
+ def setup
14
+ sketch_title 'Test Contact'
15
+ @box2d = WorldBuilder.build(app: self)
13
16
  box2d.add_listener(CustomListener.new)
14
17
  @particles = []
15
18
  @wall = Boundary.new(self, width / 2, height - 5, width, 10)
data/lib/pbox2d.rb CHANGED
@@ -7,7 +7,7 @@ end
7
7
  ContactListener = Java::OrgJbox2dCallbacks::ContactListener
8
8
 
9
9
  def import_class_list(list, string)
10
- list.each { |klass| java_import format(string, klass) }
10
+ list.each { |d| java_import format(string, d) }
11
11
  end
12
12
 
13
13
  common = %w( Vec2 Transform )
@@ -19,15 +19,44 @@ import_class_list(shape, shape_format)
19
19
  world = %w( Body BodyDef BodyType World FixtureDef )
20
20
  world_format = 'org.jbox2d.dynamics.%s'
21
21
  import_class_list(world, world_format)
22
- joint = %w( Joint JointDef DistanceJointDef RevoluteJoint RevoluteJointDef MouseJointDef)
22
+ joint = %w(
23
+ Joint
24
+ JointDef
25
+ DistanceJointDef
26
+ RevoluteJoint
27
+ RevoluteJointDef
28
+ MouseJointDef
29
+ )
23
30
  joint_format = 'org.jbox2d.dynamics.joints.%s'
24
31
  import_class_list(joint, joint_format)
32
+
33
+ # Import into module namespace to avoid likely clashes
25
34
  module PB
26
- particle = %w( ParticleBodyContact ParticleGroup ParticleType ParticleColor
27
- ParticleGroupDef StackQueue ParticleContact ParticleGroupType VoronoiDiagram
28
- ParticleDef ParticleSystem )
35
+ particle = %w(
36
+ ParticleColor
37
+ ParticleContact
38
+ ParticleGroupDef
39
+ ParticleBodyContact
40
+ ParticleGroup
41
+ ParticleType
42
+ ParticleGroupType
43
+ ParticleGroupDef
44
+ ParticleSystem
45
+ StackQueue
46
+ VoronoiDiagram
47
+ )
29
48
  particle_format = 'org.jbox2d.particle.%s'
30
49
  import_class_list(particle, particle_format)
31
50
  end
32
51
 
33
52
  require_relative 'pbox2d/box2d.rb'
53
+
54
+ # Box2D factory
55
+ module WorldBuilder
56
+ def self.build(app:, **opts)
57
+ b2d = Box2D.new(app)
58
+ b2d.init_options(opts)
59
+ b2d.create_world
60
+ b2d
61
+ end
62
+ end
data/lib/pbox2d/box2d.rb CHANGED
@@ -23,7 +23,7 @@ class Box2D < Java::ProcessingBox2d::Box2DProcessing
23
23
  end
24
24
 
25
25
  def default_step
26
- { time_step: 1.0 / 60, velocity_iter: 8, position_iter: 10 }
26
+ { time_step: 1.0 / 60, velocity_iter: 8, position_iter: 10 }
27
27
  end
28
28
 
29
29
  def gravity(args)
@@ -32,7 +32,7 @@ class Box2D < Java::ProcessingBox2d::Box2DProcessing
32
32
 
33
33
  def add_listener(listener)
34
34
  # in combination with field accessor we can access protected world
35
- self.world.setContactListener(listener)
35
+ world.setContactListener(listener)
36
36
  end
37
37
 
38
38
  def version
@@ -1,3 +1,4 @@
1
+ # module to give version a namespace
1
2
  module Pbox2d
2
- VERSION = "0.5.0"
3
+ VERSION = '0.6.0'
3
4
  end
data/pbox2d.gemspec CHANGED
@@ -6,7 +6,7 @@ require 'pbox2d/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'pbox2d'
8
8
  spec.version = Pbox2d::VERSION
9
- spec.license = 'FreeBSD/Simplified'
9
+ spec.license = 'BSD-2-Clause'
10
10
  spec.has_rdoc = true
11
11
  spec.extra_rdoc_files = ['README.md', 'LICENSE.md']
12
12
  spec.authors = ['Martin Prout']
@@ -26,8 +26,8 @@ EOF
26
26
  spec.add_development_dependency "rake", "~> 10.0"
27
27
  spec.add_development_dependency "minitest", "~> 5.8"
28
28
  spec.platform='java'
29
- spec.requirements << 'A decent graphics card'
30
- spec.requirements << 'java runtime >= 1.8+'
31
- spec.requirements << 'processing = 3.0.1+'
29
+ # spec.requirements << 'A decent graphics card'
30
+ # spec.requirements << 'java runtime >= 1.8+'
31
+ # spec.requirements << 'processing = 3.0.1+'
32
32
  spec.requirements << 'maven = 3.3.3'
33
33
  end
data/pom.xml CHANGED
@@ -3,7 +3,7 @@
3
3
  <modelVersion>4.0.0</modelVersion>
4
4
  <groupId>org.ruby-processing</groupId>
5
5
  <artifactId>box2d</artifactId>
6
- <version>0.5.0-SNAPSHOT</version>
6
+ <version>0.6.0</version>
7
7
  <packaging>jar</packaging>
8
8
  <description>
9
9
  jbox2d-library for JRubyArt
@@ -28,7 +28,7 @@
28
28
 
29
29
  <licenses>
30
30
  <license>
31
- <name>Simplified BSD License</name>
31
+ <name>BSD-2-clause</name>
32
32
  <url>http://www.opensource.org/licenses/bsd-license.php</url>
33
33
  </license>
34
34
  </licenses>
@@ -46,6 +46,8 @@
46
46
  <groupId>org.jbox2d</groupId>
47
47
  <artifactId>jbox2d-library</artifactId>
48
48
  <version>2.3.1-SNAPSHOT</version>
49
+ <scope>system</scope>
50
+ <systemPath>${jbox2d.home}/jbox2d-library-2.3.1-SNAPSHOT.jar</systemPath>
49
51
  </dependency>
50
52
  <dependency>
51
53
  <groupId>org.processing</groupId>
@@ -60,9 +62,10 @@
60
62
  <maven.compiler.source>1.8</maven.compiler.source>
61
63
  <maven.compiler.target>1.8</maven.compiler.target>
62
64
  <!-- for Mac developers, non Archlinux and Windows can probably figure it out
63
- <processing.home>/Applications/Processing.app/Contents/Java</processing.home>
65
+ <processing.home>/Applications/Processing.app/Contents/Java</processing.home>
64
66
  -->
65
67
  <processing.home>/usr/share/processing</processing.home>
68
+ <jbox2d.home>${user.home}/jbox2d/jbox2d-library/target</jbox2d.home>
66
69
  </properties>
67
70
  <build>
68
71
  <sourceDirectory>src</sourceDirectory>
@@ -75,30 +78,6 @@
75
78
  </extension>
76
79
  </extensions>
77
80
  <plugins>
78
- <plugin>
79
- <artifactId>maven-source-plugin</artifactId>
80
- <version>2.2.1</version>
81
- <executions>
82
- <execution>
83
- <id>attach-sources</id>
84
- <goals>
85
- <goal>jar</goal>
86
- </goals>
87
- </execution>
88
- </executions>
89
- </plugin>
90
- <plugin>
91
- <artifactId>maven-javadoc-plugin</artifactId>
92
- <version>2.9</version>
93
- <executions>
94
- <execution>
95
- <id>attach-javadocs</id>
96
- <goals>
97
- <goal>jar</goal>
98
- </goals>
99
- </execution>
100
- </executions>
101
- </plugin>
102
81
  <plugin>
103
82
  <artifactId>maven-compiler-plugin</artifactId>
104
83
  <version>3.1</version>
@@ -120,27 +99,6 @@
120
99
  <artifactId>maven-resources-plugin</artifactId>
121
100
  <version>2.6</version>
122
101
  </plugin>
123
- <plugin>
124
- <groupId>org.apache.maven.plugins</groupId>
125
- <artifactId>maven-dependency-plugin</artifactId>
126
- <version>2.10</version>
127
- <executions>
128
- <execution>
129
- <id>default-cli</id>
130
- <configuration>
131
- <artifactItems>
132
- <artifactItem>
133
- <groupId>org.jbox2d</groupId>
134
- <artifactId>jbox2d-library</artifactId>
135
- <version>2.3.1-SNAPSHOT</version>
136
- <type>jar</type>
137
- <outputDirectory>lib</outputDirectory>
138
- </artifactItem>
139
- </artifactItems>
140
- </configuration>
141
- </execution>
142
- </executions>
143
- </plugin>
144
102
  </plugins>
145
103
  </build>
146
104
  </project>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pbox2d
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: java
6
6
  authors:
7
7
  - Martin Prout
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-05 00:00:00.000000000 Z
11
+ date: 2015-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jruby_art
@@ -119,7 +119,7 @@ files:
119
119
  - src/processing/box2d/Step.java
120
120
  homepage: https://github.com/ruby-processing/jbox2d
121
121
  licenses:
122
- - FreeBSD/Simplified
122
+ - BSD-2-Clause
123
123
  metadata: {}
124
124
  post_install_message:
125
125
  rdoc_options: []
@@ -136,12 +136,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
136
  - !ruby/object:Gem::Version
137
137
  version: '0'
138
138
  requirements:
139
- - A decent graphics card
140
- - java runtime >= 1.8+
141
- - processing = 3.0.1+
142
139
  - maven = 3.3.3
143
140
  rubyforge_project:
144
- rubygems_version: 2.4.6
141
+ rubygems_version: 2.5.0
145
142
  signing_key:
146
143
  specification_version: 4
147
144
  summary: jbox2d wrapped in a gem for JRubyArt